Ολοκλήρωση με τον κανόνα του τραπεζίου στη 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 License
Εκπαιδευτικό υλικό από τον Αθανάσιο Σταυρακούδη σας παρέχετε κάτω από την άδεια Creative Commons Attribution-NonCommercial-ShareAlike 4.0 License.
Σας παρακαλώ να ενημερωθείτε για κάποιους επιπλέον περιορισμούς
http://stavrakoudis.econ.uoi.gr/stavrakoudis/?iid=401.