PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Math Schwingungs DZGL


richy
07.12.11, 21:41
Hi

Im Thread "Verhulst und Kunst" hat merman das Thema der iterativen Erzeugung einer harmonischen Schwingung angesprochen.
http://www.quanten.de/forum/showthread.php5?t=2078

In der Vergangenheit hat merman auf geometrischem Weg eine Itetationsgleichung hergeleitet, die interessante Eigenschaften aufweist. Insbesonders ist sie weitaus genauer als eine Integration 1 ter Ordnung eines entsprechenden Differentialgleichungssystems. (Euler Cromer Verfahren)
Der Ansatz von Merman entspricht in Teilen einer Anwendung der Additionstheoreme trigonoetrischer Funktionen. Ein Vergleich der Genauigkeit beder Verfahren auch hinsichtlich der Maschinenrechengenauigkeit waere interessant.
Ebenso ob sich hier klassische Fehlerbetrachtungsverfahren im Frequenzbereich z.B. mittels der La Placetransformation anwenden lassen.

ciao

richy
07.12.11, 21:51
Hi Merman
Gehen wir erstmal gemeinsam deine Iteration durch. Ich hatte diese schon nachprogrammiert, aber leider habe ich einiges wieder vergessen.

Du hattest geschrieben


r=Pi/180
x1= 1 - r^2/2

x(n+1) = x(n) * (1 - r^2/2) - Wurzel(1-x(n)^2) * Wurzel(r^2 - r^4/4)
y(n+1) = wurzel(1 - x(n+1)^2) -> Sinuswerte


Ok ich probiere das einfach nochmals in Maple aus ...

richy
07.12.11, 22:28
Klappt fast auf Anhieb
Der Maple Quellcode


> 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:


Im Grunde ist dieser selbsterklaerend. Eine Besonderheit ist vielleicht das Schlueselwort "od", dass in Maple das Ende der for...do Schleife kennzeichnet.
do .... od ( "do" in Spiegelschrift )
Maple ist eine Erweiterung von "C" und dort entspraeche dies der Block Klammerung.
Der Befehl evalf()= "wandle in float=Fliesskomma" zwingt Maple dazu die exakte symbolische (sehr aufwaengige) Berechnung durch eine schnellere Fliesskomrechnung zu ersetzen. Die Genauigkeit kann man einstellen.

Um deine Funktion auszudrucken muss man noch eine Maple spezifische Formatumwandlung durchfuehren. Zum Vergleich drucke ich dein Ergebnis sowie die exakte Sinusfunktion gemeinsam aus :

> druck1:=seq([i,y[i]],i=0..360):
> druck2:=seq([i,sin(i*2*Pi/360)],i=0..360):
> plot([[druck1],[druck2]]);


Das Ergebnis deiner Iteration sieht schonmal sehr gut aus :

http://home.arcor.de/richardon/2011/merman1.gif

richy
07.12.11, 22:43
Was sehen wir ?

Zu deinem Glueck recht wenig. Die beiden Funktionen ueberdecken sich bis n=180 (Grad) graphisch vollstaendig. Dann oszillert,duempelt deine Approximation (rot) um die Amplitude Null vor sich hin. Das ist aber ueberhaupt kein Beinbruch, denn mittels einer Fallunterscheidung des Wurzelvorzeichens liesse sich dies sicherlich beheben.

Warum zunaechst diese einfache graphische Darstellung ? Man sollte doch besser den absoluten oder relativen Fehler darstellen. So eine graphische Anschuung ist doch Amateurwerk. Nein ueberhaupt nicht. Denn eine Grafik ist in dieser Phase anschaulicher als viele Worte oder Zahlenwerte. Nehmen wir mal an deine Approximation waere von der Amplitude voellig exakt aber um vielleicht 3 Grad phasenverschoben. Die Darstellung des Amplitudenfehlers koennte diesen Sachverhalt nicht wiedergeben.

mermanview
07.12.11, 23:15
Was mich interessieren würde:

Die Genauigkeit hängt bei meiner iterativen Näherung vom Hilfsradius r ab.

Unter Excel habe ich deswegen einmal mit :

r = Pi/180 in 180 Iterationsschritten genähert, als auch mit:

r = Pi/1800 in 1800 Iterationsschritten genähert

Da es sich um Näherungen handelt, ist klar, dass sich Rundungsfehler akkumulieren sollten, insofern war es spannend, herauszufinden, ob sich die Genauigkeit auf diesem Weg vefeinern ließe.
1800 Iteretionsschritte beeinhalten 1800 kleinere Rundungsfehler, während 180 Schritte nur 180, dafür aber größere Rundungsfehler enthalten.

Ich meine mich zu erinnern, dass Ergebnis tatsächlich um eine "Kommastelle" genauer war. (Ich hab die Datei noch am Arbeitsplatz).

Hier nochmal die schönere Darstellung des Sachverhaltes:

Die Gleichsetzung der beiden Kreise ergibt die genäherte x-Koordinate für cos(1°):

Wurzel(1-x²) = Wurzel(r² - (1-x)²)

=> x = 1 - r²/2.

(r = Pi/180)


Alles weitere (die Iterationsformel) entstand beim drehen und konstruieren mit Vektoren, um weitere "1°-Dreiecke" übereinander zu legen.

Dass dabei ein Additionstheorem entstand, war nicht beabsichtigt, da ich den Begriff vorher garnicht kannte.

Da ich eine Gleichung wollte (y=f(x)), ist in meiner Formel alles mit x bzw. dem Konstruktionsradius r als Konstante dargestellt:



Hier das Additionstheorem, dahinter meine Formel für den Kosinus, (darunter der Sinus)

http://upload.wikimedia.org/wikipedia/de/math/e/b/a/eba229a7b6e61571ffe9d500c03bb778.png

großes Danke und Gruß Merman

richy
08.12.11, 00:00
Let`s engineer 1)

Von deiner Iteration habe ich bisher noch nichts verstanden. Am allerwenigsten deinen Ausdruck r=Pi/180.
Als Sprachbeamter wuerde ich hier zunaechst bemaengeln, dass man r mit einem Radius verwechseln koennte. Jedem Menschen steht es frei Variablen so zu benennen wie es ihm in den Kram passt, ganz besonders in der Mathematik. Denn dort herrscht diesbezueglich fast voellige Freiheit. (Man denke nur an das Buch Goedel Escher Bach)
Aber ich dachte anfangs du meinst mit r tatsaechlich einen Radius. Was in deiner geometrischen Anschuung durchaus gegeben sein koennte. Aber letzendlich hast du deine Iteration natuerlich algebraisch formuliert.
Und so hat dieses Variablen Sprachbeamtentum vielleicht doch in weitestem Sinne einen Sinn.Namen sind zwar Schall und Rauch aber nennen wir dein Kind "r" einfach mal ....
c0. Aehem. Nee, dann werden uns einige Physikforen massiv bedrohen :-)

Der Wert repraesentiert :

- einen Anfanswert
- einen Umrechnungsfaktor zwischen grad und rad
- eine Konstante in deiner DZGL

Bezeichnen wir den Wert einfach mal mit m0.

> m0:=Pi/180;
> x[1]:=1-m0^2/2;
>
> for n from 1 to 360 do
> x[n+1]:=evalf(x[n]*(1-m0^2/2)-sqrt(1-x[n]^2)*sqrt(m0^2-m0^4/4));
> y[n+1]:=sqrt(1-x[n+1]^2); # -> Sinuswerte
> od;


Was ist Schwachsinn ?
Sich 100 mal die selben Argumente von einfachen "RT Gegnern" und "RT Gegner"-Gegnern anzuhoeren und auszudiskutieren. Was berechnen Lopez, Karl, Kurt, gallileo, Herr Z. tausendmal stets auf Neue ? Das schmeissen wir aus der Schleife. Ein Ingenieur vermeidet solche unnoetigen Aktionen und erhoeht die Effizienz, indem er stets gleiche, konstante Ausdruecke vor solchen Schleifen implementiert. Was ist in deiner Schleife konstant ?

c1=(1-m0^2/2)
und
c2=sqrt(m0^2-m0^4/4))



> 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;


Der Code ist nun sehr viel effizienter und dazu sehr viel uebersichtlicher und strukturierter.
D'accord ?

Let`s engineer 2)
*************
Jawohl, der Herr Sinus ist weitaus bekannter als Herr Kosinus. Und fuer mich gehoert neben dem Satz des Pythagoras zum mathematischen Grundwissen dessen trigonometrische Variante :

Sin(x)^2 + Cos(x)^2 =1
*****************

Damit sieht man unmittelbar, dass du Herrn Sinus y(n) in einem weiteren fuer Ingenieure nicht zu rechtfertigenden numerischen Aufwand aus Herrn Kosinus x(n) berechnest. Wie gesagt. Ich kenne deine geometrischen Anschauungen noch nicht. Aber sicherlich haettest du diesen Aufwand vermeiden koennen, wenn du deine geometrischen Anschuungen von Vorerein an Herrn Sinus statt Herrn Kosinus orientiert haettest. Was man sicherlich noch aendern kann.

Let`s engineer 3)
*************
Ich meine intuitiv, dass das simultane Berechnen sowohl von Herrn Kosinus als auch Herrn Sinus letzendlich doch eine effizientere Methode darstellt.

Aber das wollen wir gerade in diesem Thread hier klaeren.

richy
08.12.11, 00:50
Hi merman

Was mich interessieren würde:
Die Genauigkeit hängt bei meiner iterativen Näherung vom Hilfsradius r ab.

Ja, sicherlich.
Algebraisch betrachtet ist dies auch dein Anfangswert. Und schau mal was denn fuer den Winkel alpha=0 gegeben ist wenn du deine Iteration startest.
Dein Wert fuer alpha =0 ist stets nicht exakt, ganz dumm ausgedrueckt "falsch", weil nunmal gilt sin(0)=0 oder cos(0)=1
Aber gerade weil du auf diesen logischen Genauigkeitsanpruch in den Anfangswerten verzichtest scheint deine Iteretation ein hervorragendes Ergebnis ueber alle weiteren Werte zu liefern. Du nimmst damit eine Art Phasenkorrektur vor, die den Phasenfehler der Integration 1 ter Ordnung anscheinend sehr gut kompensiert.
Warum weiss ich noch nicht. Das koennen wir gemeinsam ergruenden.

Unter Excel habe ich deswegen einmal mit :
r = Pi/180 in 180 Iterationsschritten genähert, als auch mit:
r = Pi/1800 in 1800 Iterationsschritten genähert

Da es sich um Näherungen handelt, ist klar, dass sich Rundungsfehler akkumulieren sollten, insofern war es spannend, herauszufinden, ob sich die Genauigkeit auf diesem Weg vefeinern ließe.

In der Regel ist es so. Je mehr Werte du heranziehst, umso genauer wird das Ergebnis.
Die Genauigkeit akkumuliert sich, nicht die Fehler. Auch nicht die Maschinenungenauigkeit demgegenueber. Wie koennen dein Beispiel auch ueber Maple symbolisch durchrechnen und damit unabhaengig von der Maschinengenauigkeit.
Ueberlege es dir einfach mal geometrisch. Du unterteilst den Kreis in immer mehr kleinere Segmente. Die Kruemmung wird damit zunehmend irrelevant.
Ich meine mich zu erinnern, dass Ergebnis tatsächlich um eine "Kommastelle" genauer war. (Ich hab die Datei noch am Arbeitsplatz).


Welche Berechnung war nun genauer ? Die mit 180 oder 1800 Werten ?
Doch sicherlich die mit 1800 Werten.
Viele Gruesse

richy
08.12.11, 05:34
die Internetpolizei ist in einem ander Forum gerade unterwegs. Ich hoffe ich finde weiter Zeit fuer das Thema.
EDIT
Das Edwards Beispiel (fuer Mathe habe ich rausgenommen), weil es vielleicht doch nicht das beste Beispiel fuer Mathe und Musik ist. Der Trick ist zu versteckt.

mermanview
08.12.11, 16:55
Moin richy,

werde mir Bernhard Edwards zu Hause anhören (selber der Gitarre und dem Bass zugetan, neben Percussion, bin gespannt).

Zum Thema:

Wahrscheinlich wiederhole ich mich, aber du schriebst:

„Von deiner Iteration habe ich bisher noch nichts verstanden.
Am allerwenigsten deinen Ausdruck r=Pi/180.
Als Sprachbeamter wuerde ich hier zunaechst bemaengeln, dass man r mit einem Radius verwechseln könnte.“


Kurze Antworten:

r ist tatsächlich ein Radius, ein Dreieck aus zwei Schenkeln = 1 cm und einem Schenkel der Länge Pi/180 hat einen genäherten Winkel von einem Grad.

Um eine passende x Koordinate zu bestimmen, nehme ich Pi/180 als Radius für einen Kreis mit Mittelpunkt (1|0) und berechne den gemeinsamen Schnittpunkt mit dem Einheitskreis r=1cm um (0|0), daraus entsteht:

x1 = 1 – r^2/2

um die y Koordinate zu erhalten setze ich 1-r^2/2 ein in

y1 = wurzel(1-x1^2) => y1 = wurzel(r^2-r^4/4)

Das 1°-Dreieck lässt sich sowohl bildlich als auch per Vektorenstapelung und -Drehung übereinander legen, um Höhen und „Längen“ größerer Winkel zu iterieren.

Dabei entstand :

x(n+1) = x(n) * (1-r^2/2) - wurzel(1 – x(n)^2) * wurzel(r^2 – r^4/4)

übersichtlicher ist natürlich:

x(n+1) = x(n) * x1 – y(n) * y1 (Additionstheorem).

Nächste Antwort:
Natürlich erwartete ich für r = Pi/1800 genauere Ergebnisse,
meine Zweifel entstanden erst nach herablassenden Zurechtweisungen von Wiki- Mathematikern:

Zitat von Lutzl, zu meiner Herleitung (Wiki-Mathematiker):
„Je genauer dieses Vorgehen wird, desto mehr Rechenschritte und desto mehr Rundungsfehler akkumulieren sich. Deshalb ist Halbieren und Quadrieren besser, aber ebenfalls zu langsam.“

Zu deinem letzten Beitrag:
OK besorg’s denen, aber richtig, (Internetpolizei? Ich vermute du bist noch in anderen Foren unterwegs)

Falls es hilft, sag mir wann soll ich wo sein, ich mach'se weg,
(ich hoffe du meinst nicht GEZ Schergen o.ä.)

PS:
Mein Verschwinden bei DZGL hatte u.a. allgemeine Hysterie am Arbeitsplatz als Ursache, Insolvenzgerede, Hass, gehetzte Knechte des Arbeitsweltwahnsinns, verschachtelte heimlich-Metzeleien zwischen Kollegen, ich halt mich da im Allgemeinen raus, dazu kam noch knappe Zeit wg. Erstzertifizierung usw., ein wahres Panoptikum menschlicher Abgründe.

Halt die Ohren oben,

Gruß Merman

richy
11.12.11, 20:19
Hi Merman

Zitat von Lutzl, zu meiner Herleitung (Wiki-Mathematiker):
„Je genauer dieses Vorgehen wird, desto mehr Rechenschritte und desto mehr Rundungsfehler akkumulieren sich. Deshalb ist Halbieren und Quadrieren besser, aber ebenfalls zu langsam.“
Seltsamer Mathematiker. Pauschal gesehen stimmt diese Aussage ueberhaupt nicht.

Wie waere es, wenn wir einfach mal die Iteration herleiten, die sich aus dem Additionstheorem ergibt und dann vergleichen ?

Deine Approximation lautet :

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;

Das Additionstheorem
****************
http://upload.wikimedia.org/wikipedia/de/math/f/c/3/fc3b266ea031def32c9f13d0f08c9853.png

http://upload.wikimedia.org/wikipedia/de/math/2/d/4/2d4ada696dc1fb1f302309618c6cf5fa.png

Du berechnest den Kosinus und dies entspricht der ersten Gleichung :
1) cos(x+y)=cos(x)*cos(y)-sin(y)*sin(x)
(Mittels der zweiten Gleichung haettest du dir die Umrechnung nach Sinus sparen koennen)

Setzten wir einfach mal in der Gleichung fuer x ein festes x0 und fuer y eine Abweichung dx davon :

cos(x0+dx)=cos(x0)*cos(dx)-sin(dx)*sin(x0)
Diese Gleichung ist exakt, aber nuetzt uns zunaechst wenig, da wir uns auf diese Weise nicht der trigonometrischen Funktionen entledigen. Zunaechst bringen wir sin(x0) auf eine Form cos(x0). Es gilt :
sin(x0)^2+cos(x0)^2=1 => sin(x0)=Wurzel(1-cos(x0)^2)
=>
A)
cos(x0+dx)=cos(dx)*cos(x0)-sin(dx)*Wurzel(1-cos(x0)^2)
************************************************** ******
(Diskussion der Gleichung im naechsten Beitrag)

Wie wuerde man ueber eine differentielle Methode vorgehen ?

Einschub (kannst du ueberspringen)
Die Ausgangsgleichung waere :
dcos(x)/dx=-sin(x)=-Wurzel(1-cos(x)^2)
Das Differential ersetzt man durch eine Differenz. Deine Loesung ist formal 1.Ordnung, somit waere es einfach der Differenzenquotient :
[cos(x+k*dx)-cos(x)]/dx=-Wurzel(1-cos(x)^2)
Und folgender Schritt entspraeche einer numerischen Integration 1.Ordnung:
cos(x+k*dx)=cos(x)-Wurzel(1-cos(x)^2)*dx
/Einschub

Die Differenzengleichung wuerde lauten :

B) y(k+1)=C1*y(k)-C2*Wurzel(1-y(k)^2)
C1=1
C2=dy=2*Pi/N_abtast=m0 im Beispiel Pi/180

Die Gleichung B) lautet diskretisiert :
A) y(k+1)=C1*y(k)-C2*Wurzel(1-y(k)^2)
C1=cos(dx)
C2=sin(dx)
(Btw : Die Form hatte ich vor 20 Jahren zweidmensional implementiert nicht Euler Cromer)

Und deine Iteration lautet :
c) y(k+1)=C1*y(k)-C2*Wurzel(1-y(k)^2);
C1=1-m0^2/2;
C2=Wurzel(m0^2-m0^4/4);

(Ich habe hier y(k) gewaehlt um die Variable vom x der Ausgangsgkeichung zu unterscheiden)

Letzendlich sind alle Gleichungen formal erster Ordnung (nicht bezueglich der Fehlerordnung) und unterscheiden sich durch die "Integrationsmethode".

Die Additionstheorem Methode ist sogar exakt !

Ich meine dein Verfahren wird sich letztendlich als ein Praediktor Korrektor Verfahren erweisen. Von Heun zum Beispiel :
http://www.tm-aktuell.de/PDF/AWPTeil1.pdf

EDIT :
Deine Methode fuehrt eine Taylorapproximation der exakten Konstanten der Additionstheoreme durch. (siehe naechster Beitrag)
Heun koennte dennoch aehnliche Ergebnisse liefern.

richy
11.12.11, 23:27
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.

http://home.arcor.de/richardon/2011/mer_fehler.gif
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

mermanview
12.12.11, 17:29
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,
> 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:
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°:
m0:=evalf(2*Pi/360);
Du setzt programiertechnisch bloß per Zuweisung cos(0) auf 1:
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

richy
12.12.11, 18:09
Hi merman
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.
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.

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.

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.
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.

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 :D

(Koennte in Holland sogar hinkommen)
Gruesse

richy
12.12.11, 18:54
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 :

> 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

mermanview
12.12.11, 19:11
Hallo nochmal,

kurz vor Feierabend:

In Headerdateien wird auf jede Menge Quelltext verwiesen, insofern auch auf Funktionen.
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

mermanview
12.12.11, 20:37
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

richy
12.12.11, 20:53
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.

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/kurse/c_c++/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. :D
/ZUSATZBEMERKUNG

richy
12.12.11, 22:16
... 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 ?

richy
12.12.11, 23:01
Die effizeinte merman DZGL :
*********************

Betrachten wir nochmals deinen Ausgangscode :

> 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.


> 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 :D


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


http://home.arcor.de/richardon/2011/merman_elegant.gif

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) :

http://home.arcor.de/richardon/2011/merman1.gif

Viele Gruesse

mermanview
12.12.11, 23:25
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/Diskussion:Sinus_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

richy
13.12.11, 00:29
werde mir Bernhard Edwards zu Hause anhören (selber der Gitarre und dem Bass zugetan, neben Percussion, bin gespannt).
Ich programmiere und spiele Keyboards sowie Drums und Percussion. Keys profesionell, bin Profi Musiker. Dazu etwas E Bass und Gitarre.
Naja, Chic ist schon etwas angestaubt und natuerlich sehen die Maedels nicht mehr so aus wie damals. Ich weiss gar nicht mehr in welche von denen ich in den 80 ern am meisten verknallt war :-)
http://www.youtube.com/watch?v=3APd0sPqR7U&feature=related
Der Song enthaelt ein mathematisches Raetsel. Das hat sich Edwards ausgedacht. In der Live Version wird es offensichtlich weil die Maedels den Taenzer einzaehlen und man so erkennt wie sie ueberhaupt den Song zaehlen.
Viele Gruesse

richy
13.12.11, 01:01
Der Basriff im Intro des Videos und bei 3:00 ist sehr gut.
http://www.youtube.com/watch?v=_wlJr6eCc-w

mermanview
15.12.11, 06:58
'n Morgen richy,

ausnahmsweise bin ich mal vor den kleinen Rackern wach,

Großen Dank nochmal für die optimierte Merman DZGL !

Habe mir Edwards und Chic, sein Matherätsel und den Bassriff angesehen.

Der Mann ist gut und hat auch noch Spass dabei, die Schnelligkeit krieg ich an meinem Bass bei der Vielfalt nicht hin, was aber nicht nur an meiner Fingerfertigkeit/ musikalischem Verständnis liegt:
meine E Bassguitarre ist ziemlich mau, was Saitenlage und Tonabnahme angeht.

Hier mal ein kleiner Rythmus aus Afrika:

|||_|||_|||_|||_|||_|||_|||_|||_ ....

Betrachte die senkrechten Striche als Claves und die Wagerechten als Pausen, allesamt von gleicher Länge.
Lass den Beat vor deutschem Publikum laufen, bis alle Fragezeichen auf der Stirn haben,
dann packst du einen satten drei/viertel Takt drunter, damit die Fragezeichen einem relaxt euphorischem Aha-Effekt weichen:

In Afrika wäre es z.B. der Afro Blue:

O_OO''O_OO'_

die großen O sind warm klingende Bassklänge, die _ sind wieder Pausen und die ' sind sandig klingenede Takte (bei Handtrommeln berührt man mit den Fingerkuppen die Fläche, und dämpft dabei den eigentlichen Klang).

Taktlängen:
theoretisch alle gleich, klingt aber Sch..., praktisch klingen natürlich die O vor den _ etwas in die Pause hinein, sind also etwas gezogene, tragende Töne.

Gehört zwar nicht ganz zum Thema, aber falls sich einer beschwert, verknüpfen wir Beats mit Schwingungen,,

Grüsse Merman

mermanview
15.12.11, 13:53
---*räusper* ---

Marco Polo
15.12.11, 20:08
Ich programmiere und spiele Keyboards sowie Drums und Percussion. Keys profesionell, bin Profi Musiker. Dazu etwas E Bass und Gitarre.

Das wusste ich bereits. :)

Was ich aber noch nicht wusste, steht in der neuen Bild der Wissenschaft:

Musiker hören im Alter besser. Musizieren trainiert das Gehirn und verbessert die Feinmotorik erheblich. Ausserdem schärft Musik das räumlich-visuelle Gedächtnis.
Das Spielen eines Instrumentes trainiert die zentrale auditive Verarbeitung des Gehirns wodurch sich das Gehör im Alter langsamer verschlechtere.

Allerdings bezog sich das eher auf das Cocktailparty-Phänomen: Trotz lauter Hintergrundgeräusche Gesprochenes zu verstehen.

Aber immerhin, oder? :)

Grüsse, Marco Polo

richy
15.12.11, 21:33
Hi Marco
Musiker hören im Alter besser. Ho ho. Vielleicht weil der Metal Musiker schon mit 25 schon einen Gehoerschaden hat und es dann nur noch besser werden kann :D Wobei man sich taeuscht. Die Musiker mit den meisten Hoeschaeden sind die Orchestermusiker. Kann ich mir gut vorstellen. Die sitzen im Orchestergraben und von links kriegen sie die mittigen Geblaese reingehauen. Dazu geben dann die Geigen mit hohe Gezirpel von rechts den Rest. Und Ohrstoepsel geht wohl nicht.
Allerdings bezog sich das eher auf das Cocktailparty-Phänomen: Trotz lauter Hintergrundgeräusche Gesprochenes zu verstehen.
Das ist plausibel. Das "Hoeren" spielt sich zum groessten Teil im Gehirn ab, nicht in den Ohren. Es sind vorwiegend Mustererkennungsprozesse. Dazu gibt es ein interessantes Video im Netz. Und der normale Alters-Hoerverlust liegt in den hohen Frequenzen, deren Wichtigkeit man etwas ueberschatzt. Nehmen wir an ein Jugendlicher hoert bis 14 khZ, dann klingen 7-8 kHz als obere Grenze schon gewaltig. Es ist aber nur eine Oktav. Und das Wesentliche spielt sich im empfindlichsten Bereich von 1 kHz bis 4 Khz ab. Fehlen hier auch etwas ( C Senke) wird es natuerlich eng :D
Und ich meine man kann das differenzierte Hoeren auch uebertrainieren. Mir ist es schon passiert dass ich tagelang z.B. an einem Klaviersound rumgeschraubt habe und diesen im A-B Vergleich mit einer Vorlage als recht gut empfand. Man beurteilt dabei immer mehr jeden Oberton. Aber nachdem ich in einen Monat spaeter wieder angehoert habe fand ich das Ergebnis grauenhaft. Das war es wohl auch :)
Ein Analyzer hilft hier auch nicht weiter. Ziemlich verrueckte Angelegenheit.
Ich dokumentiere das meist indem ich alle Sounds abspeichere. So nach Version 20 gehts wieder bergab. Es geht auch umgekehrt. Seit einigen Monaten spiele ich mit einem Mellotron (EMULATOR) Anfangs dachte ich es waere der letzte Schrott. Und dann gefaellt es einem immer besser.
Gruesse

richy
15.12.11, 22:33
Hi merman
Ob man bei der Chic Nummer seine Altershoerfaehigkeit testen kann denke ich eher nicht :-) Man muss nur einzeln differnzieren koennen was die Gitarre spielt der Bass die Keys und der Gesang. Die Drums sind nicht wichtig. Und bis 4 sollte man zaehlen koennen :-)
Der Refrain ist ganz normal von der Takteinteilung. Bei der Strophe dagegen wird das Akkordschema um zwei Viertel verschoben. Dazu spielen Bass und Gitarre so als ob nun auf der Drei die Eins liegt, was aber gar nicht der Fall ist. Ich denke jeder faellt drauf rein. Nur der Gesang orientiert sich an der Eins und ist daher scheinbar um zwei Viertel verschoben. Im Grunde ein einfaches Schema :

Strophe : 12 1234 12 .... 12 1234 123456
Refrain : 1234 1234 ...
Die fette 1 waere in einem normalen 4/4 die 3. Anders ausgedrueckt. Man denkt der erste Akkord ueber zwei Viertel waere ein Auftakt und alle Instrumente bemuehen sich den Bluff genau so zu verkaufen. Sogar der Drummer betont die Drei mit dem Becken und Edwards spielt hier einen typischen Riff fuer eine Eins. Dumm dumm duuuuu. Die Eins der Strophe findet man am einfachsten ueber die Gitarre. Die spielt auf dem hoechten Ton ihres Riffs eine Muehle. Diddl duddl diddl duddl. Und das erste Diddl ist die Eins :-)

Bei dem Basssolo von Clap your Hands ist es ein aehnliches Schema, aber etwas komplizierter. An einer Stelle des Riffs dreht er die Muehle um. Aber frag mich nicht genau an welcher Stelle :-)
Dumm du du daddel diddl
Dumm du du daddel diddl
Dumm du du diddl daddel diddl daddel diddl daddel ?

Es gibt unzaehlige Youtube Videos. (Meist bleib es bei denen beim Versuch)
(BTW: Diana Ross erfolgreichste Platte ist auch von chic komponiert, produziert)

Ok, wenn die Goetter heute rufen (Dream Theater) ist das nochmals eine ganz andere Liga :
http://www.drummerworld.com/Videos/marcominnemanndream.html
Wobei ich denke, dass Minnemann umgekehrt DT unloesbare Aufgaben haette stellen koennen. Ich habe ihn mal bei einem Drumnworkshop erlebt. Er kann vier Rhytmen gleichzeitig einfrieren. Dazu zu jedem Klangschnipsel spielen indem er es wohl durchrastert. Unglaublich. Genauso wie Mike Portnoy selbst.
Das Thomas Lang Video ist auch interessant. Einmal kommt er ganz schoen ins Schwitzen.
Bei mir ruckeln die Videos. Hier ist eine ruckelfreie youtube Aufnahme von Peter Wildoer bei der DT Audition :
http://www.youtube.com/watch?v=CJw-8kXBRjI
Nicht mein Lieblingsdrummer, aber alleine die Gedaechtnisleistung kapier ich schon nicht.

Gruesse

mermanview
16.12.11, 11:24
hm,

jetzt steh ich hier mit meinem popeligen AfroBlue,

.... kommt der mir mit Minnemann und Co....

Antworte ich jetzt mit dem "Doundoumba" mit rythmischem Versatz nach vier¹/² Takten,
oder mach ich lieber mit Sinus weiter ?

Wie sind eigentlich die Regeln, um eine Funktionsgleichung für ein Koordinatensystem mit drei Achsen zu schreiben?

Sagen wir x, y, und z.
Heißt es dann für y z.B.:

f(x) = x + z oder

f(x, z) =x+z

und muss z dabei ebenso von x abgeleitet werden, damit die Gleichung "geschlossen" ist"

Du ahnst, worauf ich hinaus will, ich kann nicht davon ablassen die Sinuskurve weiterhin mit herkömmlichen Mitteln zu untersuchen, um eine f(wasauchimmer) zu finden, welche die Sinuskurve als Funktionsgraph erzeugt.


Da ich diese Gleichung nicht am PC brauche, will ich Schnelligkeit und Wurzelverzicht zunächst vernachlässigen.

ZwinkerZwinkerZwinker...Wo kämen wir da hin, wenn man immer beachtete, dass ein Quadrat sowohl positive als auch negative Ausgangswerte haben kann, schon bei der kleinen SRT Formel t(v)/t(0)=wurzel(1-(v/c)²), oder bei e=mc²... ZwinkerZwinkerZwinker...

später weiter,

r.u.

Merman

richy
16.12.11, 18:27
Hi merman
jetzt steh ich hier mit meinem popeligen AfroBlue,
Ich kann mir vorstellen, dass mir der besser gefaellt als manches DT geklopfe :-)
Antworte ich jetzt mit dem "Doundoumba" mit rythmischem Versatz nach vier¹/² Takten, oder mach ich lieber mit Sinus weiter ?

Ich finde beides interessant. DT empfinde ich uebrigends eher als Zahlenfolgen. Groove hat ja keiner der Songs. BTW : Wie hattest du das hier mit den 3/4 gemeint ?
So ?
xxx_xxx_xxx_
_xx_xx_xx_xx
Nach dem Doundoumba muss ich mal googeln. Ist der aus Afrika ?

Heißt es dann für y z.B.:

f(x) = x + z oder

f(x, z) =x+z

Ich wuerde hier schreiben f(x,y)=x+y. Oder z=f(x,y)=x+y. Z.b. als eine Funktion ueber der komplexen Ebene.

um eine f(wasauchimmer) zu finden, welche die Sinuskurve als Funktionsgraph erzeugt.
Im Grunde haben wir das doch bereits gefunden. Und der Cordic Algorithmus scheint die uebliche verwandte Vorgehensweise zu sein. Dort wird noch etwas mehr getrickst um Multipikationenn zu umgehen.

Da ich diese Gleichung nicht am PC brauche, will ich Schnelligkeit und Wurzelverzicht zunächst vernachlässigen.

Ok, Schnelligkeit muss nicht sein. Aber ueber die zweidimensionale Implementation ist die Iteration nicht auf 0..180 Grad beschraenkt. Das halte ich fuer einen grossen Vorteil. Was mich noch stoert ist, dass auch deine elegante Version den Startindex eins aufweist. Und der erste Wert nicht f(0) ist. Das kann man andern, aber dann wird die Iteration etwas ungenauer. Warum ist mir noch nicht so ganz klar. Ich wuerde dannn gerne mal untersuchen wie sich verschiedene Polynom (Taylor) Approximationen konkret auswirken. und ob man das Prinzip nicht in irgendeiner Form noch fuer andere Zwecke anwenden kann. Die Eigenschaft dass hier der Konvergenzradius mittransformiert wird scheint mir interessant.
Wo kämen wir da hin, wenn man immer beachtete, dass ein Quadrat sowohl positive als auch negative Ausgangswerte haben kann,
Hmm wir kaemen wohl nirgends hin, weil es dann gar keine Realitaet und keinen zeitlichen Ablauf gaebe :-)
Gruesse

richy
16.12.11, 18:40
Vielleicht noch etwas zu deinem Vorhaben und Taylorreihen, die deine graphische Methode enthaelt. Viele vergessen, dass grosse Teile der Anwendungsmathematik auf der Methode der kleinsten Quadrate von Gaussbasieren. Auch die Taylorreihe, alle Integraltransformationen.Dabei wird dann uebersehen, dass die Gauss Methode weitaus flexibler ist wie die bekannten davon abgeleiteten Methoden. Die Tylorreihe ist z.B. eine sehr schlechte Naeherung fuer die Sinusfunktion. Mittels Gauss laesst sich hier weitaus mehr erreichen. vor ein paar Jahren habe ich das mal auf meiner HP festgehalten :
http://home.arcor.de/richardon/richy2001/mathe/gauss/sinus0.htm
"Gauss Fehlerintegral" ist uebrigends die falsche Bezeichnung, sollte ich mal aendern.
Die Methode ist im Grunde recht einfach :
http://home.arcor.de/richardon/richy2001/mathe/gauss/gindex.htm
Wenn man das mit dem Additionstheorem verbindet koennte das etwas in der Art einer Phaenmodulationsintegraltransformation ergeben.

Noch eine Bemerkung :
Bei Cordiac wird eine Konstante abgespeichert. Das entspricht unserem r=dx. Dessen Vorteil ist lediglich das Ersetzen der Multiplikation durch einen Shift.Wenn wir z.B cos(dx)=0.2 waehlen koennten wir auch shiften. Aber wir benoetigen halt noch sin(dx)

richy
16.12.11, 19:37
Das Problem mit dem Index habe ich geloest. Fuer den Startindex 0 waehlt man einfach x(0)=1 und y(0)=0
Rein numerisch sieht es uebrigends so aus, dass das Verfahren fuer einen Dauerbetrieb bezueglich der Phase nicht so ganz stabil ist. Die Amplitude schon.
Und du kannst deinen Algorithmus nochmals um den Faktor 10-100 genauer gestalten !
Indem du fuer C2 auch direkt eine Taylorreihe verwendest :

Statt
c1:=1-m0^2/2;
c2:=sqrt(m0^2-m0^4/4);

besser
c2:= m0-m0^3/6;
(6=3!)

So gefaellt mir das :-)
Code :

N:=30; # Anzahl Abtastwerte
P:=10; # Anzahl Perioden
M:=P*N;
m0:=evalf(2*Pi/N);
c1:=1-m0^2/2;
c2:= m0-m0^3/6;
x[0]:=1;
y[0]:=0;

for n from 0 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,y[i]-sin(i*2*Pi/N)],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]]);

mermanview
16.12.11, 20:37
Hi Män, there you are again,

ei froi mi

uff, jetzt aber:

Zitat:
um eine f(wasauchimmer) zu finden, welche die Sinuskurve als Funktionsgraph erzeugt.
Im Grunde haben wir das doch bereits gefunden.

hm, eine Sache verstehe ich nicht:

dein Quellcode erzeugt zweifelsfrei eine Sinuskurve, und er verwendet tatsächlich nicht mal für den Startwert eine implementierte sin()/ cos().
(Man hat dabei zwar die von mir eingebrachte Ungenauigkeit, durch Gleichsetzung von Sekanten- und Kreisbogenabschnitt zwecks Näherung, aber dies sei vorerst vernachlässigt).

Aber einen Sinuskurvengraph per Quellcode zu erzeugen ist doch nicht das gleiche wie einen Funktionsgraph per Funktionsgleichung zu erzeugen.


Bei der Funktionsgleichung soll sich in diesem Fall y -die verdammte gesuchte Höhe- aus x (und evtl. z) ergeben.

Verwirrend ist dabei (auch evtl. für Mitlesende), dass bisher zur Berechnung von cos/sin sowohl x(n) als auch y(n) iterativ genähert wurden, das dabei verwendete x hat aber nichts mit der x Achse eines Koordinatensystems zutun, in welchem die Sinuskurve abgebioldet ist.
In deinem all müsste sie i- Achse heißen:
# DRUCKROUTINEN
druck1:=seq([i,y[i]],i=1..M):
druck2:=seq([i,y[i]-sin(i*2*Pi/N)],i=1..M):
#druck3:=seq([i,x[i]],i=1..M):
#druck4:=seq([i,cos(i*2*Pi/360)],i=1..M):


Da mir auffiel, dass eine Helix (Schraubenlinie) auf einer Mantelfläche eines Zylinders, der Länge 2Pi bei Durchmesser 2 cm in Seitenansicht genau die Sinuskurve ergibt (quasi als Schatten), gedenke ich zunächst eine Funktionsgleichung für drei Achsen,
x, y, z zu schreiben.

Wobei y=wurzel(1-z²)
und z=x*1/Pi
und x = 0 -> Pi

EDIT: diese Vorgehensweise erzeugt eine dämliche Ellipse mit r1=1 und r2=Pi, kompletter Blödsinn

das wären dann mal wieder nur Werte für 1° - 90°, aber mir persönlich würde dass vorerst reichen (alle weiteren Werte leißen sich daraus ableiten).

Moment muss später weiterschreiben, die Damen fangen am liebsten mitten in Herrngesprächen an sich zu räkeln, ...verdammt ;-)

PS: google nicht nach doundoumba, das ist u.a. einer der vielen Namen für eine afrikanische Trommelform + ein Begleitbeat, den Afrobeat haste richtig interpretiert:

3/4 Takt

sieht wg. Formatierung übel aus, die senkrechten Trennbalken sind keine Rythmusklänge, sonder sollen zuordnen, sorry
1|2|3|4|5|6|7|8|9|10|11|12
x|x|x|_|x|x|x|_|x|x|x|_ Stickbeat, welcher ohne Rest verwirrt
O|_|O|O|'|'|O|_|O|O|'|_ Afroblue: Grundbeat, welcher Klarheit bringt
O|V|O|O|V|_|O|V|O|O|V|_ Doundoumba, treibender Begleitbeat

bis später, ich hoffe du hast noch Luft für d. Sinus

Gruß Merman

richy
16.12.11, 22:31
dein Quellcode erzeugt zweifelsfrei eine Sinuskurve, und er verwendet tatsächlich nicht mal für den Startwert eine implementierte sin()/ cos().
Dein Quellcode erzeugt doch auch fast perfekt Sinus und Kosinus :-) Ich habe an deinem Code im Grunde kaum etwas geaendert, sondern versucht ihn mal etwas von deiner graphischen Anschuung zu loesen und zu verallgemeinern. Ueber die Algebra. Die Steigerung der Effizienz war u.A. nur ein Hilfmittel dazu um den Code uebersichtlicher zu gestalten.

Dazu gehoerte :

1) Vorziehen konstanter Ausdruecke vor die Schleife. (Anti galileo0815)
Damit sieht man auch sofort was denn nun Konstanten sind.

2) Ersetzen der Wurzelfunktion durch Uebergang zu einem Differenzengleichungssystem. D.h. simultanes Berechnen von cos(x) und sin(x). Hierzu ist es vorteilhaft folgende Identitaet im Kopf zu haben und in verschiedenen Varianten zu erkennen :

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

=>
sin(x)=Wurzel(1-cos(x)^2)
Das koennte man die trigonometrischen Identitaet des Pythagoras nennen und diese ist in deiner Ausgangsiteration an vielen Stellen gegeben und so lassen sich diese Ausdruecke vereinfachen und das DZGL System erstellen.

Vergleich zu Additionstheoremen :
*************************
3)
Zum Vergleich habe ich die Iteration mit der selben Zielsetzung aus den Additionstheoremen hergeleitet und auf eine vergleichbare Form gebracht.
Dazu gehoerte es auch beim Index Null statt Eins zu beginnen.
Und aufgrund der vergleichbaren Formen sieht man nun, dass sich deine Iteration nur innerhalb der zwei Konstanten C1,C2 von der exakten Form unterscheidet.
Wobei nochmals zu bemerken ist, dass die Iteration ueber die Additionstheoreme mit C1=cos(dx), C2=sin(dx) voellig exakt ist. Deine Iteration ist bis auf diese beiden Konstanten formal voellig identisch. Also kann sie nur eine Naeherung sein. Du naeherst die Konstanten C1,C2 durch eine sehr einfache Taylorrreihe an, die du aus einer graphischen Anschuung entnommen hat. Diese Naeherung ist lediglich 2 ter Fehlerordung. Also sehr schwach. Jeder Taschenrechner von ALDI wird fuer dein cos(r=dx=m0 ) eine bessere Approximation der Form cos(dx) oder sin(dx) liefern.
Zwei moeglichst exakte Zahlenwerte genuegen ! Zwei konstante Zahlenwerte !
Aproximationen deiner Art muessen aber keinen kompletten Beinbruch darstellen, sondern koennen zu neuen Einsichten fuehren. Wie sieht deine Naeherung konkret aus ? Das erkennt man sehr schnell anhand der Taylorreihen.

cos(x)= 1-x^2/2!+x^4/4!-x^6/6! ....
sin(x)=x-x^3/3!+x^5/5!-x^7/7! .....

Exakt:
c1=cos(dx)
Merman :
c1:=1-m0^2/2!
Ok merman verwendet hier eine Taylor (Potenz) Reihe zweiter Fehlerordung.

Und C2 ?
c1=sin(dx)
c2:=sqrt(m0^2-m0^4/4);
*Schulterzuck.
Das ist eine Merman (ich meine unguenstige) Approximation von sin(x).

http://home.arcor.de/richardon/2011/mer_apro.gif

Es ist eine interessante und keinsfalls schlechte Approximation. In der Praxis fuer kleine Winkel (die relevant sind) leider ungenauer als eine Taylor Approximation. Letzendlich nun doch eine eher schlechte Approximation. Selbst mit Taylor o(x^4) fuer C2 erhaelt man ein besseres Ergebnis. Und nochmals : Die Version mit den Konstanten C1=cos(dx) und C2=sin(dx) ist voellig exakt. Es genuegen mir 2 exakte Funktionspaare deren konstante Wert ich auch einfach speichern kann um daraus die Sin,Cos Funktion exakt zu rekonstruieren.
Gruesse

richy
16.12.11, 23:14
hm, eine Sache verstehe ich nicht:

dein Quellcode erzeugt zweifelsfrei eine Sinuskurve, und er verwendet tatsächlich nicht mal für den Startwert eine implementierte sin()/ cos().
Um dich zu beruhigen.Ich verstehe es auch noch nicht so ganz. Obwohl ich meist nicht um Analogien und moeglichst anschauliche Beispiele verlegen bin.
Dein C2 ist wohl vor allem recht daneben.
EDIT
Nein, C2 ist gar nicht so kritisch.

Zum Startwert :
************
sin(0)=0 und cos(0)=1. Ok das kennzeichnet noch keine harmonische Funktion, ausser wir betrachten ein diskretisiertes System und das Nyquest Kriterium. Aber lassen wir so etwas mal weg. Betrachten wir alles pseudo kontinuierlich. Dann haben wir drei Informatorische Elemente fuer unser System :

1) Die Anfangswerte

Zum System :
**********
2) Die Konstanten C1( r=m0=dx)
3) Die Additionstheoreme

Die Information steckt vornehmlich in den Konstanten C1,C2.Aber nur in Verbindung mit dem Additionstheorem. Ja es ist irgendwe verblueffend.
Bei der Expo Funktion waere es einfacher zu verstehen. Deren Kennzeichen
ist die Aequivalenz (Proportionalitaet) der Steigung / Ableitung zum Funktionswert :
df(x)/dx=(p)*f(x)
Auch hier genuegt dann ein Funktionswertepaar um die komplette Funktion zu rekonstruieren. Und auch hier existiert ein noch einfacheres Additionstheorem. Beim Sinus und Kosinus wird es alleine daher etwas schwieriger da der Zusammenhang ueber eine DGL 2 ten Grades gegeben ist :
d^2f(x)/dx^2=f(x)
Dieser zweite Grad laest sich auf einen ersten Grad zurueckfuehren indem man statt einer Gleichung ein Gleichungssystem betrachtet.

Da mir auffiel, dass eine Helix (Schraubenlinie) auf einer Mantelfläche eines Zylinders, der Länge 2Pi bei Durchmesser 2 cm in Seitenansicht genau die Sinuskurve ergibt (quasi als Schatten), gedenke ich zunächst eine Funktionsgleichung für drei Achsen,
x, y, z zu schreiben.

Das ist mir der eleganten Merman DZGL doch schon laengst erledigt. Und schau mal wie einfach es war. Eine dimensionale Erweiterung fuehr meist zu einem einfacheren Ergebnis. So ist es auch in der Quantenmechanik.

richy
17.12.11, 00:09
Noch ein kurzer Gedanke zur Musik.
Ich besuche neben kostenguenstigen Workshops nur ganz wenige musikalische Events in einem Jahr. Ein Highlight 2011 war fuer mich in einem Club in Karlsruhe Raul Midon :
Trompetensolo nicht verpassen !!! :-)
http://www.youtube.com/watch?v=zzaClXAt3aY
zusammen mit Richard Bona Und das fuer 25 EUR :-)
http://www.youtube.com/watch?v=3BfEUDGsYW4
Das war echt geil :-)

mermanview
17.12.11, 08:16
Hm,

???

du vergleichst in deinem letzten Diagramm meine Konstante für y1: c2=wurzel(x²-(x⁴/4)) (als auch deine c2=x-x³/6) mit der gesamten Sinusfunktion ?,
wo doch beide nur ein Teil des algebr.Sinus sind, dabei müssen starke Abweichungen entstehen.

Um Doppeldeutigkeiten auszuräumen, müssen wir von meiner x, y -Benennung weg,
da ich eine y=f(x) anstrebe, die als Koordinatenreihen x und y enthält, wobei x die Werte von Null bis mindestens Pi/2 sind (entspricht 90°) und y sollen die Sinuswerte sein, die sich mathematisch aus den x-Werten ergeben.


Beim Programmieren incrementiert man schnell mal einen Zähler i o.ä. und verwendet diesen aber auch als x-Koordinate, obwohl i mit y nicht mathematisch verknüpft ist, dabei erhält man Kurven aller Art.

Vielleicht hab ich irgendetwas völlig falsch verstanden, vielleicht ist mein Vorhaben nicht möglich (wie mein Mathelehrer damals erklärte), aber bisher ergibt die Mermansinus Formel lediglich Sinuswerte nicht aber einen Funktionsgraphen durch y=f(x).

Deine Optimierung macht den algebr.Sinus schneller und eleganter und genauer, da Wurzelterme vermieden werden und weil die sin() zur Genauigkeit verwendet wird (aber nur einmal vor der Programmschleife).




Bisher haben wir:

_______________________________________
nach meiner Benennung:

Hilfsradius r = Pi/180

x1 = 1 - r²/2
y1= wurzel(1-x1²)

{ (wurzel(r² - r⁴/4) -> ergibt sich, wenn ich den Term für x1 einsetze, in den Term für y1: wurzel( 1 - (1- (1 - r²/2)²) = (wurzel(r² - r⁴/4) }


x(n+1) = x(n) *x1 - y(n) * y1
y(n+1) = wurzel(1 - x(n+1)²)

{oder in ext.version: x(n+1) = x(n) * x1 - wurzel(1-x(n)²) * wurzel(r² - r⁴/4) }
__________________________________________________ _____________-

in deiner Benennung:

m0 = r = Pi/180 (oder 2Pi/360)
c1 = x1 = 1-m0²/2)
c2 = y1 = wurzel(m0² - m0⁴/4)

__________________________________________________ _____________


Da ich eine Sinuskurve, einen Graphen aus y=f(x) anstrebe,
sind meine oben aufgeführte x,y Benennungen irreführend.
Deine Benennungen sind köarer, bestehen aber überwiegend aus zwei Ziffern, was bei fehlendem svg-Code (Wurzelzeichen usw) die Formeln auch aufbläht.

Mist, muss später fotsetzen, habe hier mein nicht ganz 3 Jährigen neben mir mit den Worten:
"machsduda?" und "auchrichyschaimwill".

also, folgende Ziffern entsprechen dem Zufallsprinzip eines fast-Dreijährigen:

-z

, hm das sieht nach wenig aus, es waren aber ungefähr zweieinhalb Zeilen,
der Kleine kennt aber auch schon die Löschtaste, das "-z" ist nur das Ende einer langen Zeichenkette (ich vermute, es war eine Art Weltformel)


später weiter,

Danke dir

Gruß Merman

richy
17.12.11, 19:49
Hi merman
du vergleichst in deinem letzten Diagramm meine Konstante für y1: c2=wurzel(x²-(x⁴/4)) (als auch deine c2=x-x³/6) mit der gesamten Sinusfunktion ?,

Ja, aber nur mal rein interessehalber. Wie sich die Funktion c2=wurzel(x²-(x⁴/4)) grob verhaelt :
http://home.arcor.de/richardon/2011/mer_apro.gif
wo doch beide nur ein Teil des algebr.Sinus sind, dabei müssen starke Abweichungen entstehen.Da stimme ich dir vollkommen zu. Man spricht dabei von einem Konvergenzradius. Und dessen Zentrum kann man vorgeben und liegt in beiden Faellen bei Null. Man sagt : Die Funktion wurde um x0=0 entwickelt. D.h. dort ist die Approximation am genauesten. Ich haette somit die Funktion besser fuer kleine Werte nahe x0=0 vergleichen sollen. Und habe daher auch geschrieben :
Es ist eine interessante und keinsfalls schlechte Approximation. In der Praxis fuer kleine Winkel (die relevant sind) leider ungenauer als eine Taylor Approximation. Meine letzte Aussage sieht man anhand der Grafik nicht.
EDIT
siehe dazu meinen letzten Beitrag "Vollstaendigkeitshalber"

Aber ich hatte dies auch in Versuchen numerisch getestet- Daher meine Aussage :
Und du kannst deinen Algorithmus nochmals um den Faktor 10-100 genauer gestalten ! Indem du fuer C2 auch direkt eine Taylorreihe verwendest :
Wobei es mir nicht darauf ankam deine Approximation c2=wurzel(x²-(x⁴/4)) zu kritisieren, sondern vor allem darauf, dass man diese auch durch eine einfache Taylorapproximation ersetzen kann. Das wollte ich einfach zeigen, weil diese Vorgehensweise eher in meine rein persoenliche, diesbezueglich noch nichtgeometrische, algebraische Vorstellung passt. Und man sollte nicht vergessen was wir zunaechst mit C1, C2 annaehern. Das ist das etwas Verrueckte. Lediglich einen (zwei) Funktionswerte. cos(dx),sin(dx). Und es zeigt sich, dass die Guete dieser Naeherung letztendich in die Guete der kompletten Sinus bzw Kosinus Funktion eingeht/ transformiert wird. Daher meine Bezeichnung : "Konvergenzradiustransformator"
Um Doppeldeutigkeiten auszuräumen, müssen wir von meiner x, y -Benennung weg, da ich eine y=f(x) anstrebe, die als Koordinatenreihen x und y enthält, wobei x die Werte von Null bis mindestens Pi/2 sind (entspricht 90°) und y sollen die Sinuswerte sein, die sich mathematisch aus den x-Werten ergeben.
Das sehe ich nicht so tragisch. In der Mathematik hat man hier voellige Freiheit. Ok, bei meiner Bezeichnung dx fuer m0,r koennte man kritisieren, dass dies zu Verwechselungen mit x(n) fuehrt. Dann wuerde ich aber nicht x aendern, denn das passt recht gut sondern statt dx z.B. ein dt waehlen. Unser laufender Parameter ist das ganzzahlige n. Und daraus bilden wir z.B das nichtganzzahlige Funktionsargument t=n*dt. Ok x=n*dx waere missverstaendlch. Das sehe ich ein. Ich werde somit ab diesem Beitrag dt statt dx verwenden. t sei ein Parameter t=n*dt. Der laufende Parameter ist n.
... aber bisher ergibt die Mermansinus Formel lediglich Sinuswerte nicht aber einen Funktionsgraphen durch y=f(x).
Einspruch ! Du hast deine Aufgabenstellung, Vorgabe doch bereits zumindestens naeherungsweise geloest. Und weist wie man sie exakt loest. (Additionstheoreme). Aber nur fuer ganz bestimmte Stuetzstellen n*dt. Wir berechnen y=f(n*dt)=sin(n*2*Pi/N) N=Anzahl Abtastwerte.
Und erhalten somit z.B folgende Grafik des angenaeherten (fast exakten) Merman Sinus/Kosinus :
http://home.arcor.de/richardon/2011/merman_elegant.gif
Genuegt dir dies nicht ?
Du scheinst auch noch nicht zu sehen, dass die elegante Form genau deiner Federanschauung entspricht. Wie lautet denn die Parameterdarstellung eines Kreises ? Und wenn wir eine Darstellung (x(n),y(n),z(n)) waehlen wuerden, in der in jedem Iterationsschritt der ausgedruckte Punkt mit den Koordinaten fuer z um dt versetzt ist. Was wuerden wir erhalten ?

x(n)=cos(n*2*Pi/N),
y(n)=sin(n*2*Pi/N)
z(n)=n*2*Pi/N, (dt=2*Pi/N)

Eine Schraubenfeder in Parameterdarstellung.

Gruesse

richy
17.12.11, 20:10
Die Parameterdarstellung der Schraubenlinie ist im Grunde selbsterklaerend. Du kannst dennoch z.B. hier auf Seite 23 nachschlagen :
http://www.google.de/url?sa=t&rct=j&q=schraubenfeder%20parameterdarstellung&source=web&cd=2&ved=0CDgQFjAB&url=http%3A%2F%2Fwww.iag.uni-hannover.de%2F~ebeling%2Fskripten%2FMatheIngII.pdf&ei=iefsTpuZE4Or-gbQm_SJAg&usg=AFQjCNG7fjp5mtFAl6KLCc6JUBApKtvOsQ&cad=rja

http://home.arcor.de/richardon/2011/schraube.gif

r ist die Amplitude der harmonischen Funktionen. Wir haben z.B r=1 gewaehlt.
Unserer Parameter ist n statt t.

richy
17.12.11, 22:36
Vollstaendigkeitshalber :

Machen wir uns nochmals klar. Die Genauigkeit unserer kompletten Sinusfunktion haengt abgesehen von der Maschinengenauigkeit von den Konstanten C1 und C2 ab, wenn wir unsere Funktion bei t=0 starten. Denn x(t=0)=1 und y(t=0)=0 sind triviale Eigenschaften.
Und alle weiteren Betrachtungen koennten wir uns im Grunde sparen, denn wir wissen aus den Additionstheoremen wie wir C1 und C2 waehlen muessen, dass die Iteration unsere Sinus Koninussimulation sogar voellig exakt ist. (Ja, das ist etwas eigentuemlich)

C1=cos(2*Pi/N)
C2=sin(2*Pi/N)

N ist die Anzahl der Abtastwerte die wir verwenden. Im Gegenatz zu echten Simulationen ueber eine numerische Integration ist die Guete unserer Simulation so gut wie unabhaengig von der Anzahl Abtastwerten. Insbesonders wenn wir die oben angegebenen Werte verwenden, denn dann ist unsere Simulation sogar exakt. Wir sind einfach um Welten genauer als eine klasische numerische Integration. Naemlich exakt. Dass wir keine einfache numerische Integration verwenden sieht man daran, dass vor unserem x(n),y(n) ein Faktor ungleich eins steht.
Es ist voellig willkuerlich, dass wir den Kreisumfang 2*Pi in 360 Teile ,N=360 zerlegen. Dann erhalten wir mehr oder weniger anschaulich ein dt von einem Grad. Aber ok verwenden wir N=360

dt=2*Pi/360
dt=0.01745329252 ....

Jetzt verwenden wir irgendeine Methode um moeglichst genau zu berechnen :

C1_exakt=cos(0.01745329252)=0.9998476952 ...
C2_exakt=sin(0.01745329252)=0.01745240644 ...

Wir koennen beliebig aufwaendige Methoden verwenden um diese beiden Werte zu berechnen, denn es sind ja Konstanten, (nur abhaengig von N) die wir lediglich einmal in unserem Programmcode festlegen muessen. Wenn wir an Stuetzstellen von n*ein Grad interessiert sind legen wir einfach vor unserer Schleife fest :

C1_exakt=0.9998476952 ...
C2_exakt=0.01745240644 ...

Und wir erhalten eine nahezu exakte Sinus/ Kosinusfunktion. So exakt wie wir die Werte C1 und C2 bestimmt haben.
Tja das ist das scheinbar Eigentuemliche. Zwei Zahlen reichen aus um den Sinus/Kosinus vollstaendig widerzugeben. Und auch im Cordic Algo ist solche eine Konstante festgelegt.

Zusatzgedanken :
a) Was passiert wenn wir N irrational waehlen ?
b) Wir wollen mt der Methode eine sin-Funktion fuer einen Microprozessor implementieren. Nun kann das Argument natuerlich ausserhalb unserer Stuetzstellen liegen. Z.B sin(4.5 Grad). Wie wurden wir am geschicktesten vorgehen ? Waehlen wir dt=0.1 Grad und lassen die Schleife 45 mal durchlaufen ? Nein, wir kommen auch in 9 Schleifenschritten zum Erfolg.
c) Gibt es ein besonders einfach auszudrueckendes cos(dt), sin(dt) ?

Davon abgesehen :

Im Grunde haben wir alle Aufgaben schon geloest.
Nun ist es aber schon von Interesse zu verfolgen, ob unser erfolgreiches, exaktes Additionstheoremprinzip sich nicht fuer andere Aufgabenstellungen heranziehen laesst. (Ich weiss im Moment noch nichtmal genau fuer welche). Ein reines Brainstorming. Du hast, wohl ohne es selbst zu bemerken, die Taylorreihen oder allgemein Potenzreihen mit ins Spiel gebracht. Verwenden wir fuer C1 und C2 Potenzreihen als Naeherung, so bewirkt die Iteration, dass das Entwicklungszentrum dieser Potenzreihen an die Stellen t=n*dt verschoben wird. Hmmm ... Das kann man per Hand kaum nachrechnen und veranschaulichen, aber mit Maple geht das. Du haengst an dieser Wurzeldarstellung. In dem Fall waere diese sogar auch sinnvoll. Es ergaeben sich Kettenwurzeln, die das Entwicklungszentrum + Konvergenzradius der Potenzreihe nach n*dt transformieren.

Und der eigentliche Nachtrag des Threads sollte sein, dass du zu recht bemaengelt hast, dass meine graphische Darstellung der Potenzreihen
c2=wurzel(x²-(x⁴/4))
c2=x-x³/6
gar nicht darstellt wie diese sich fuer die kleinen interessierenden Werte verhalten. Was ist die Aufgabe dieser Reihen ? Sie sollen C1_exakt, C2_exakt fuer ein Argument
fuer z.B ein Grad approximieren. Ok, schauen wir uns an wie gut sie dazu in der Lage sind indem wir den absoulten Fehler in diesem Bereich, z.B 0..Pi/180 betrachten :

Merman :
http://home.arcor.de/richardon/2011/vgl1.gif

Taylor
http://home.arcor.de/richardon/2011/vgl2.gif

Bitte die Skalierung beachten ! Beides ist ok, da der Fehler etwa im Bereich der Maschinengenauigkeit (10^-9) liegt. Aber nun sieht man zweifelsohne, dass die Taylorapproximation die gestellte Aufgabe um etwa den Faktor "10 000" genauer loest. Dazu enthaelt sie keine Wurzel und weniger Multiplikationen.
Dennoch hatte ich numerisch nur einen Genauigkeitsgewinn des Faktors 10-100 ermittelt. Warum das ? Naja. Schauen wir uns mal in dem Bereich den Fehler von C1 an. cos(t)-(1-t^2/2) :

http://home.arcor.de/richardon/2011/vgl3.gif

Der Fehler liegt im Bereich 10^-9. Ich hatte einen hoeheren Fehler erwartet und kann daher den Faktor 100 im Moment nicht erklaeren. Numerik ist nunmal nicht ganz so einfach :-)

BTW: Vielleicht hat deine Tochter noch gewisse Probleme bei der Erstellung der Weltformel, da ihr Vater kein Maple benutzt. Das Christkind koennte dies doch aendern nicht ?
Und eine alte Version koennte dir auch der Weihnachsmann im Forum zur Verfuegung stellen. :D

Gruesse

Marco Polo
17.12.11, 23:43
BTW: Vielleicht hat deine Tochter noch gewisse Probleme bei der Erstellung der Weltformel, da ihr Vater kein Maple benutzt. Das Christkind koennte dies doch aendern nicht ?
Und eine alte Version koennte dir auch der Weihnachsmann im Forum zur Verfuegung stellen. :D

Er kann ja Graf Maple aus der Wurstfachabteilung fragen. :D

richy
18.12.11, 00:12
Er kann ja Graf Maple aus der Wurstfachabteilung fragen. :D
Zum Beispiel :-)
Aber um z.B. diese Konvergenzzentrum-Radiustransformation weiter zu untersuchen wird Graf Maple alleine nicht ausreichen. Da muss man schon das Maple Orakel selbst befragen. Ich kann mir auch schon vorstellen wie es antworten wird. Mit gar garstig Kettenwurzel :)
In der eleganten Version mit nicht weniger ueblen Polynomen.
Es sieht ja so aus, dass im Grunde alle Fragen bezueglich der Merman DZGL geklaert sind. Wiki hat zu recht Mermans graphisch motivierte Naeherung abgelehnt. Denn warum sollte ich etwas annaehern wenn es ueber die Addditionstheoreme auch exakt geht ? :-)
c1=cos(dt)
c2=sin(dt)
Wie bereits erwaehnt habe ich das daraus resultierende DZGL System schon vor 20 Jahren mal hergeleitet (dann wieder vergessen) und mich damals genauso wie Merman wohl jetzt gewundet warum das denn ueberhaupt funktioniert. Na wegen den Additionstheoremen. So koennte man dies abhaken. Aber mir scheint, dass es vielleicht zu voreilig waere dieses diskrete Simulationsprinzip damit abzuhaken. So wie seitens Wiki.
Das besondere daran ist z.B. dass es eben nicht auf dem klassischen Strickmuster der numerischen Simulation basiert. Das da lautet :
Ersetze die Differential und Integraloperatoren durch Differenzenausdruecke.
Nee, so funktioniert das nicht. Man erkennt dies alleine daran, dass x(k),y(k) mit einem Vorfaktor behaftet sind. Und dass die Simulation eben voellig exakt ist. Ich meine eine durchaus interessante Sache, die es sich lohnt noch etwas weiter zu untersuchen. Und ich bin Merman fuer diesen erneuten Gedankenanstoss durchaus dankbar.
Gruesse

richy
18.12.11, 00:41
Ob ein dreijaehriges Kind das Programmpaket MAPLE als ein geeignetes Weihnachtsgeschenk akzeptieren wuerde steht natuerlich auf einem ganz anderen Blatt.

mermanview
19.12.11, 18:31
Hallo richy:

du verwirrst,

ich glaube du hast die Methode "Additionstheorem" sowohl für die Bestimmung der Folgewerte, als auch zur Herleitung der Konstanten c1, c2 beschrieben.

Und alle weiteren Betrachtungen koennten wir uns im Grunde sparen, denn wir wissen aus den Additionstheoremen wie wir C1 und C2 waehlen muessen, dass die Iteration unsere Sinus Koninussimulation sogar voellig exakt ist. (Ja, das ist etwas eigentuemlich)

C1=cos(2*Pi/N)
C2=sin(2*Pi/N)

An anderer Stelle verwendest du den Begriff "Taylorreihe" als Methode um die Konstanten c1 und c2 zu ermitteln.

Es ist klar, dass Abtastwerte N und "Körnungswert" n nicht 360 und 2Pi/360 sein müssen. ebenso ist klar, dass bei genauer Bestimmung der Konstanten c1, c2 die Folgewerte genau sind.

Dass damit der größte Teil der Aufgabe gelöst ist, ja sogar für die Softwareanwendung evtl. Vorteile bestehen ist auch klar.

Es bleibt mir vorbehalten die Genauigkeit meiner Näherungsmethode in eigenem C -Programm zu testen, in dem ich m0 verkleinere (und Wurzelziehen vermeide).

Ich hätte nichts gegen einen MAPLE-Download, ich weiß nur nicht ob ich mich in gewünschter Schnelligkeit einarbeiten würde.
Ich habe noch zweieinhalb unfertige humanoide Roboter in meiner Werkstatt stehen, die werden seit ca. zwei Jahren um ein 100stel pro drei Monaten weitergearbeitet, die hätten eigentlich Vorrang vor MAPLE.

Job und Familie lassen, so lang die kleinen Ableger noch so klein sind, kaum Zeit, .. worüber ich mich nicht beklagen will.


Zurück zu Sinus:

Es bleibt für mich die Restaufgabe zu überprüfen, ob ich eine MATHEMATISCHE f(x) finde aus deren x Koordinaten sich y Koordinaten ergeben, so dass beide zusammen eine Sinuskurve darstellen.

Du sagst, dass das bereits vollbracht ist und nennst dafür:

Zitat:
... aber bisher ergibt die Mermansinus Formel lediglich Sinuswerte nicht aber einen Funktionsgraphen durch y=f(x).
Einspruch ! Du hast deine Aufgabenstellung, Vorgabe doch bereits zumindestens naeherungsweise geloest. Und weist wie man sie exakt loest. (Additionstheoreme). Aber nur fuer ganz bestimmte Stuetzstellen n*dt. Wir berechnen y=f(n*dt)=sin(n*2*Pi/N) N=Anzahl Abtastwerte.

Vielleicht fehlt mir die mathematische Bildung, aber das sieht für nach f(n*dt) aus, nicht nach f(x), bedenke die Doppelbenennung von x !
x steht in diesem Falle nicht wie bisher (in meiner Iteration) für den Cosinus, sondern er ist die x Achse eines Koordinatensystems, in dem die simple Sinus Kurve (aus dem Einheitskreis) abgebildet ist.

Die Wertetabelle für x strebt von 0 gegen 2Pi in sagen wir in 360 Schritten.
Die Wertetabelle für y sind die Sinuswerte, die sich aber aus den x-Werten ergeben sollen.

am Beispiel sin(30°) = 0,5:

x Koordinate = 0,523598776 = 30/360 * 2Pi
y Koordinate = 0,5

Welche Gleichung (oder Reihenberechnung) macht aus 0,523598776 -> 0,5

(Bisher können wir lediglich in 30 Schritten mit m0 und c1/c2 ->cos/sin(30°) bestimmen)

Ich vermute diese f(x) ist nicht machbar, auszuprobieren, ob ich es dennoch hinbekomme,
macht mir ebenso Spass wie dir Verhulst per DZGL Spass macht.

Muss Feierabend machen, später weiter,

Gruß Merman

PS. Raul Midon kenne ich, allerdings nur von youtube, der Mann ist der Hammer,
der Mann ist hier http://www.youtube.com/watch?v=Ddn4MGaS3N4 ist auch 'ne Klasse für sich.

richy
19.12.11, 20:18
Hi merman

Ich glaube du hast die Methode "Additionstheorem" sowohl für die Bestimmung der Folgewerte, als auch zur Herleitung der Konstanten c1, c2 beschrieben.
Yepp, hier nochmals die Additionstheoreme. Und wenn man dort z.b. y=dx setzt, sieht man im Grunde sofort wie man dies fuer die Iteration ausnuetzen kann :

http://upload.wikimedia.org/wikipedia/de/math/f/c/3/fc3b266ea031def32c9f13d0f08c9853.png
http://upload.wikimedia.org/wikipedia/de/math/2/d/4/2d4ada696dc1fb1f302309618c6cf5fa.png

Und bis auf die Konstanten cos(dx),sin(dx) entspricht die Iteration der Methode die du graphisch hergeleitet hast.

An anderer Stelle verwendest du den Begriff "Taylorreihe" als Methode um die Konstanten c1 und c2 zu ermitteln.
Weil dein C1 einer abgebrochenen Taylorreihe cos(m0)=1-m0^2/2.... entspricht. Deine graphische Methode hat zu dieser Taylorreihe fuer c1 gefuehrt. Fuer c2 fuehrte deine Methode dich auf c2=wurzel(1-c^2).
Man kann aber auch hier eine Taylorreihe verwenden : sin(m0)=m0-m0^3/6....
Und die Iteration wird damit sogar genauer.
Es bleibt mir vorbehalten die Genauigkeit meiner Näherungsmethode in eigenem C -Programm zu testen, in dem ich m0 verkleinere (und Wurzelziehen vermeide).Ja klar. Probieren geht ueber studieren. Und probiere dann auch c2=m0-m0^3/6 aus. Wenn du m0 vekleinerst werden vor allem deine Konstanten c1 und c2 genauer, wie die Grafiken hier zeigen :

c1 :
http://home.arcor.de/richardon/2011/vgl3.gif
c2:
http://home.arcor.de/richardon/2011/vgl1.gif

Es bleibt für mich die Restaufgabe zu überprüfen, ob ich eine MATHEMATISCHE f(x) finde aus deren x Koordinaten sich y Koordinaten ergeben, so dass beide zusammen eine Sinuskurve darstellen.
Betrachten wir das mal etwas philosophischer. Ausgehend von ganzen Zahlen steckt in einem Kreis, in Sinus und Kosinus die Zahl Pi drin. Eine irrationale transzendente Zahl. Und damit in irgendeiner Form etwas "Unendliches". So muessten wir z.B. c1 und c2 unendlich genau bestimmen.

Du kannst deine Aufgabe auch einfach ueber die Taylorreihe loesen :
http://de.wikipedia.org/wiki/Taylorreihe
http://upload.wikimedia.org/wikipedia/commons/thumb/c/c6/Taylor_Approximation_of_sin%28x%29.jpeg/300px-Taylor_Approximation_of_sin%28x%29.jpeg

Dort gibt es auch eine nette Animation zu cos(x). Aber man benoetigt unendlich viele Terme damit die Approximation exakt waere. Wobei man mit 8 Termen im Intervall 0..2*Pi schon recht genau liegt :

cos(x)= 1 - 1/2 x^2 + 1/24 x^4 - 1/720 x^6 + 1/40320 x^8 - 1/3628800 x^10 + 1/479001600 x^12 - 1/87178291200 x^14 + 1/20922789888000 x^16

Und ueber die Methode von Gauss kann man dies noch erheblich verbessern :
http://home.arcor.de/richardon/richy2001/mathe/gauss/sinpow2.gif
(your Approximation = taylor) Jeweils nur drei Terme.
Das ist aber schon etwas mehr fuer Spezialisten.

aber das sieht für nach f(n*dt) aus, nicht nach f(x), bedenke die Doppelbenennung von x !
Die Bennenung hat nichts zu bedeuten. Die entscheidende Enschraenkung ist, dass n ganzzahlig ist und x voellig beliebig reell. Daher schrieb ich :
Aber nur fuer ganz bestimmte Stuetzstellen n*dt.
Sei dt 1 Grad dann erzeugt unsere Methode den Sinus fuer
1*1 Grad
2*1 Grad
3*1 Grad
.... e.t.c
Fuer lediglich 360 Werte. (Wobei wir noch etwas tricksen koennen)

richy
19.12.11, 20:45
Welche Gleichung (oder Reihenberechnung) macht aus 0,523598776 -> 0,5

Ich wuerde dies genauer formulieren :
Welche Gleichung (oder Reihenberechnung) macht aus arcsin(0.5) -> 0,5

Der Cordic Algorithmus muss dies z.B. leisten. Denn in keinem Rechner steckt ein Kreis drin.
Ein einfacher Rechner kann hardwaremaessig nur addieren. Prozessoren fuer musikalische Anwendungen koennen dagegen auch multipilizieren.
Die Taylorapproximation ist nicht die beste Loesung, aber deine
Aufgabenstellung wuerde sie (eher "zufaellig") genau loesen :

http://home.arcor.de/richardon/2011/taylor.gif

Aber je weiter man sich von dem Entwicklungszentrum (in dem Fall x=0) entfernt, desto schlechter wir das Ergebnis. Siehe Grafiken Wiki. Da liegen wir weitaus besser !

mermanview
20.12.11, 13:08
Hallo nochmal,

konnte heut Nacht zw. 2:30 und 4:30 nicht schlafen, was tun ?
-> sinus.c schreiben...

Stöhn, alleine die Vorarbeit:
- die Variabel-Deklaration für ca. 20ig-Stellige Dezimalwerte finden (long double), die dann trotzdem macht was sie will
- die richtigen Parameter ausdrucken mit "printf" printf(" %Lf "); (mit großem L, nicht wie sonst mit kleinem l)
- Zusatzoptionen "-lm" fürs Compilieren finden, damit sqrt(Variablename statt Zahl) überhaupt klappt (cc -o sinus sinus.c -lm)

Das Endergebnis entlohnte dann die Mühe mit großer Ungenauigkeit bei schlichter "Körnung", Ungenauigkeit, die mit feinerer Justierung auch noch zunahm, doppelstöhn.
(Ich vermute der Mathematiker von Wiki hat's auch mit C versucht, weswegen er irrtümlicherweise kritisierte, dass sich die Ungenauigketen akkumulieren, bei zunehmenden Iterationsschritten;).

Also her mit MAPLE !

Da ich unter Linux arbeite, habe ich mal gegoogelt und folgenden Download Link gefunden (es gibt bestimmt noch mehr), hab ihn noch nicht ausprobiert:

EDIT: ich hab Link sicherheitshalber wieder rausgenommen, ich kenn mich da nicht so gut aus, er war von thepiratbay, (dezentralisierte Datenlogistik von urheberrechtlich geschützten Daten), mir persönlich gefällt die Idee zwar, aber ich will nicht mit Unbekanntem jonglieren.
(außer mit wissenschaftlichen Erkenntnissen :- D)

C -Quellcode:

#include <stdio.h>
#include <math.h>


main()
{
------long double pi, m0, x, y, c1, c2, winkel=0;
------int koernung=180, zaehler;
------pi=M_PI;
------m0=pi/koernung;
------c1=1-((m0*m0)/2);
------c2=sqrt(1-(x1*x1));
------x=x1; //Starwert für 1°
------y=y1; // Startwert für 1°
------for (zaehler=1;zaehler<koernung+1;zaehler++)
------{
-----------winkel=180/koernung*zaehler;
-----------printf("sin(%Lf °) = %.18Lf\n", winkel, y);
-----------x=(x*c1)-(y*c2);
-----------y=sqrt(1-(x*x));
------}
------return(0);
}

Habe den Quellcode hier am Arbeitsplatz ohne Testmöglichkeit noch etwas umgeschrieben, hoffe keine Fehler eingebaut zu haben.
(Mir fällt grad auf, ich hätte die Wurzelfunktion in der Schleife vermeiden können (wie besprochen), war aber auch so schon schnell)

---------------------------------------------------------------------------

Zu unserer Sinus-Funktion:

Dass alle Sinus Algos nicht um Pi herum kommen, also eine endliche Ganauigkeit haben müssen, war auch mein Gedanke, deshalb habe ich zunächst m0=Pi/180 gweählt, weil man diesen Wert später jederzeit verfeinern kann.

Ich vermute, dass ein Taschenrechner und andere Programme, sehr genäherte Startwerte verwenden (m0, c1, c2) um dann per Additionstheorem die Folgewerte zu berechnen.
Allerdings gab es da noch die Anmerkung des Wiki-Mathematikers, dass das Halbieren (und Verdoppeln?) von Winkeln die Iterationsschritte nochnal verkürze.
Ich vermute auch dahinter steckt eine die mathematische Umsetzung einer Geometrischen Logik, die in unserer Sinusfunktion noch nicht enthalten ist.
(Bildlich kann ich mir vorstellen, dass ein Dreieck mathematisch schnell halbiert ist, auf Grund gleichlanger Schenkel (ähem), insofern ließe sich jede geählte Körnung ebenso schnell halbieren, so o.ä.)

Ich bin aber froh, wenn ich meine Merman-Aproximation und die Mermanfolgewerte untersucht habe auf Ganauigkeit und Schnelligkeit, bei bloßer Verkleinerung von m0 (z.B. Pi/180, Pi/1800, Pi/18000 usw), die Winkelhalbierung ist erstmal geschenkt.

Noch zwei Punkte:

1.)
(Die Kostante c1 ist die Gleichsetzung von Strich mit Kreisbogenabschnitt, c1= 1-m0^2/2)
Meine c2 = wurzel(m0^2 - m0^4/4) ist nicht der Versuch einer Taylorreihe,
der Term entstand aus der Herleitung c2=Wurzel(1-c1^2) (mit c1 = 1- m0^2/2)

Es sind die x- und y-Koordinaten für 1° in einem Kreis.
Da dem Kreis die Kreisformel zugrunde liegt, ergibt sich für jede y-Koordinate zwingend die Herleitung: y= wurzel(1-x^2),
so auch für diese Anfangkoordinaten für 1° (bei m0=Pi/180).

2.)
Mikrokontroller für Taschenrechner: Können die nicht per Bit-Schieberei auch multiplizieren ?
-> einmal nach kinks geschoben = einmal mit 2 multipliziert, oder ist die Bitschieberei bloß ein Ergebnis von Addition mit sich selber?

So zum Abschluss noch Musik, diesmal zum entspannen (wenn's denn gefällt): et voila:

http://www.youtube.com/watch?v=KQ7b8PUEkuA

erstmal Gruß, Merman

(pssst, die Arbeit (hier am A.platz) bleibt schon wieder seit 2h liegen)

richy
20.12.11, 23:41
Hi merman

Probiere mal die Simulation mit den exakten Konstanten aus und drucke den absoluten Fehler aus.
Setze
c1=cos(m0)
c2=sin(m0)
Als Extremtest mit wenigen Abtastwerten (z.B Pi/5) im Vergleich zu den Naeherungen. Die Naeherungen werden dann versagen und damit wird einiges deutlich. Ich hoffe du siehst, dass es unnoetig ist fuer C1 und C2 irgendwelche Naeherungen zu verwenden, ausser rein interessehalber. Aus Spass an der Freude :-) Oder wer weiss ...
Maple fuer Linux sollte in einer aelteren Version verfuegbar sein. Dann koennte man den Asci Quelltext direkt austauschen. MAPLE ist ideal fuer mathematisches Programmieren.
Dass unsere Verfahren gegenueber einer Taylorapproximation unabhaengig von einem Entwicklungszentrum ist liegt daran, dass wir eine Konstante verwenden. Und die Additionstheoreme sin(x+dx) cos(x+dx) gelten fuer alle x.

Stöhn, alleine die Vorarbeit:
Tja pures Ansi C kann sehr anstrengend sein :-)

(Mir fällt grad auf, ich hätte die Wurzelfunktion in der Schleife vermeiden können (wie besprochen), war aber auch so schon schnell)

Der Hauptvorteil der eleganten "Schraubenfedermethode" liegt darin, dass die Iteration dann nicht auf 0..180 Grad beschraenkt ist.

Ich vermute, dass ein Taschenrechner und andere Programme, sehr genäherte Startwerte verwenden (m0, c1, c2) um dann per Additionstheorem die Folgewerte zu berechnen.

Ich meine die Rechner verwenden heute noch den Cordic Algo. Der ist im Grunde aehnlich. Weitaus ausgefeilter und verwendet aber auch fest abgespeicherte Konstanten.

Allerdings gab es da noch die Anmerkung des Wiki-Mathematikers, dass das Halbieren (und Verdoppeln?) von Winkeln die Iterationsschritte nochmal verkürze.

Der Cordic Algo verwendet nur Multiplikationen mit 2. Das sind dann shifts, wie du sie bereits unter 2) beschrieben hast.
Der Mathematiker koennte noch etwas anderes gemeint haben :

Wollen wir den Sinus von 3.24 Grad berechnen, dann waere es unguenstig hier 324 Iterationen von 1/100 Grad durchzufuehren.
Effizienter sind
3 Iterationen von 1 Grad
2 Iterationen von 1/10 Grad
4 Iterationen von 1/100 Grad

Und dazu koenen wir die notwendigen Konstanten zuvor abspeichern :
c1[0]=cos(Pi/180)
c1[1]=cos(Pi/1800)
c1[3]=cos(Pi/18000) ebenso fuer C2

(Die Kostante c1 ist die Gleichsetzung von Strich mit Kreisbogenabschnitt, c1= 1-m0^2/2)

Strich=Gerade ?
Und eine Gerade ist nunmal kein Kreisbogen. Und das ist die (wohl einzigste) Naeherung in deiner graphischen Herleitung. Und zufaelligerweise entspricht dies einer Taylorreihe mit zwei Termen fuer cos(m0). Die Laenge des Kreisbogens waere exakt cos(m0). Vielleicht kannst du das noch herleiten. Das waere klasse, denn dann haettest du ein Additionstheoreme graphisch hergeleitet. Das waere unter Umstaenden tatsaechlich etwas fuer WIKI.

Meine c2 = wurzel(m0^2 - m0^4/4) ist nicht der Versuch einer Taylorreihe, der Term entstand aus der Herleitung c2=Wurzel(1-c1^2) (mit c1 = 1- m0^2/2)
Ja, das ist uns doch schon lange klar. Und c2=Wurzel(1-c1^2) ist sogar exakt. Aber weil dein c1 eine "Strichnaeherung" ist, ist c2 dann eben auch nur eine Naeherung. In deiner graphischen Herleitung muss c2=sin(m0) der exakte Wert sein. Kannst du mal eine etwas genauere Graphik deiner graphischen Herleitung hier reinstellen ?

Im Grunde weiss ich, was dich besonders herausfordert. Einen Sinus oder Cosinus praktisch aus der Luft zu zaubern. Ich meine zwar, dass das wohl "irgendwie kaum" moeglich ist, aber finde es dennoch interessant.

D.h. die Verhulst Gleichung fuer r=4 zeigt, dass es vielleicht doch moeglich ist.
Siehe (*) im Beitrag

Ich hoffe du hast inzwischen erkannt, dass alleine die Konstanten C1 und C2 entscheidend sind. Fuer C1 hast du (ohne es zu wissen) Taylor verwendet. Fuer C2 ebenfalls eine Naeherung. Wurzel(1-C1_Taylor^2). Meine letzten Fehlergrafiken zeigen, dass diese Naeherungen fuer m0 gegen 0 natuerlich gegen die exakten Werte konvergieren :
sin(0)=0 und cos(0)=1
Was passiert nun, wenn wir ein ganz kleines m0 waehlen und dieses in jedem Iterationsschritt vergroessern ? Indem wir fuer cos(m0) und sin(m0) die berechneten sin/cos Werte verwenden.

Das ist unsere elegante Schleife

> 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:


Und jetzt bestmmen wir daraus unsere neuen Konstanten

> 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
> c1:=x[n+1];
> c2:=y[n+1];
> od:

(*)
Was wird passieren ? Unser m0 wir exponentiell anwachsen.
Genau so verhaelt sich auch die Loesung der Verhulst Gleichung fuer r=4 :

http://home.arcor.de/richardon/2010/verhulstlsg.gif

So schliesst sich mancher Kreis zwischen einer Merman Approximation und der Verhulst Gleichung wie man es anfangs vieleicht gar nicht vermutet. Nicht :-)
Die Verhulst Gleichung fuer r=4 produziert in etwa das was du suchst.

x(n+1)=4*x(n)*(1-x(n))
x(0)=x0

Du darfst sie dazu aber nicht ueber die Iterationsschritte betrachten, das ist eine chaotische Funktion, sondern ueber alle Anfangswerte x0 fuer einen Iterationsschritt. Und das sieht dann in der zentrierten Verhulst DZG wie folgt aus :

http://home.arcor.de/richardon//2010/okt2.gif

Und das ist ein (frequenzmodulierte) Kosinusfunktion, ohne dass wir irgendeine Information ueber einen Sinus oder Kosinus in dieser Gleichung verwendet haben. Und dass dies ein Kosinus ist, hoert man auch an diesem mp3 File. der die Verhulstgleichung fuer r=4 als Basedrum verwendet :

http://home.arcor.de/richardon/2011/chic0.mp3

Aus Verhulst und Kunst
http://www.quanten.de/forum/showthread.php5?t=2078


Ok dein Vorhaben ist trotz aller standartmathematischen Vorbehalte "irgendwie" realisierbar. Das Problem ist. Diese Vehulst Loesung, der Cosinus ist exponentiell frequenzmoduliert.
Deine Approximation koennte ein Ansatz sein, ein Gedankenanstoss um hier vieleicht weiter zu kommen. Schonmmal danke dafuer.

Viele Gruesse

richy
21.12.11, 01:42
Deine Links
http://www.youtube.com/watch?v=Ddn4MGaS3N4
Hey das ist klasse. Super !

Dein afrikanisches Video :
http://www.youtube.com/watch?v=KQ7b8PUEkuA
Naja letzendlich nahm unsere ganze Kultur, wenigstens hier in Europa wohl von Afrika aus ihren Weg.

Angelique Kidjo hab von Anfang an mitverfolgt auch schon in den 90 ern mal live gesehen. Die absolute Powerfrau. Naja jetzt ist sie auch schon bischen aelter. Fuer mich eine der aussergewoehnlichsten afrikanischen Saengerinen. Geniale Frau :
http://www.youtube.com/watch?v=9IWBSyoLV0Y&feature=player_embedded
Agolo oder Adouma war natuerlich bekannter.


Last not least Miss Grace Jones produced by Trevor Horn :
Typischer 80#s hi tecno Fairlight Synclavier african song :
Die Platte war damals aufgrund der Perfektion wie von einem andere Stern.
Das Video ist ein Tribute to Trevor Horn :
http://www.youtube.com/watch?v=crsb7fdWflU

mermanview
23.12.11, 15:36
Ich hoffe du hast inzwischen erkannt, dass alleine die Konstanten C1 und C2 entscheidend sind.

... ähämm; die Abhängigkeit der Genauigkeit habe ich bereits vor einem Jahr bei Wiki erwähnt.
Ich bewege mich vielleicht in den Talsohlen der Mathematik, dennoch kann ich auch da zwingendene Logik erkennen.

Mathematische Näherung des ersten Sinuswertes:

r =Pi/180) (entspricht einem Grad, läßt sich für genauere Ergebnisse beliebieg verkleinern)



By the way:

bei

m0=1/10^p

legt p die Nachkommastellen zur Bestimmung von Pi/2 fest.

Nicht Zitat, sondern Hervorhebung:

n * m0 = Pi/2 mit p Nachkommastellen Genauigkeit, wenn x(n) * x1 - y(n) *y1 =0 (oder <= m0)

(da 90° = Pi/2 und cos(90)=0)


Wähle ich p=20, dann ergibt die Iteration bis x(n)*x1-y(n)*y1 = 0 -> Pi/2 mit einer Genauigkeit von 20 Nachkommastellen.
Ich kanns nicht beschwören, aber MAPLE müsste zeigen, dass auch die Cosinis/Sinus Werte ähnlich genau sind.

Kein Zitat:
Hervorhebung

WOMIT DENN AUCH DER LETZTE SCHRITT GETAN WÄRE; JUHUU:

ICH KANN OHNE KENNTNISS DER KREISZAHL PI, DIE KREISZAHL PI MIT HOHER GENAUIGKEIT BESTIMMEN,
SO KANN ICH AUF GLEICHEM WEG MIT GLEICHER GENAUIGKEIT DIE LÄNGE DES KREISBOGENABSCHNITTES FÜR 1° BESTIMMEN (= c1).

:) :- ) :- ) :- ) :- ) :- ) :- ):- ) :- ) :- ):- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :- ) :)



Damit ist die ursprüngliche Näherung reichlich genähert, der Strich/ die Gerade für 1° wird zur feinen eckigen Kurve.
Die Methode "Näherung plus Additionstheorem" verfeinert sich selber, zwecks Bestimmung der Anfangskonstanten.

Kannst du mal eine etwas genauere Graphik deiner graphischen Herleitung hier reinstellen ?

'Tschulidgung, hätte ich schon längst tun sollen, mal sehn ob ich es sofort jetzt hinbekomme.
(hängt davon ab wie lang die Kleinen noch schlafen, bei lautem Geräusch alter Tastatur, Moment...)


http://img3.fotos-hochladen.net/uploads/sinus3f2sbd7txzw.gif (http://www.fotos-hochladen.net)


Hab noch was für dich:
Meine erste, ursprüngliche Formel zur Herleitung der Sinuswerte.
Die ist ein Besweis dafür, wie anstelle von Fleiß auch Leidenschaft zu unmöglichen Ausmaßen einer Formel führen kann.
Die Formel ergibt die gleichen Werte wie die Merman- Iteration, allerdings kann man sie eher als Tapetenmuster oder Stilleben verwenden.

So da ist sie:

(nach dem diese Formel stand (drei Nächte Umformung, ca. 50.000 mal vertan), hatte ich keine Lust mehr rauszukürzen,
...bin umgeschwenkt auf Achsenschwenk und Vektorkonstruktion)

http://img3.fotos-hochladen.net/uploads/cosinusklhatwg0s6.gif (http://www.fotos-hochladen.net)


cu

Merman

mermanview
27.12.11, 21:10
Hallo richy,

ich habs geahnt:

Winkel - Halbierung ist der eigentliche Knaller bei der Bestimmung von Sinuswerten und co..

Wie ich letztens erwähnte:

Allerdings gab es da noch die Anmerkung des Wiki-Mathematikers, dass das Halbieren (und Verdoppeln?) von Winkeln die Iterationsschritte nochnal verkürze.
Ich vermute auch dahinter steckt eine die mathematische Umsetzung einer Geometrischen Logik, die in unserer Sinusfunktion noch nicht enthalten ist.

... bin der Sache mit meiner Methode auf den Grund gegangen (Koordinatensystem, logische Geometrie, + bißchen Mathe..)

Man erhält mit der Methode zumindest genaue Anfangswerte.

Nehmen wir einen Kreis und unterteilen ihn in 360 / 400 / oder 2 *Pi Winkelgrade, egal:

Halbieren, und nochmals halbieren führt stets zu bekannten Teilwerten der Gesamtzahl. Zum zweiten kann man Koordinaten, Steigungen (Tangens) usw. beim Halbieren leicht berechnen, so dass man zu Winkelgraden auch noch Höhen (sin) und Längen (cos) herleiten kann:


Bei jeder Iterationen führt immer die vorhergehende Steigung m zwischen Nullpunkt und den x/y Koordinaten zur den Folge-Koordinaten (x(n+1)/y(n+1), diese ergeben dann wieder die Folgesteigung m(n+1).

m(n) = (1-x(n)) / y(n)

x(n+1) = Wurzel(1 / (m(n)^2+1))

y(n+1) = m(n) * x(n+1)

m(n+1)= (1-x(n+1) / y(n+1)

Bei nur 8 Iterationen erhält man den genauen Anfangswert für 90°/2^8 Grad (90°/256 = 360°/1024)
Aus der früheren Näherungs-Geraden wurde ein runder Kreisbogen !!!

by the way: Im digitalen Zeitalter sollte man den Kreis eh in 1024 Teile zerlegen.

Gruß Merman

richy
01.01.12, 19:55
Hi merman
Man erhält mit der Methode zumindest genaue Anfangswerte.
Das scheine ich anders zu betrachten. Ueber die Anfangswerte sin(0)=0 und cos(0)=1. Genauer geht es nicht.
x(n+1)/y(n+1)
Das Verhaeltnis von Werten scheint bei DZGL's eine besondere Rolle zu spielen. In dem Fall erhaelt man den Tangens. Hmm.Den scheint der Cordic Algo zu verwenden. Sicherlich eine gute Idee. Das mit dem Halbieren habe ich allerdings nicht so ganz verstanden.

die Abhängigkeit der Genauigkeit habe ich bereits vor einem Jahr bei Wiki erwähnt.
Ich war mir nicht sicher ob du ebenfalls alle drei Varinaten kompakt ueber C1,C2 betrachtes. Dass eine Iteration wie in unseremn Fakll exakt ist, ist eher die Ausnahme, wenn man nicht von der DZGL ausgeht.

Vielen Dank fuer die Grafiken. Aha, jetzt verstehe ich auch deine Bezeichnungsweise r. Und du verwendest fuer den Kreis den Pythagoras x^2+y^1=R^2. Und es ergeben sich wohlt tatsaechlich die Additionstheoreme ohne Naeherung. Du muesstest nun zunaechst einfach argumentieren, dass der zweite Schritt fuer jeden beliebien ersten Schritt gilt.
Einen Anfangswert zu konstruieren muss daher gar nicht sein, weil wir einen genauern Anfangswert kennen und man die Grafik beliebig drehen kann.
Zu der Mammutgleichung :
Ob man da nicht einiges vereinfachen kann.
Aber im Grunde haben wir schon ales Notwendige berechnet.


Viele Gruesse
richy

mermanview
02.01.12, 04:13
FrosNeus richy,

Danke der Antwort,

Winkelhalbieren geschieht folgendermaßen ...

http://img3.fotos-hochladen.net/uploads/halberwinkelj6wcar8qyl.png (http://www.fotos-hochladen.net)

Über Gleichsetzung von Gerade und Kreis erhält man gemeinsame Schnittpunkte, so führt m1 zu x1/y1, diese wiederum führen zu m2 usw. (Wurzel(1-x^2) = mx, gem. Schnittpunkt von Kreis und Winkelhalbierende)

..und führt auf relativ einfachem Weg zu genauen Anfangswerten ohne Verwendung der implementierten sin()/ cos() Funktion, insofern bloß idealistischer Weise.

Vergleichswert:

für 90°/256 = 0,3515625° ermittelt o.O.-"Excel" (von Sun) über 8 Iterationen:

merman_sin(0,3515625°)=0,00613588464915860000
o.O.____sin(0,3515625°)=0,00613588464915448000
Differenz_____________=0,00000000000000411997

Ja es besteht eine Differenz (14 Stellen nach d. Komma), da achtmal Wurzel gezogen wird,
mathematisch ist die Sache aber sauber.

Es fehlt mir jetzt noch der letzte (wahrscheinlich unlösbare) Schritt:
eine f(x) = sin(alpha), so dass y = f(x),(am Besten ohne Iteration :- )

Ich verwende übrigens das Mathe-Tool "Genius" (f.Linux, soll MAPLE ähnlich sein),
die Syntax hab ich noch nicht ganz drauf (deswegen nochmal Excel).
Es braucht allerdings für Iterationen mit für eine Genauigkeit von 1/10⁸ -> 2 Minuten,
... in sofern sehe ich zunächst von 20-stelliger Genauigkeit ab.

zu f(x)=sin(alpha):

Für diesen letzten Schritt dauert's wahrscheinl. ne Weile, da mir deine Antworten wichtig sind,
scheint es mir angebracht, dir mal von MermanGeometie "frei" zu geben,
damit du auch schön wieder einsteigst, wenn in diesem Thread noch was Wichtiges passiert ;;;;- ).

Sofar, jetzt wieder in's Bett,

best Thanks, Gruß Merman

mermanview
22.09.12, 14:57
Wurzelfreie Herleitung des Kreises durch das Quadrat

Tag Leute,

ich war sehr lange weg.

Im Sinne von richy's gelegentlichem Credo: "shut up and calculate" hab ich mir Zeit gelassen,
um -neben dem eigentlichen Leben- schrittweise zu rechnen:

Ergebnis:

Der trigonometrische x- Faktor

Exakte Herleitung von Kreispunkten ohne Wurzelfunktion:

Namensgebung:

..........x = x-Faktor, a und b = Koordinaten (a|b) des Einheitskreises


Berechnung:

x-Faktor:

..........x = frei wählbar (>1)

Exakte Startwerte für die Reihenberechnung der Kreispunkte

..........a(1) = (x²-1) / (x²+1)
..........b(1) = (2x) / (x²+1)

Iteration exakter Kreispunkte:

..........a(n+1) = a(n) * a(1) – b(n) * b(1)
..........b(n+1) = a(n) * b(1) + b(n) * a(1)

Ergebnisse,

bei x = 5:


http://img5.fotos-hochladen.net/uploads/bei5fick2wmtju.jpg (http://www.fotos-hochladen.net)

bei x = 20:


http://img5.fotos-hochladen.net/uploads/bei20q1xh09vy38.jpg (http://www.fotos-hochladen.net)


Durch Ausprobieren stellte sich heraus,
dass bei x = 114,5886501293 für MS-Excel der ideale Wert entsteht,
um pro Iterationsschritt auch die Sinus- und Kosinuswerte für 1°-360°
auf mehrere Kommastellen genau zu berechnen !


bei x = 114,5886501293:



http://img5.fotos-hochladen.net/uploads/sinkosx79jkuqyic.jpg (http://www.fotos-hochladen.net)


Gesamt gesehen sieht das Ergebnis mager aus, für ca. 8 Monate Rechenzeit,
(wenn mal Zeit war, zu calculaten), die Zwischenergebnisse waren reichlich.

Was hier steht war auch vor 9 Monaten schon bekannt,
wurde allerdings von mir nicht in dieser Reihenfolge angewandt und vorgeschlagen.



Der x-Faktor ergab sich aus a²+b²=c² mit c=1:

....(1-a) * x = b = (1+a)/x
=> x = Wurzel((1+a)/(1-a))

=> ....a = (x²-1)/(x²+1)
und ...b=(2x)/x²+1)

Geometrisch steht x für die Steigung der Sehne, die ein rechtwinkliges Dreieck in einem Einheitskreis
als einen Kreisbabschnitt bildet (x = b / 1-a).

Bild:
(c bzw. r = 1)

http://img5.fotos-hochladen.net/uploads/kreis6mlbnk0fu2.jpg (http://www.fotos-hochladen.net)

bdmnxt

Merman

mermanview
26.09.12, 14:18
... im Unterschied zur herkömmlichen Berechnung/ Herleitung von Kreispunkt-Koordinaten mit Hilfe der gängigen Pythagoras-Formel:

..........b = Wurzel(1-a²)

werden hier Kreispunkte in regelmäßigen Abständen berechnet.

Dadurch sind die Ergebnisse nutzbar für Winkelfunktionen,
da der Kreis in regelmäßige Abschnitte unterteilt wird.

Die Iteration zur Berechnung lässt sich z.Zt. leider (noch) nicht vermeiden.

Wurzelberechnungen sind hier immerhin komplett ausgeschlossen, umgewandelt in quadratische Berechnungen, und die Koordinaten sind exakt.

Es fehlt noch Information über die Häufigkeit "n",
der per Anfangssteigung "x" gewählten Kreisabschnitte, ... ich bleibe dran.

Wofür könnten vereinfachte Winkelfunktionen nützlich sein ?

Hm, keine Ahnung, vielleicht werden damit Berechnungen von Aufenthaltsorten vereinfacht.

Da hier die mathematischen Darstellungen stets geometrisch anschaulich ist, macht es vor Allem Spass.

Gruß Merman