Metody Numeryczne. Metoda Simpsona
Ostatnio zmodyfikowano 2012-11-23 20:08
Menos Temat założony przez niniejszego użytkownika |
Metody Numeryczne. Metoda Simpsona » 2012-11-23 15:25:35 Napisalem ten kod.... jakies 3 tygodnie temu. Na podstawie wikipedi ksiazek. Twierdze ze calkowanie odbywa sie poprzez calkowanie podprzedzialow a potem ich dodawaniem. Niestety.... doktor od Numerycznych twierdzi inaczej..... i moje pytanie.. kto ma racje? double funkcja( double x, string wzor ) { FunctionParser funkcja_sparserowana; funkcja_sparserowana.Parse( wzor, "x" ); double x1 = x; double wynik = funkcja_sparserowana.Eval( & x1 ); return wynik; }
double simpson( double a, double b, int ilosc_podzialow, string wzor ) { double x; double dx =( b - a ) / ilosc_podzialow; double suma = 0, wynik = 0; for( int i = 1; i <= ilosc_podzialow; i++ ) { x = a + i * dx; suma += funkcja(( x - dx / 2 ), wzor ); if( i < ilosc_podzialow ) { wynik += funkcja( x, wzor ); } } wynik =( dx / 6 ) *( funkcja( a, wzor ) + funkcja( b, wzor ) + 2 * wynik + 4 * suma ); return wynik; }
double wylicz_simps( double a, double b, int & licznik, double dokladnosc, string wzor ) { licznik = 1; double wynik1, wynik2; bool warunek = false; int ilosc_podzialow = 1; wynik1 = simpson( a, b, ilosc_podzialow, wzor ); while( !warunek ) { ilosc_podzialow++; wynik2 = simpson( a, b, ilosc_podzialow, wzor ); licznik++; if( fabs( wynik1 - wynik2 ) < dokladnosc ) { warunek = true; } else { wynik1 = wynik2; } } return wynik2; }
|
|
cyklopek11 |
» 2012-11-23 20:08:02 Nikomu pewnie nie chce się analizować Twoich wzorów. Więc prosta rada. Weź wybierz kilka funkcji oraz przedziałów całkowania. Oblicz ręcznie a następnie przy pomocy Twojego programu. Jeśli błędy względne będą mniejsze od 5% to bez analizowania kodu programu można stwierdzić, że powinien być dobry. Oczywiście im więcej prób przeprowadzisz , tym lepiej. Jeśli jednak któraś z prób da duży błąd względny radze przeanalizować szczegółowo działanie kodu :-) |
|
« 1 » |