Sinus approximation < eindimensional < reell < Analysis < Hochschule < Mathe < Vorhilfe
|
Ich ich habe die aufgabe ein programm zu schreiben das den sinus einer zahl approximiert.
gegeben ist diese formel:
sin(x) = [mm] \summe_{k=0}^{n} (-1)^{k} [/mm] * ( [mm] x^{2k+1} [/mm] / (2k+1)! )
und dies ist die Antwort:
int n=1000;
double ret=0.0, zw=x;
for (int i=1;i<=n;i++)
{
ret = ret + zw;
zw = (-zw)*x*x/(2*i)/(2*i+1);
}
ret = ret + zw;
return ret;
für die die nicht coden können, was es macht ist das zwischen den {}klammern wiederholen und jedes mal wird i um eins erhöht bis i größer als n wird, dann macht es unten weiter...
er macht also für jedes i zw = (-zw)*x*x/(2*i)/(2*i+1); und summiert jedes zwischenergebnis. zum schluss ist ret (die summierten zwischenergebnisse) dann der sinus von x...
Meine frage ist, wie funktioniert das?
also wieso wird zw = (-zw)*x*x/(2*i)/(2*i+1); genommen und wieso ergibt die summe sinus... ich sehe hier teile der gegebenen formel, aber wo wird faktorisiert, oder wird das hier anders gemacht, oder wurde hier etwas gekürzt oder so?
Ich habe diese Frage in keinem Forum auf anderen Internetseiten gestellt.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:51 Do 17.11.2011 | Autor: | leduart |
Hallo
ich versteh deine Frage nicht ganz.
um on zBsp. [mm] x^3/3! [/mm] auf [mm] x^5/5! [/mm] zu kommen musst du doch dein zw= [mm] x^3/3! [/mm] mit x*x/4/5 multiplizieren,
dein armer computer soll ja nicht beim 100 sten Schritt
[mm] x^{201}/201! [/mm] ausrechnen, wo er ja einen Schritt vorher [mm] x^{199}/199! [/mm] berechnet hat. da muss er doch nur noch mit x*x mult und durch 200*201 dividieren.
also er rechnet Schritt für Schritt ( $ [mm] x^{2k+1} [/mm] $ / (2k+1)!
aus benutzt aber immer das zuvor ausgerechnete zw um zum nächsten zu kommen. und in ret wird alles aufsummiert. (und natürlich jedesmal das vorzeichen gewechselt (wegen [mm] (-1)^k [/mm] in der formel.)
Gruss leduart
|
|
|
|