[C++] Również epsilon dla Metody Simpsona

Serphis
Użytkownik
Użytkownik
Posty: 77
Rejestracja: 17 wrz 2009, o 20:54
Płeć: Mężczyzna
Lokalizacja: Piotrków
Podziękował: 4 razy
Pomógł: 2 razy

[C++] Również epsilon dla Metody Simpsona

Post autor: Serphis »

Proszę również o pomoc w celu dodania dokładności dla metody simpsona, kod z moją próbą

Kod: Zaznacz cały

double simson(double xp,double xk, int N,double e)
{double s,st,dx,x,c;
    s  = 0; st = 0;
    do
    {

      c=s;

    dx = (xk - xp) / N;
    for(int i = 1; i <= N; i++)
    {
      x = xp + i * dx;
      st += funkcja(x - dx / 2);
      if(i < N) s += funkcja(x);
    }
    s = dx / 6 * (funkcja(xp) + funkcja(xk) + 2 * s + 4 * st);
    N++;
    cout<<s<<endl;
    cout<<c<<endl;
    Sleep(2000);

}while(abs(s-c)>e);

    return s;
}
Xitami

[C++] Również epsilon dla Metody Simpsona

Post autor: Xitami »

doładnie tak jak w "trapezie" (tylko troszkę inaczej)
Serphis
Użytkownik
Użytkownik
Posty: 77
Rejestracja: 17 wrz 2009, o 20:54
Płeć: Mężczyzna
Lokalizacja: Piotrków
Podziękował: 4 razy
Pomógł: 2 razy

[C++] Również epsilon dla Metody Simpsona

Post autor: Serphis »

No próbuje tu zwiększać N właśnie i program się zapętla, zatem co tu jest współczynnikiem?
Xitami

[C++] Również epsilon dla Metody Simpsona

Post autor: Xitami »

w pętli brakuje zerowania "st" i całeczka ci się rozbiega

powiększanie N o jeden to kiepski pomysł
o ile poprawi się rozwiązanie, gdy N=1'000'000 powiększysz o jeden?
pewnie tylko ociupinkę, ale...
by dojść do tego miliona, wartość funkcji musiała być obliczona - no ile razy?
coś koło 500 miliardów razy! a to musi potrwać (nawet bez sleep(2000))
lepsze podwajanie i skorzystanie z tego, że połowa roboty już wykonana

a tu troszkę poprawiona metoda simPsona

Kod: Zaznacz cały

double simpson(double xp,double xk,int N,double e){
double s,st,dx,x,c;int i;s=0;st=0;do{c=s;dx=(xk-xp)
/N;for(st=0,i=1;i<= N;i++){x=xp+i*dx;st+=funkcja(x-
dx/2);if(i<N)s+=funkcja(x);}s=dx/6*(funkcja(xp)+
funkcja(xk)+2*s+4*st);N*=2;if(N>100000000)break;}
while(abs(s-c)>e);return s;}
Serphis
Użytkownik
Użytkownik
Posty: 77
Rejestracja: 17 wrz 2009, o 20:54
Płeć: Mężczyzna
Lokalizacja: Piotrków
Podziękował: 4 razy
Pomógł: 2 razy

[C++] Również epsilon dla Metody Simpsona

Post autor: Serphis »

Bardzo dziękuje, niesamowicie mi pomogłeś
ODPOWIEDZ