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
|
|