Witam, mam do napisania projekt całkowania analitycznego i numerycznego funkcji (-A/w)(cos(wb)-cos(w*a)) -----funkcja już po scałkowaniu. Mam teraz pytanie bo analitycznie to wiadomo trzeba pobieramy pulsacje, amplitude, kroki, przedziały i wrzucamy do funkcji. Problem jest jednak w całkowaniu sposobem trapezowym. Bo wyniki faktycznie są bardzo podobne co jest dobrym znakiem bo muszą się różnić minimalnie, jednak na końcu powinienem wszytsko pomnożyć przez h/2 (mnożę już sumę z całki żeby otrzymać pole). Po pomnożeniu wychodzi dziwny wynik, natomiast bez mnożenia jest wszystko OK. Czy ktoś może rzucić okiem na poprawność programu?
#include<iostream>
#include<iomanip>
#include<math.h>
#include <cstdlib>
#include <fstream>
using namespace std;
double analitycznie(double A,double w, double a, double b)
{
return (-A/w)(cos(wb)-cos(w*a));
}
double Pole(int a, int b, int n, int A, int w)
{
double
spr=b-a;
double wy;
double h=spr/n;
int j=1;
double xa=0.0;
double xb=0.0;
double suma_calki=0.0;
for (int i=0; i<=n; i++)
{
xa=a+ih;
xb=a+jh;
suma_calki+=analitycznie(A, w, xa, xb);
j++;
}
return suma_calki;
}
int main()
{
int a, b, n, w, A;
cout<<"Podaj pulsacje w "<<endl;
cin >>w;
cout<<"Podaj Amplitude A"<<endl;
cin>>A;
cout<<"Podaj liczbe trapezow: ";
cin>>n;
cout<<"Podaj przedzial a "<<endl;
cin>>a;
cout<<"Podaj przedzial b "<<endl;
cin>>b;
if(!(a<b))
cout<<"To nie jest przedział!";
else
cout<<"Pole figury wynosi metoda trapezowa : "<<Pole(a, b, n, A, w)<<endl;
cout<< "Pole figury wynois metoda analityczna "<< analitycznie(A, w, a, b)<<endl;
double bezwzgledna=(Pole(a, b, n, A, w)- analitycznie(A, w, a, b))/analitycznie(A, w, a, b);
cout<< " Blad wzgledny wynosi "<<(Pole(a, b, n, A, w)- analitycznie(A, w, a, b))/analitycznie(A, w, a, b)<<endl;
cout<< " Blad bezwzgledny wynosi "<<bezwzgledna*100<<"%"<<endl;
fstream Plik;
Plik.open("Dane.txt", ios::out | ios::app);
Plik<<"Dla danych: " <<endl;
Plik<<" - pulsacja "<< w<<endl;
Plik<<" - amplituda "<< A<<endl;
Plik<<" - liczba krokow "<< n<<endl;
Plik<<" - przedzial a "<< a<<endl;
Plik<<" - przedzial b "<< b<<endl;
Plik<<"Pole figury wynosi metoda trapezowa : "<<Pole(a, b, n, A, w)<<endl;
Plik<< "Pole figury wynois metoda analityczna "<< analitycznie(A, w, a, b)<<endl;
Plik<< " Blad wzgledny wynosi "<<(Pole(a, b, n, A, w)- analitycznie(A, w, a, b))/analitycznie(A, w, a, b)<<endl;
Plik<< " Blad bezwzgledny wynosi "<<bezwzgledna*100<<"%"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}