24.2.3.24011630. Iz numeričke matematike je poznato da se određeni integral neke funkcije f(x) na intervalu (a, b) može približno izračunati uz pomoć tzv. Simpsonovog pravila, prema kojem je:

gdje je n broj podintervala na koji dijelimo interval (a, b) i koji mora biti paran (veći broj podintervala daje veću tačnost računanja), a h je dužina svakog podintervala, tj. h = (b – a) / n. Napisati funkciju “Integral“ koja prima kao parametre f, a, b i n ( f je pokazivač na funkciju čiji se integral računa) a koja kao rezultat daje približnu vrijednost integrala. Napisanu funkciju testirajte na primjerima integrala funkcije sin x na intervalu (0, Pi), zatim funkcije x3 na intervalu (0, 10), i funkcije 1/x na intervalu (1, 2). Testiranje izvršite za različite vrijednosti n i uporedite rezultate sa tačnim rezultatima. Upišite u svesku kao zaključak kolike su vrijednosti za n bile potrebne da se dobije rezultat tačan na 5 decimala za sva tri primjera.

Opis rješenja:

Listing programa:

#include <iostream>
#include <conio.h>
#include <cmath>
#include <algorithm>
using namespace std;
double F(double x){
return x;
}
double Integral(double f(double),double a,double b,int n){
    double s1(0),s2(0),s;
    for(int k=0;k<n+1;k++){
        s=f(a+k*((b-a)/n));
        if(k%2){
                s1+=s;
                s2+=s;
        }
        else 
                s1+=s;
    }
return ((b-a)/3)*(s1+s2);
}
int main(){
int n;
double A,B,r;

cin>>n>>A>>B;
r=Integral(F,A,B,n);
cout<<endl<<r;
getch();
return 0;
}

Ispis na ekranu:

Riješeni zadaci 2    Index