Die effizeinte merman DZGL :
*********************
Betrachten wir nochmals deinen Ausgangscode :
Zitat:
> restart;
> r:=Pi/180;
> x[1]:=1-r^2/2;
>
> for n from 1 to 360 do
> x[n+1]:=evalf(x[n]*(1-r^2/2)-sqrt(1-x[n]^2)*sqrt(r^2-r^4/4));
> y[n+1]:=sqrt(1-x[n+1]^2); # -> Sinuswerte
> od:
|
Schleifenoperationen :
7 Multiplikationen
2 Divisionen
5 Additionen
3 Wurzelfunktionen !
Gueltigkeitsbereich: 0..180 Grad
In der Form kauft dir dies natuerlich kein Wiki ab
Zwischenoptimierung :
****************
Berechnen aller konstanten Ausdruecke nicht innerhalb, sondern vor der Schleife.
Zitat:
> m0:=evalf(Pi/180);
> c1:=1-m0^2/2;
> c2:=sqrt(m0^2-m0^4/4);
> x[1]:=c1;
>
> for n from 1 to 360 do
> x[n+1]:=x[n]*c1 - sqrt(1-x[n]^2)*c2;
> y[n+1]:=sqrt(1-x[n+1]^2); # -> Sinuswerte
> od;
|
m0 ist gleich dx. Einen Kreis in 360 Grad einzuteilen ist voellg willkuerlich. m0, dx ist einfach 2*Pi/N. Ueber wieviele Abtastwerte N man den Einheitskreisumfang 2*Pi in Teilsehnen dx diskretisiert.
Schleifenoperationen :
4 Multiplikationen
3 Additionen
2 Wurzelfunktionen !
Gueltigkeitsbereich: 0..180 Grad
optimiertes, elegantes merman DZGL System :
**********************************
Elimination der Wurzelausdruecke durch simultanes Berechnen der Sinus und Kosinusfunktion.
Fuehrt auf ein lineares Differenzengleichungssystem.
Merke:
Wer keine Probleme hat Anschauungsraueme dimensional zu erweitern ist meist im Vorteil
Zitat:
restart;
> N:=360; # Anzahl Abtastwerte
> P:=3; # Anzahl Perioden
> M:=P*N;
> m0:=evalf(2*Pi/N);
> c1:=1-m0^2/2;
> c2:=sqrt(m0^2-m0^4/4);
> x[1]:=c1;
> y[1]:=c2;
>
> for n from 1 to M do
> x[n+1]:=x[n]*c1 - y[n]*c2; # -> Cosinuswerte
> y[n+1]:=y[n]*c1 + x[n]*c2; # -> Sinuswerte
> od:
>
> # DRUCKROUTINEN
> druck1:=seq([i,y[i]],i=1..M):
> druck2:=seq([i,sin(i*2*Pi/360)],i=1..M):
> druck3:=seq([i,x[i]],i=1..M):
> druck4:=seq([i,cos(i*2*Pi/360)],i=1..M):
> plot([[druck1],[druck2],[druck3],[druck4]]);
|
N gibt die Anzahl Abtatswerte pro Periode vor.
P gibt die Anzahl Perioden vor, die iteriert werden.
M=N*P;
Schleifenoperationen :
4 Multiplikationen
2 Additionen
Gueltigkeitsbereich: alle Winkel !
Aenderung an Mermans Grundidee, Algoritmus : Keine
Ausdruck inclusive (ueberdecktem) Referenz Sinus und Kosinus
Na, das ist doch was fuer 4 Multiplikationen. Das hat Hand und Fuss und es ist immer noch das Ergebnis
deiner graphischen Methode. Voellig aequivalent dazu, aber aufgrund der optimierten Implementation kein Vergleich zu deiner Ausgangsversion (rot, bis 180 Grad von der Referenz ueberdeckt) :
Viele Gruesse