Ολοκλήρωση με τον κανόνα του τραπεζίου στη C++
Ο κανόνας του τραπεζίου για τον αριθμητικό υπολογισμό ορισμένου ολοκληρώματος. Εδώ δίνεται μια συνάρτηση (f) και ο υπολογισμός με βάση τον κανόνα του τραπεζίου γίνεται μέσα στη main.
#include <iostream> #include <math.h> using namespace std; double f (double x) { return x*log(x); } int main() { double a, b; unsigned int i, n; double h; double integral = 0.0; cout << "Please give a (lower bound) : "; cin >> a; cout << "Please give b (upper bound) : "; cin >> b; if( a < b ) { cout << "Please give n (number of points) : "; cin >> n; if (n < 2) n = 1; /* declare vectors and compute h */ double x[n+1], y[n+1], e[n]; h = (b-a)/n; /* initial values of x0 and y0 */ x[0] = a; y[0] = f(x[0]); /* compute all trapezoid areas */ for (i=1; i<=n; i++) { x[i] = x[i-1] + h; y[i] = f(x[i]); e[i-1] = (h/2) * (y[i] + y[i-1]); integral += e[i-1]; } /* print the results */ cout << endl; cout << "integral = " << integral << endl; } else { cout << endl; cout << "a must be less than b" << endl; } return 0; }
Ας υποθέσουμε πως θέλουμε το ολοκλήρωμα
$$ \int_{-\infty}^{0} \frac{1}{\sqrt{2\pi}}\, e^{- \frac{1}{2} x^2} $$
Μεταγλώττιση και δοκιμαστική εκτέλεση:
astavrak@alice:~$ g++ program.cpp astavrak@alice:~$ ./a.out Please give a (lower bound) : -5 Please give b (upper bound) : 0 Please give n (number of points) : 100 integral = 0.5
Να μετατρέψετε τον υπολογισμό του ολοκληρώματος (εμβαδού) σε συνάρτηση, πχ
double trapezoid (double a, douyle b, int n) { double integral = 0.0; ..................... return integral; }
Οπότε αφού το πρόγραμμα (main) λάβει από το χρήστη τις τιμές των a,b,n, καλείται η συνάρτηση trapezoid για τον υπολογισμό του ολοκληρώματος.
σχολιασμοί, εξωτερικοί σύνδεσμοι, βοήθεια, ψηφοφορίες, αρχεία, κτλ.
Εκπαιδευτικό υλικό από τον
Αθανάσιο Σταυρακούδη
σας παρέχετε κάτω από την άδεια
Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.