PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Math - Gauss Approximation


richy
09.12.08, 03:55
Hi
Nachdem meine Fibonacci Integraltransformation nun doch eher in die Hose ging moechte ich das Thema nochmals ueber eine Reihenapproximation ueber die Methode von Gauss angehen.

Ob sich etwas brauchbares aus den Berechnungen ergibt weiss ich allerdings noch nicht.
Die Gauss Approximation ueber die Methode der kleinsten Quadrate habe ich auf meiner Homepage schon vorgestellt :
http://home.arcor.de/richardon/richy2001/mathe/gauss/gindex.htm

Die Ergebnisse dort moechte ich zunaechst allgemeiner zusammenfasen :


> # Konkretisierte allgemeine Beschreibung fuer eine linearen Synthesefunktion
> # ************************************************** **********
> # Eine Funktion f(x) soll ueber eine Funktion s(a1,a2..an,x)
> # ueber die Methode kleinster Quadrate approximiert werden
> # Konvention
> # 1) Wir bezeichen Zeilen mit p und Spalten mit i
> # 2) Wir bestimmen eine Zeilefunktion zf(p)
> # zf(p)=ds(a1,a2..an,x)/dp
> # 3) Wir bestimmen eine Spaltenfunktion sf(i)
> # sf(p)=ds(a1,a2..an,x)/di
> # 4) Fuer jedes Elemen der Matrix A(p,i) bilden wir nun
> # Integral( zf(p,x)*sf(i,x),x),x=alpha..beta)
> # 5) Wir bilden ein Residuum res(p)
> # res(p)= Integral(zf(p)*f(x),x=alpha..beta)
> #
> # 6) Wir waehlen alpha und beta unter Aspekten der Orthogonalitaet
> # nicht zwingend notwendig !
> # 7) Wir Loesen das GL-System nach a1..an auf
> # *******************************************
> Numerische Vereinfachungen :
> # 8) zu 7)
> # Wir versuchen alpha und betha so zu bestimmen dass die
> # Basisfunktionen ihre Ausblendeigenschaft erhalten.
> # 9) Wir orthogonalisieren die Basifunktionen fuer alpha,beta
> # In diesen Faellen bleibt lediglich die Hauptdiagonale der Matrix A
> # mit Werten ungleich 0 besetzt.
> # Die Matrix muss daher auch nicht mehr invertiert werden.

Diesmal moechte ich also genauer und allgemeiner vorgehen als
im Fibonacci Transformation Thread.
Ich hoffe bis jetzt ist noch alles verstaendlich.
Im Prinzip ja auch kein Hexenwerk.

Das ist alles nur Vorbereitung fuer den Fibonacci Reihen Thread,

richy
10.12.08, 14:05
Hi
Die Gaussche Fehler Approximation fuehrt dann zu eine Matrix Gl folgender Form :

A*a=re
A stellt eine Matrix dar.
a stellt einen Vektor der Parameter a1,a2,a3 ... dar
re stellt einen Vektor eines Integrals der zu approximierenden Funktion dar

Die oben beschriebene Matrixform ist vor allem sinnvoll um fuer lineare Synthesefunktionen s(a,x) eine Uebersicht zu gewinnen.
Zwingend notwendig ist diese Darstellungsweise nicht.
Ueber Gauss lassen sich auch nichtlineare Approximationen erstellen.

Der Systematik wegen hier zunaechst mal ein lineares Beispiel in der Matrixform :
Als Syntesefunktion soll eine Summe von n Sinusschwingungen verwendet werden. Die Optimierungsparameter sollen deren Amplituden a_n sein. Der zugeordnete Parameter der Synthesefunktionen die Frequenzen der Schwingungen.

Beispiel:
s:=sum(a[i]*sin(i*x),i=1..4);
(x=2*Pi ist somit die Periodendauer)

Wir bilden die A Matrix wie oben beschrieben:
2) Wir bestimmen eine Zeilenfunktion zf(p)
> # zf(p)=ds(a1,a2..an,x)/dp


> for p from 1 to 4 do
> zf[p]:=diff(s,a[p]);
> od;

ergibt :

zf[1] := sin(2 pi x)
zf[2] := sin(4 pi x)
zf[3] := sin(6 pi x)
zf[4] := sin(8 pi x)

> # 3) Wir bestimmen eine Spaltenfunktion sf(i)
> # sf(p)=ds(a1,a2..an,x)/di

Fuer eine lineare Approximation gilt sf(k)=zf(k);

4) Fuer jedes Elemen der Matrix A(p,i) bilden wir nun
> # Integral( zf(p,x)*sf(i,x),x),x=alpha..beta)

> for p from 1 to 4 do
> for i from 1 to 4 do
> A[p][i]:=(int(zf[p]*sf[i],x=alpha..beta));
> od; > od;

Das wars auch schon :-)

Waehlen wir als Integrationsgrenzen
alpha=0
beta=1
erhalten wir fuer die A Matrix gerundet :

.2726 .3972 .3219 .1194
.3972 .5946 .5166 .2506
.3219 .5166 .5232 .3738
.1194 .2506 .3738 .4381

Und das Gleichungssystem A*a=res zu loesen muessen wir die Matriy A invertieren.

AUSBELNDEIGENSCHAFT
*******************
Nun waehlen wir :

alpha=0
beta=2*Pi

und erhalten fuer die A Matrix gerundet :

3.1415 0.0000 0.0000 0.0000
0.0000 3.1415 0.0000 0.0000
0.0000 0.0000 3.1415 0.0000
0.0000 0.0000 0.0000 3.1415

Hallelulja :D
Wir muessen die Matrix A also nicht mehr invertieren !
Das ist die Eigenschaft der harmonischen Funktion, die man
als Ausblendeigenschaft bezeichnet. Die Funktionen sind orthogonal.

Man kann sich die Eigenschaft des Integrals entweder graphisch veranschaulichen oder am besten im Bildbereich der Fouriertransformierten ueber die Faltung.

Die komplexe Exponentialfunktion f(x)=exp(j*x) weist ebenfalls die Ausblendeigenschaft auf. Und das ist eine der ausgezeichneten
Eigenschaften dieser Funktionen.
Und mit der Methode der kleinsten Quadrate von Gauss sieht man dies besonders schoen.

Nun sollte man aber nicht vergessen, dass diese Ausblendeigenschaft
abgesehen von der technischen Anwendung nur die Berechnung vereinfacht.
Die Approximation wird damit keinesfalls genauer.

Im Gegenteil :
Je kleiner ich das Integrationsintervall alpha..beta waehle umso genauer wird dort die Approximation.

Ueber Gauss kann man nun fuer s(a,x) beliebige Funktionen waehlen.
Natuerlich auch eine Fibonacci Reihe.

ciao

richy
10.12.08, 15:36
Randbemerkung

Die Sinusfunktion ist

a) eine ungerade Funktion
b) eine periodische Funktion
c) Funktion mit den Nullstellen k*Pi

Die approximierte Funktion wird die selben Eigenschaften aufweisen.

Einschraenkung a) laesst sich vermeiden imdem man zur komplexen Exponentialfunktion uebergeht. cos(kx)+i*sin(kx)


Einschraenkung b) laesst sich nur durch den Uebergang zu einer Inegraltransformation loesen.

Die komplexwertige Fibonaccifolge ist eine gewichtete komplexe Exponentialfunktion.
Einschraenkung a) muesste man loesenkoennen.
Die Funktion ist aber aufgrund der Gewichtung nicht periodisch.
Dies wird den Nachteil haben, dass die Approximation nur im Approximationsintervall eine gute Approximation darstellt.

c) wird ein Problem sein denn man wird die Funktion nur bis Pi optimieren koennen und das ist natuerlich bischen wenig.
BTW
Ein Trick koennte es sein die Fouriertransformierte der Fib Folge zu berechnen und damit weiterzuarbeiten.

richy
10.12.08, 16:13
Bisher lautet der Maplecode einer allgemeinen Gauss Appoximation :

> restart; with(linalg):
> N=4 # Grad der Approximation
> A:= matrix(N,N+1):
> # Zielfunktion (Beispiel Sinus)
> f(x):=sin(x);
> # Synthesefunktion (Beispiel Sinus)
> s:=sum(a[i]*sin(i*x),i=1..N);
> #******************************
> # Bestimmen der Zeilenelemente zf(p) und Spaltenelemente
> for p from 1 to N do
> zf[p]:=diff(s,a[p]);
> sf[p]:=zf[p];
> od;
> # Aufbau Der A Matrix
> alpha:=0;
> beta:=2*Pi;
> for p from 1 to N do
> for i from 1 to N do
> A[p][i]:=(int(zf[p]*sf[i],x=alpha..beta));
> od; od;

Es fehlen noch die Elemente des Residuums

> for i from 1 to N do
> res[i]:=int(sf[i]*f(x),x=alpha..beta);
> A[i,N+1]:=res[i]; # Fuer Loesungsverfahren
> od;

Liegt die Zielfunktion als Messwerte vor oder ist das Integral nicht loesbar wir man numerisch integrieren.

Und nun noch das Aufloesen des Gleichungssystems :
Mlsg:=rref(A):
Loesung ausgeben :

> for i from 1 to N do
> a[i]:=Mlsg[i,N+1];
> od;

Ergebnis drucken ;

plot(s,x=0..2*Pi);

Ferdisch ;-)
Fuer das obige Beispiel erhaelt man natuerlich
a1=1
und der Rest ist Null

richy
11.12.08, 15:54
Dass die Fib Funktion komplexwertig ist bereitet mir gerade Probleme.
Ich will keine gewichtete sinus cosinus Reihenapproximation sodern eine fib Approximation.
Hat jemand eine Idee ?
Ich koennte den Betrag verwenden. Letztendlich sind fuer ganzzahlige Argumente die Fib Zahlen reell.

Und ich sehe noch eine Schwierigkeit.
Ich werde bei den Fib Zahlen sehr schnell in astronomische Zahlenbereiche geraten.

Gerade mal getestet.
Das ganze scheint dennoch bedingt zu funktionieren.

Jogi
11.12.08, 17:31
Und ich sehe noch eine Schwierigkeit.
Ich werde bei den Fib Zahlen sehr schnell in astronomische Zahlenbereiche geraten.

Hat jemand eine Idee ?


Kannst du eine Funktion für Exponenten finden?
Damit blieben die Ausdrücke handlicher.


Gruß Jogi

richy
11.12.08, 17:40
Hi Jogi

Was meinst du mit Funktion fuer Exponenten ?
Was ich tun kann ist natuerlich die modifizierte Fib Zahlen zu verwenden.
Die ohne den starken Wachstumsterm A.
Einige Ausdruecke waren da ja sogar von -00-00 konvergent.

Den Betrag von fib(x) zu verwenden klappt momentan nicht.

Aber die komplexen Amplituden sind auch nicht das was ich mir vorstelle.
Ich muss das mit den Symetrieeigenschaften noch genauer untersuchen.
Alles in gerade und ungerade Anteile zerlegen.

ciao

Jogi
11.12.08, 17:52
Hi Jogi

Was meinst du mit Funktion fuer Exponenten ?


Um extrem große Zahlen darzustellen bedient man sich doch der Exponentialschreibweise.

10^2 , 10^3 ..... 10^482...

Wenn es gelingt, für die Exponentenwerte eine Funktion zu finden, lassen sich doch extrem große Zahlen besser handlen, oder?

Na ja, ist vielleicht nicht das was du suchst, war nur so 'ne Idee.:o


Gruß Jogi

richy
12.12.08, 01:37
Hi Jogi
Ich hab schon dran gedacht das ganze zu logarithmieren.
10^400 ist gar nicht so abwegig.
Wenn ich bis x=10 integriere und nehme 1 , 2, 3 ... 10 fache des Arguments als (Oberwellen) bin ich schon bei 10^44.
Auch aus anderen Gruenden waere mir k+x statt k*x auch lieber. Also veschobene Fib Folgen.

Ich muss das ganze nochmal gruendlich ueberlegen.
Ich erhalte wie bei der sinus cosinus Reihenapproximation (exp(I*k*x)) komplexe Koeffiziente a[i]. Auch c[i] genannt.
Verwndet man cos(x) + i*sin(x) im orthogonalen Intervall 0..Pi, so approximiert cos(x) den geraden Anteil und i*sin(x) i*den ungeraden Anteil.
Ich benutze aber f(x)*(cos(x) + i*sin(x)). Da muesste ich erst den ungeraden und geraden Anteil ermitteln. Muss ich das uebehaupt ?
Was aber auch kein Problem waere :
g(x)_gerade = (g(x)+g(-x))/2
g(x)_ungerade = (f(x)-f(-x))/2

Aber die Funktion f(x)*(cos(x) + i*sin(x)) ueber die ich integriere ist sicherlich nicht orthogonal.
Das will ich zunaechst nochmal pruefen.
Mit dem bisherigen Programm auch kein Prob.

ciao

Jogi
12.12.08, 08:24
Hi richy.

Ähem, alles klar...
du wirst schon wissen was du tust.

Denkst du aber auch noch an meine Grav.-Wellen?
Oder hast du die PN noch gar nicht gesehen?


Gruß Jogi

richy
12.12.08, 15:20
Hi Jogi
Doch hab ich gelesen. Aber ich koennte dir da auch nur die entsprechenden Seiten eines pdf's zu Heim zeigen.Meines Wissens gibt es bei Heim auch verschiedene Formen von Gravitationsfeldern. Und es gibt auch ein G-Feld mit einer Ausbreitungsgechwindigkeit groesser Co. Und so wie es aussieht haben Gravitonen nach Heim eine Ruhemasse. Wenn auch eine geringe.
Wobei dies ncht auf einer offiziellen Berechnung beruht.
Ich antworte dir noch, bin aber momentan an der Gauss Approximation dran und hab da einen Erfolg.
ciao

richy
12.12.08, 16:13
Sodele
Die Fib-Reihen Approximation funktioniert. Und zwar in allen Varianten.
Zur Erinnerung nochmals die Loesung der Fib DZGL, die die Fibonacci Zahlen geschlossen darstellt :
http://home.arcor.de/richardon/2008/fib/fibabb1.gif

Der Term A laesst sich ueber C0=1/2(sqrt(5)+1) C1=-1 kompensieren.
Dies habe ich modifizierte Fib Folge genannt. Fib_mod
Es laesst sich aber auch mit der gewoehnlichen Fib Folge approximieren.
Allerdings ist die Rechenzeit dann hoeher.

Nochmals einige wichtige Punkte :

- Die Fibfolgen fib(k*x) sind nicht orthogonal
- Die original Fibfolgen stellen monoton wachsende Funktionen dar
- Die modifizierten Fibfolgen stellen monoton fallende Funktionen dar
- Alle Funktionen sind fuer unganzzahlige Werte komplex.
Wie es auch diese Grafik zeigt :
http://home.arcor.de/richardon/2008/fib/fibabb2.gif

Der dabei auftretende Term exp(j*k*t) stellt zwar die orthogonale Basis der Fouriertransformation dar, aber macht wenig Sinn fuer die Analyse reeler Zahlenfolgen.

Dies ist ueber folgende zwei Schritte moeglich :

1) Formulieren einer nichtkomplexwertigen Fibfunktion Fib_re, die fuer ganzzahlige Werte mit der original Fib Funktion Fib uebereinstimmt.
2) Ueber fib(k*x) koennen nur monoton wachsende Funktionen approximiert werden.
Trick um diese Einschraenkung zu beseitigen :
Man verwendet als Synthesefunktion
a[(k-M)]*fib((k-M)*x)+....a[-1]*fib((k-1)*x)+a[0]*fib(x))+a[1]*f((k+1)*x)...+a[(k+M)]*fib((k+M)*x)

Ueber diese Summe koennen nun beliebige Funktionen einer Fib Reihenanalyse in einem Intervall [alpha..beta] unterzogen werden.
Guenstige Grenzen sind zum Beispiel [-5..5] oder [0..10] bei einer Ordnung von 11. (Dazu ist eine 11*11 Matrix zu loesen)
Fuer noch hoehere Ordnungenmuss man die Rechengenauigkeit auf 20-30 Digits erhoehen.

Fuer exponential steigende fallende Funktionen gelingt die Analyse besonders gut. Fuer Periodische Funktionen natuerlich am schlechtesten.

Varianten:
a) Vermeiden eines Imaginaerteiles durch Realteilbildung
b) Vermeiden eines Imaginaerteiles durch Betragsbildung

Ueber beide Varianten laesst sich eine exakte Funktion der Fib Zahlenangeben.

Hier zunaechst ein Beispiel-Ergebnis

Funktion und Approximation :
http://home.arcor.de/richardon/2008/fib/analysetanh1.gif

Fib_Spektrum
http://home.arcor.de/richardon/2008/fib/analysetanh2.gif

Funktion und Approximation :
http://home.arcor.de/richardon/2008/fib/analysesin1.gif

Fib_Spektrum
http://home.arcor.de/richardon/2008/fib/analysesin2.gif

Damit koennte man schon versuchen die Fib Wellen in Aktienkursen zu detektieren.
Ich moechte aber zunaechst noch die Varianten weiter untersuchen
Das Ganze ich im Grunde eine exp(k*x) Approximation.
Der Sinus oben ist aus reellen Exponentialfolgen zusammengesetzt.
Auch ohne den Fib Aspekt interessant.

richy
13.12.08, 00:48
Zwischenergebnis :

Die Formel von Binet stellt die Fibonaccifunktion dar :
http://upload.wikimedia.org/math/7/9/2/792daf83adc0214d84541b6a3df9824e.png
Fuer nichtganzzahlige Argumente wird die Funktion komplex.
Term A,B,C zeigen dies fuer beliebige Anfangswerte.

Eine relle Funktion erhaelt man ueber
Realteilbildung : fib=A+B
Betragsbildung : fib=sqrt( (A+B)^2 + C^2)

Fuer ganzzahlige Werte erhaelt man ebenfalls exakt die Fibonaccizahlen.
Bei der Betragsbildung jedoch nur deren Betrag.

http://home.arcor.de/richardon/2008/fib/reimabs1.gif

re_teill:=(2/5*5^(1/2)*exp(x*ln(2/(5^(1/2)+1)))*cos(x*Pi)/(5^(1/2)+1)-2/5*5^(1/2)/(-5^(1/2)+1)*(-2/(-5^(1/2)+1))^x);

im_teil:=2/5*5^(1/2)*exp(x*ln(2/(5^(1/2)+1)))*sin(x*Pi)/(5^(1/2)+1);

abs_teil:=sqrt(re_teil^2+im_teil^2);

http://home.arcor.de/richardon/2008/fib/reimabs2.gif

Der Realteil ist formal einfacher, stellt im negativen Bereich jedoch eine exponentiell gedaempfte harmonische Schwingung dar. Dafuer stimmt das Vorzeichen.
Welche Funktion geeigneter ist moechte ich im naechsten Thread untersuchen.

richy
15.12.08, 20:58
Problematik :
**********
a) Die Fib Zahlen oszillieren fuer negative Argumente zwischen positiven und negativen Werten.
Benutzt man den Betrag der Fib Zahlen, so geht diese Eigenschaft verloren.

b) Verwendet man die komplette Fib Funktion A+B+C, so erhaelt man sehr unhandliche Integrale.

c) Bildet man lediglich den Realteil der Fib-Funktion, so kann das Residuum Null betragen und Maple dieses teilweise numerisch nicht mehr auswerten.

Loesung fuer c)
Da eine analytische Loesung der Integrale keinen Vorteil bringt (nichtorthogonale Funktionalbasis) und die numerische Loesung der Maple Routinen teilweise fehlerhaft ist, benutzt man am besten eine eigene numerische Integrationsroutine.
Analytische Signale tatstet man dazu einfach ab.

Morgen mehr dazu :-)

richy
28.12.08, 23:02
Hi
Vielleicht noch als Zwischenergebnis :
Zur Verarbeitung von Messdaten als Analysefunktion muss auf jeden Fall einen numerische Integration verwendet werden.
Dazu muss man die Synthesefunktion geeignet Skalieren.
Dieses Problem konnte ich bisher nicht befriedegend loesen.
Auch sind die Rechenzeiten recht erheblich.

Besonders gespannt war ich auf das Verhalten einer nichtlinearen Approximation. Bei der Methode der kleinsten Quadrate kann die Synthesefunktionvon beliebigen Parametern abhaengen.
So habe ich z.B. auch eine Funktion der Form
a[(k-M)]*fib((k-M)*x/a0) .... verwendet.
Wobei der Parameter a0 ebenfalls ueber Gauss approximiert wird.
Eine numerische Integration ist in dem Fall nicht mehr moeglich.
Und die Ergebnisse waren leider enttaeschend.
Schade :-)