Quanten.de Diskussionsforum  

Zur?ck   Quanten.de Diskussionsforum > Plauderecke

Hinweise

Plauderecke Alles, was garantiert nichts mit Physik zu tun hat. Seid nett zueinander!

Antwort
 
Themen-Optionen Ansicht
  #11  
Alt 11.12.11, 23: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 21:59 Uhr)
Mit Zitat antworten
  #12  
Alt 12.12.11, 17:29
Benutzerbild von mermanview
mermanview mermanview ist offline
Profi-Benutzer
 
Registriert seit: 05.09.2011
Beitr?ge: 271
Standard AW: Math Schwingungs DZGL

Hallo richy,

die Herausforderung bestand u.a. darin den ersten Sinus-/ Kosinuswert mit klassischen Mitteln herzuleiten.

Wenn man dafür die implementierten Sinus/ Kosinusfunktion der Headerdatei verwendet,
Zitat:
> m0:=evalf(2*Pi/360);
> c1:=cos(m0);
> c2:=sin(m0);
dann muss das Ergebnis genau sein, zumal man auch keine anderen Vergleichswerte als eben diese hat.

Headerdateien verwenden i.d. Regel Cordic-Algo. bzw. Taylorreihe.
Dass diese genauer und schneller sind, war vorher schon klar.
Wie ich erwähnte, haben Excelvergleiche ergeben, dass der MermanSinus (bei grober Körnung: r = Pi/180) zumindest bis fünf Nachkommastellen passen.

Zur Näherung des ersten Wertes (z.B. für 1°) kann man z.B den Sekantenabschnitt mit dem Kreisabschnitt gleichsetzen:
Zitat:
Du hast somit an irgendeiner Stelle deiner graphischen Ueberlegungen einen Kreisbogen durch eine Gerade ersetzt.
Genauigkeit (nicht Schnelligkeit) erreicht man über feinere Körnung (z.B. 1/10°).

Bei geometrischen Konstruieren ist es schwierig mit einem Winkeldreieck zu arbeiten, mit dem Winkel von 0 Grad, außerdem ist dein Startwert ebenso 1°:
Zitat:
m0:=evalf(2*Pi/360);
Du setzt programiertechnisch bloß per Zuweisung cos(0) auf 1:
Zitat:
x[0]:=1;
Eine weitere Herausforderung wäre eine (einfache) Funktion f(x) (oder Reihenberechnung) die eine Sinuskurve als Funktionsgraph erzeugt (ohne die sin() Funktion zu verwenden)

Danke dir für deine überaus ausführlichen Ausarbeitungen,
und hoffe dass ich nichts falsch verstanden hab.

Hier noch eine kleine Nettigkeit, vielleichts kennst du es schon:
http://www.youtube.com/watch?v=iK9bhyl6B_E

Gruß Merman
Mit Zitat antworten
  #13  
Alt 12.12.11, 18:09
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
Zitat:
die Herausforderung bestand u.a. darin den ersten Sinus-/ Kosinuswert mit klassischen Mitteln herzuleiten.
Das koennte man auch einfacher haben :-) cos(0)=1. Ich weiss schon was du meinst. Man koennte dein Ziel vielleicht so formulieren, dass man gar keine Sinusfunktion verwendet. Also z.B. stattdessen eine Taylorreihe. Und diese hast du letzendlich auch eingegesetzt. Das ist insofern interessant, dass die Sinus Taylorreihe einen endlichen Konvergenzradius aufweist. Und der laesst sich mittels der merman-DZGL auf andere Bereiche transformieren. Ein Konvegenzradiustransformator :-) Ueberhaupt kommt es darauf an, was man sich denn als Einsatz der Sinusfunktion vorstellt. Fuer eine musikalische Echtzeitanwendung spielt z.B. die Genauigkeit gar keine Rolle. Aber letztendlich muss man sehen. In Punkto Genauigkeit ist die Additionstheoremmethode der Maßstab. Denn sie ist exakt.

BTW: Ein Header in C bindet Bibliotheken ein und Declerationen. Ich wuerde die genannten Programmzeilen einfach als Variablenzuweisung bezeichnen.
Zitat:
Dass diese genauer und schneller sind, war vorher schon klar.
Die muessen aber auch erstmal von jemandem geschrieben werden. Und der Cordic Algo scheint mir ein aehnliches Prinzip wie deines zu verwenden.
Will man es ganz schnell, dann nimmt man eine Tabelle, die man vorher berechnet und verwendet Register Integer Zahlen.

Zitat:
Wie ich erwähnte, haben Excelvergleiche ergeben, dass der MermanSinus (bei grober Körnung: r = Pi/180) zumindest bis fünf Nachkommastellen passen.
Die 5 Nachkommastellen habe ich auch ermittelt. Bei der Additionstheorem Methode sind auch locker 50 Nachkommastellen Genauigkeit drin. Weil die Methode selbst, die Ausgangsaequivalenz exakt ist.

Zitat:
Genauigkeit (nicht Schnelligkeit) erreicht man über feinere Körnung (z.B. 1/10°).
Ich meine fast, weil deine Taylorpproximation dann genauer wird. Das koennte man nochmals genauer betrachten.
Zitat:
Bei geometrischen Konstruieren ist es schwierig mit einem Winkeldreieck zu arbeiten, mit dem Winkel von 0 Grad, außerdem ist dein Startwert ebenso 1°:
Ich finde es sehr interessant, dass deine Konstruktion sowohl das Additionstheorem als auch die Taylorreihe als Naeherungen herleitet. Dafuer hat man algebraisch einen anderen, eventuell einfacheren Ueberblick.
Das Thema moechte ich auch noch nicht abschliessen, weil es doch noch sehr viel interessante Aspekte enthaelt. Ein Problem aller Varianten ist in der Form mit der Wurzel, dass sie nur im Intervall 0..180 Grad funktionieren. Dass laesst sich aber sehr leicht aendern, indem man Sinus und Kosinus simultan berechnet. Also nicht nur eine DZGL sondern zwei miteinander verkoppelte. Das geht ganz einfach. Auch fuer deine Varinate und laesst sich auch einfach erklaeren. Es stellt zusammen mit dem Gedanken der Taylorapproximaton in C1 und C2 deine Approximation auch auf eine noch solidere Basis.

Zitat:
vielleichts kennst du es schon:
He he, yepp das ist total nach meinem Geschmack :-)
Kann mir aber vorsellen, dass es Menschen gibt, die nicht darueber lachen, weil sie den eigentlichen Witz darin nicht erkennen :-)
Hilfe ... die Falsettestimme ... oder die ein Meter siebzig

Viertausend sechshundert fuenfzig Meter
So weit ist es bis zum Horizont

(Koennte in Holland sogar hinkommen)
Gruesse

Ge?ndert von richy (12.12.11 um 18:19 Uhr)
Mit Zitat antworten
  #14  
Alt 12.12.11, 18:54
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

Uebergang zum verkoppelten Differenzengleichungssystem
*******************************************

Unsere Ausgangsmethode lautete allgemein (ohne Anfangswertbetrachtung) :

> for n from 0/1 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:

In x[n] wird die Kosinusfunktion iteriert. Allerdings hat die Iteration nur einen Gueltigkeitsbereich von 0..180 Grad (0..Pi)
y[n] stellt selbst keine Iterationsvariabe dar. Es wird lediglich die Konsinusfunktion in ene Sinusfunkton umgegerechnet ueber die Identitat :

sin(x)^2+cos(x)^2=1

Man koennte auch direkt die Sinusfunktion iterieren. Anhand der Additiostheoreme sieht man recht schnell, dass sich nur das Vorzeichen aendert und dies folgender Iteration entspraeche :

> for n from 0/1 to N do
> y[n+1]:=y[n]*c1+sqrt(1-y[n]^2)*c2;
> od:

Nun kennen wir unsere Zielfunktion sin(n*2*Pi/N) und sehen sofort, dass dann der Wurzelterm sqrt(1-y[n]^2) der Kosinusfunktion cos(n*2*Pi/N) entsprechen muss. Wie koennen wir auf die Kosinusfunktion zugreifen, ohne den Wurzelausdruck zu verwenden ? Indem wir diese gesondert iterieren. Und das hatten wir bereits implementiert :

> x[n+1]:=x[n]*c1-sqrt(1-x[n]^2)*c2;

Und hier ersetzen wir einfach den Wurzelterm durch die Sinusfunktion y[n]=sqrt(1-x[n]^2) und erhalten :

Zitat:
> for n from 0/1 to N do
> x[n+1]:=x[n]*c1-y[n]*c2; # x=Cosinus
> y[n+1]:=y[n]*c1+x[n]*c2; # y=Sinus
> od:
Und das funzt nun fuer beliebige Winkel auch groesser 180 Grad.
Fuer alle C1,C2 Varianten auch die merman Variante
Dazu vermeiden wir den ungenauen und langsamen Wurzelausdruck
Wir haben die DZGL dazu linearisiert und koennen sie sogar mittels Z Transformation analytisch untersuchen (allerdings ergibt dies Horrorausdruecke)

Gruesse

Ge?ndert von richy (12.12.11 um 19:15 Uhr)
Mit Zitat antworten
  #15  
Alt 12.12.11, 19:11
Benutzerbild von mermanview
mermanview mermanview ist offline
Profi-Benutzer
 
Registriert seit: 05.09.2011
Beitr?ge: 271
Standard AW: Math Schwingungs DZGL

Hallo nochmal,

kurz vor Feierabend:

In Headerdateien wird auf jede Menge Quelltext verwiesen, insofern auch auf Funktionen.
Zitat:
c1=cos(m0)
.. ist die Zuweisung des Ergebnisses der Berechnungsfunktion cos(),
die in irgendeinem Quelltext steht, welcher über eine Headerdatei mit eingebunden wird.

Der Gag wäre einen Quelltext zu schreiben, welcher ohne sin()/ cos()/tan() Funktionen auskommt, dennoch Sinuswerte oder -Kurve generiert, für Musik/ Echtzweit wahrscheinl. zu langsam.
(Die Genauigkeit wird wahrscheinlich eine kleinere Rolle spielen, wegen quantisierter Abtastung und Digitalisierung ?)

Noch besser wäre eine f(x) o.ä., habe zu diesem Zweck die Sinuskurve nochmal anders bildlich zerlegt:

http://www.quanten.de/forum/showthread.php5?t=2095

,... hat aber bisher nicht viel gebracht, ... ich bleibe aber dran, vorerst mit meinen bescheidenen Mitteln.

Danke dir,

Gruß Merman
Mit Zitat antworten
  #16  
Alt 12.12.11, 20:37
Benutzerbild von mermanview
mermanview mermanview ist offline
Profi-Benutzer
 
Registriert seit: 05.09.2011
Beitr?ge: 271
Daumen hoch AW: Math Schwingungs DZGL

Nachtrag. (Mein voriger Beitrag gehörte eigentlich vor deinen letzten, irgendwie warst du schneller)

... wenn man doch cos() und sin() verwendet um die (stauchenden und dehnenden) Konstanten c1 und c2 festzulegen, dann könnte man doch gleich jeden Winkel mit dieser C-Funktion berechnen lassen.

for(n=0;n<=360;n++)
{
. x[n]=sin[n]
. y[n]=n*(2*Pi()/360)
. plot x[n], y[n], "."
}

, so oder ähnlich (die letzte Zeile ist ORIC1- Basic-Code : ), aber du weißt was ich meine.
Das ergäbe ähnlich genaue Werte

Muss Feierabend machen,
Danke nochmal,

Gruß Merman
Mit Zitat antworten
  #17  
Alt 12.12.11, 20:53
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

Header
******
In hoeheren Programmiersprachen (Maschinensprache waere die unterste) ist der Header meist nicht mehr als solcher erkenntlich. Ebenso ist die Variablendeklaration und Speicherplatzreservierung automatisiert. Man muss sich praktisch um nichts mehr kuemmern. So ist das auch in Maple oder Exel.

Zitat:
In Headerdateien wird auf jede Menge Quelltext verwiesen, insofern auch auf Funktionen.
Ja das stimmt. Aber nur teilweise. Bei speziellen oder selbsgeschriebenen Funktionen.
http://www.imb-jena.de/~gmueller/kur.../c_define.html
Der Header ist ein TEXT ! Preprozessor. Der ersetzt lediglich Zeichenfolgen im Quelltext.

Und jawohl, der Ausruck cos(x) ist natuerlich nichts weiter als die Einsprungadresse auf ein Unterprogramm, dass den Funktionswert zurueckgibt. Aber Standartfunktionen wie cos(x) gehoeren zur Standartbibliothek hoeherer Programmiersprachen. Man muss sie in einem Header also nicht extra einbinden. Die sind vorcompiliert.
Ein Header ist wie gesagt ein Textpreprozessor. Wenn du in C schreibst

#include Blabla.h

Dann ist es so als ob der Text der Datei Blabla.h genau an dieser Stelle steht.
Und was du nun vielleicht meinst. Wenn man in den Header schreibt :

#define C1 cos(dx)

Dann waere das nicht effizient sondern eventuel galileo2609. Also ineffizienter redudanter Code. Denn diese Anweisung ist rein textorientiert und ersetzt im folgenden die Zeichenfolgen C1 durch cos(dx). Und wenn C1 in einer Schleife steht ist das redudant. Denn dann steht dort in Wirklichkeit cos(dx). Und in jedem Schleifendurchgang springt man in die Cosinusunterfunktion, obwohl das Ergebnis eine Konstante ist ! Fuer effizienten Code muss man vor allem die Schleifen optimieren. Die galileos eliminieren.

Falsch
*****

start Schleife i=0..10 000
galileo2609:= i+cos(dx)
end Schleife i

Das Unterprogramm cos(dx) wird 10 000 Mal unnoetig angesprungen und alle Anweisungen dort ausgefuehrt. Dabei ist dx aber in der Schleife konstant. Damit auch cos(dx). Die Berechnung ist somit 9999 Mal unnoetig.

Falsch :
******
#define C1 cos(dx)

start Schleife i=0..10 000
galileo2609:= i+C1
end Schleife i

Denn hier wird im Quelltext C1 durch cos(dx) ersetzt und man erhaelt den selben Code wie im ersten Beispiel.

Richtig
******
C1:=cos(dx)

start Schleife i=0..10 000
wert:= i+C1
end Schleife i

Der Variablen C1 wird einmal der Wert cos(dx) zugeordnet. Dazu einmal das Unterprogramm cos() vor der Schleife durchlaufen und nicht 10 000 mal in der Schleife. Darauf muss man auch in hoeheren Programmiersprachen achten gerade weil diese soundso sehr langsam sind.

ZUSATZBEMERKUNG
Der #define Befehl in einem C Header ist vor allem dazu gedacht Speicheradresse anschaulicher zu bezeichnen. Z.B. kannst du die eine Portadresse &ab20 im Header rein textlich umbenennen :
#define &ab20 AUDIOIN
Oder den Quelltext in badisch schreiben :-)

#define for MACH_DES_FOLGENDE_DO_MIT
#define from FANG_A_DU_SEGGEL_MIT
#define to UNN_HOER_UFF_BEI

Folgendes waere nun ein gueltiger MAPLE Befehl

MACH_DES_FOLGENDE_DO_MIT i FANG_A_DU_SEGGEL_MIT 1 UNN_HOER_UFF_BEI 10 do

Das wuerde tatsaechlich funktionieren.

/ZUSATZBEMERKUNG

Ge?ndert von richy (12.12.11 um 23:23 Uhr)
Mit Zitat antworten
  #18  
Alt 12.12.11, 22:16
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

Zitat:
... wenn man doch cos() und sin() verwendet um die (stauchenden und dehnenden) Konstanten c1 und c2 festzulegen, dann könnte man doch gleich jeden Winkel mit dieser C-Funktion berechnen lassen.

for(n=0;n<=360;n++)
{
. x[n]=sin[n]
. y[n]=n*(2*Pi()/360)
. plot x[n], y[n], "."
}
Ich hoffe deine Frage hat sich mit dem letzten Thread erledigt. Man springt hier 360 mal in die Sinusfunktion. Mit der Additiontheorem Variante springt man nur einmal vor der Schleife in die Sinusfunktion, denn sin(dx) oder cos(dx) sind Konstanten. Weil dx konstant ist. Und in der Schleife haben wir lediglich 4 Multiplikationen und 2 Additionen.

> for n from 0/1 to N do
> x[n+1]:=x[n]*c1-y[n]*c2; # x=Cosinus
> y[n+1]:=y[n]*c1+x[n]*c2; # y=Sinus
> od:

und dennoch bleibt unsere Grundgenauigkeit erhalten. Das ist ja gerade das schon etwas Verblueffende. Aus einem Funktionspaar (dx ,sin(dx)) kontruieren wir den kompletten Sinus mit 4 Multiplikationen voellig exakt. Oder bei deiner Taylorvorgabe in dieser Genauigkeit. Der Ausflug zur Effizenz ist somit nicht Off Topic sonder gerade einer der Hauptaspekte neben der reinen Freude an der Sache.
BTW :
Falls wir die Werte nicht speichern muessen waere der Algo noch effizienter. Auch die Schleife selbst koennte man in C weiter optimieren. Und der Code ist nun so einfach, dass man ihn auch in Maschinensprache einbinden koennte. Aber bleiben wir bei Exel/Maple.

Noch eine Frage :
Unter welcher Rubrik wolltest du die merman DZGL bei WIKI eintragen ?

Ge?ndert von richy (12.12.11 um 22:21 Uhr)
Mit Zitat antworten
  #19  
Alt 12.12.11, 23:01
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

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

Ge?ndert von richy (13.12.11 um 17:33 Uhr)
Mit Zitat antworten
  #20  
Alt 12.12.11, 23:25
Benutzerbild von mermanview
mermanview mermanview ist offline
Profi-Benutzer
 
Registriert seit: 05.09.2011
Beitr?ge: 271
Standard AW: Math Schwingungs DZGL

ok, habs verstanden,

nur einmal aufrufen (cos()) und dann nur noch simples Rechnen (lassen):
ist schnelles Rechnen plus Genauigkeit.

Dieser Tatsache könnte man den Vorrang geben, vor dem hehren Ziel alles unter völligem Ausschluss der implementierten cos()/ sin() Funktionen zu Nähern.

Meinen Beitrag bei Wikipeia findest du bei Wikipeia Sinus und Kosinus, nicht im Artikel, sondern unter "Diskussion":

http://de.wikipedia.org/wiki/Diskuss...us_und_Kosinus

Es ist der erste Beitrag, darin wurde viel verändert und auch gelöscht.
Jeder kann -auch ohne einen Zugang zu haben- unter "Diskussion" Beiträge posten, es wird schlimmstenfalls deine IP Adresse festgehalten.

Das schlimme ist, dass man auch gegenseitig in Artikel schreiben oder löschen kann, und gerade unter Wiki/sinus/Diskussion verweilt glaube ich so ein Schlimmfinger,
Da hat einer übel andererLeuts Beiträge zurechtgestrichen oder gelöscht, auch in meinem.
Ich hab mir mal die Profile angesehen, da viel mir auf, dass ein Teilnehmer tatsächlich mehrere "Anzeigen" deswegen hat, ich glaube es war RAINALD62.
Seit dem hab ich dort kein Handschlag mehr getan.

Du wirst sehen, LUTZL ist schon ein ernst zu nehmemder Mathematiker, er hat sich nach langem Hin und Her mal meine Näherung angesehen, mich dann darauf hingewiesen, dass es sich um das Additionstheorem handelt usw., insgesamt, klang aber alles etwas herablassend.

so, muss nun ins Bett, wünsche noch angenehmen Abend/ Nacht, mach nicht zu lang mit MAPLE bei einem Glas Edwards o.ä., f

falls du zwischendurch Kicks brauchst, kannst du wählen zwischen:
http://www.youtube.com/watch?v=wKXuhuEl8CE
(Lemmy Kilmister mit Dave Grohl)
oder
http://www.youtube.com/watch?v=47mbyjy0zDQ
(1,70 m (max), ohne Falsett)

Gruß Merman
Mit Zitat antworten
Antwort

Lesezeichen

Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beitr?ge zu antworten.
Es ist Ihnen nicht erlaubt, Anh?nge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beitr?ge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.

Gehe zu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 Uhr.


Powered by vBulletin® Version 3.8.8 (Deutsch)
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
ScienceUp - Dr. Günter Sturm