Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

Obliczanie drugiej pochodnej funcji

Ostatnio zmodyfikowano 2015-01-10 21:42
Autor Wiadomość
stryku
Temat założony przez niniejszego użytkownika
Obliczanie drugiej pochodnej funcji
» 2014-05-05 18:17:38
Witam mam problem z obliczeniem drugiej pochodnej funkcji. Bardziej z obmyśleniem jak to zrobić lub co robię źle.
Mam coś takiego
C/C++
double h = 0.00000001;
inline double p1f( double x, fn f ) // f to wskaźnik na funkcję f(x)
{
    return( f( x + h ) - f( x - h ) ) /( 2.0 * h );
}

inline double p2f( double x, fn f ) // f to wskaźnik na funkcję f(x)
{
    return( p1f( x + h, f ) - p1f( x - h, f ) ) /( 2.0 * h );
}

Nie wiem nawet czy w dobrym kierunku myślę.
Wg wolframa wychodzi -4.69444...
a u mnie -4.996003610813204
P-109337
OSA_PL
» 2014-05-05 21:41:14
Mnie uczyli trochę innego wzoru:
f'(x) = lim_(d->0)((f(x+d)-f(x))/d)
Ale tu raczej problem tkwi w zbyt mało dokadnej wartości tej delty i małej dokładności obliczeń na zmiennych zmiennoprzecinkowych, bo 0.00000001 to jednak duuuużo więcej niż powinno być.
Spróbuj użyć long double, może się trochę poprawić.
P-109344
stryku
Temat założony przez niniejszego użytkownika
» 2014-05-06 10:45:24
Właśnie ten mój wzór ma niby lepsze własności numeryczne niż liczenie granicy. Pójdę dziś wykładowce zapytam
P-109352
OSA_PL
» 2014-05-06 15:25:47
Na pewno nie, przy liczeniu granicy będziesz miał różnicę wartości tych funkcji w punktach nieskończenie blisko siebie, czyli praktycznie w jednym punkcie. Przy twoim wzorze te punkty są w odległości 0.00000002 i jeżeli pomiędzy tymi punktami nastąpi zmiana tempa wzrostu wynik twojej funkcji będzie średnią.
P-109373
Piastlis
» 2015-01-10 21:42:27
Kompy z natury kiepsko liczą na liczbach rzeczywistych.Wynika to z niedokładności zapisu i implementacji funkcji. Przeliczyłem tą metodą 2 pochodną dla x= 0.1 i ze zmieniającą się deltą funkcji sin. Poprawny wynik to -0.0998334166.


Podaj liczbe:
0.1
0.10000000000000001000  -0.19850382819547036000      1
0.01000000000000000000  -0.10977738602110329000      2
0.00100000000000000000  -0.10082836233995580000      3
0.00010000000000000000  -0.09993291750043961600      4
0.00001000000000000000  -0.09984346689976196500      5
0.00000100000000000000  -0.09983680595058258600      6
0.00000010000000000000  -0.09992006973289899200      7
0.00000001000000000000  -0.27755580245714284000      8
0.00000000100000000000   13.87778800524766800000     9
0.00000000010000000000   1387.77877983818940000000   10
0.00000000001000000000   0.00000166967134562768      11
0.00000000000100000000   0.00003144186300207962      12
0.00000000000010000000  -0.00006559423143537301      13 
 
Dla delty mniejszej niż 1E-7 wyniki nie mają sensu a najlepszy wynik to 5 cyfr znaczących:)
P-124607
« 1 »
  Strona 1 z 1