Einzelnen Beitrag anzeigen
  #11  
Alt 11.12.11, 22:27
Benutzerbild von richy
richy richy ist offline
Singularität
 
Registriert seit: 01.05.2007
Ort: karlsruhe
Beitr?ge: 4.170
Standard AW: Math Schwingungs DZGL

Hi Merman
Die gute Nachricht war, dass deine Sinus Iteration sehr genau ist, die etwas schlechtere fuer dich, dass die Methode ueber das Additionstheorem sogar exakt ist.

Begruendung :
Betrachte wir die Gleichung A) :

cos(x0+dx)=cos(dx)*cos(x0)-sin(dx)*Wurzel(1-cos(x0)^2)
********************************************

Diese stellt einen exakten Zusammenhang dar zwischen cos(x0) und cos(x0+dx)
Nehmen wir an wir haetten einen Anfangswert y(0)=cos(x0) gewaehlt.
Wir benoetigen dann lediglich die konstanten Werte cos(dx) und sin(dx), die wir nur einmal vor der Iteration beliebig genau bestimmen muessen. (Dran denken: Einen Schleifen GALILEO2609 werfen wir stets aus der Schleife.) Wir koennen cos(x0+dx) somit mir belieber Genauigkeit effizient berechnen.
Die Genauigkeit ist unabhaengig von der Anzahl Iterationsschritte und wird in diesem Fall aufgrund der Maschinenungenauigkeit mit der Anzahl Iterationen in der Praxis sogar schlechter. Bleibt aber im Rahmen der Maschinenungenauigkeit. Vielleicht meinte dies der Wiki Mathematiker.

Quellcode
N:=360;
> m0:=evalf(2*Pi/360);
> c1:=cos(m0);
> c2:=sin(m0);
> x[0]:=1;
>
> for n from 0 to N do
> x[n+1]:=x[n]*c1-sqrt(1-x[n]^2)*c2;
> y[n+1]:=sqrt(1-x[n+1]^2); # -> Sinuswerte
> od:

Achtung : Gegenueber deiner Iteration muss man hier beim Index 0 starten.
Warum du den Startindex 1 verwendest ist mir nicht ganz klar. Abgesehen davon laesst sich nun alles sehr einfach deuten :

Folgende Iteration erzeugt eine Kosinusfunkton
y(k+1)=C1*y(k)-C2*Wurzel(1-y(k)^2)
y(0)=cos(0)

Dabei ist die Iteration exakt fuer
C1=cos(dx)
C2=sin(dx)

Die Werte der Konstanten C1 und C2 lassen sich (unnoetigerweise) ueber eine Taylorapproximation annaehern :

C1=cos(dx) etwa 1
C2=sin(dx) etwa dx
fuert auf eine klassische integrale (ungenaue) Euler Chromer Approximation
Anm: Funktioniert in der Form nur fuer die Sinus Funktion 0..Pi/2

C1=cos(dx) etwa 1-dx^2/2 (Taylorapproximation 2.ter Ordnung)
C2=sin(dx) etwa Wurzel(m0^2-m0^4/4); (Serienapproximation 2.ter Ordnung)
fuehrt auf die Mermanapproximation


Du hast somit an irgendeiner Stelle deiner graphischen Ueberlegungen einen Kreisbogen durch eine Gerade ersetzt. Und dies fuehrt nun leider doch zu einer unnoetigen Ungenauigkeit gegenueber der exakten Methode ueber die Additionstheoreme. Diese rechnet mit dem genauen Kreisbogen.


Dargestellt ist das Verhaeltnis der Approximation zum genauen Wert


Berechnet man den absoluten Fehler inclusive Maschinenfehler, so ist dieser bei der Additiostheoremmethode gegenueber deiner Naeherung um den Faktor 1000 geringer.
Bei 50 Digits Genauigkeit um den Faktor 10^43. e.t.c (Reiner Maschinenfehler)

Es ist schon ungewoehnlich. Aber bei der Sinus/Kosinusfunktion reicht tatsaechlich ein Wertepaar um daraus die gesamte Funktion exakt zu rekonstruieren.

Vorausschau :
Die gleichzeitige Implementation von sin() und cos() (DZGL System) vermeidet die Wurzelfunktion, senkt damit den numerischen Aufwand, vermeidet Fallunterscheidungen, ermoeglicht eine analytische Loesung und senkt nochmals den Maschinenfehler.

Gruesse

Ge?ndert von richy (16.12.11 um 20:59 Uhr)
Mit Zitat antworten