Ολοκλήρωση με τον κανόνα του τραπεζίου στη 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.