Autor Beitrag
Boldar
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Do 27.11.14 15:00 
Das folgende ist mal etwas für die Mathematiker unter euch.
Ich habe eine Formel der Form \sum a_i x_i = y, also eine Lineare Gleichung. Dazu dann (viele) Wertereihen für x_i und y.
Das ganze bildet damit also ein überbestimmtes LGS.
Ermitteln will ich dann die Koeffizienten. Es sind wohl so etwa 20 Koeffizienten und dazu eine Tabelle mit mehreren tausend oder sogar zehntausend Werten.
Dazu habe ich auch dieses Paper gelesen.
Das Problem ist, dass y auch von mir unbekannten Parametern abhängen kann. Ich habe also noch zusätzliche a_{unbekan nt}*x_{unbekan nt} Terme, gehe aber davon aus dass die im Allgemeinem hinreichend klein gegenüber dem Rest sind. Ein weiteres problem ist, dass ich nicht komplett ausschließen kann, ob es nicht auch Beiträge höherer Ordnung gibt. Eventuell ist meine GLeichung also auch so:
\sum a_i x_i + b_i x_i^2 = y. Oder aber es gibt Grenzen für die Parameter x, d.h. wenn x größer einem bestimmtem Wert, wird angenommen x habe diesen Wert.
Ich suche jetzt nach einem Ansatz. Wie geht man sowas an? Welche Tools benutzt man für sowas? Mathematica? Wenn ja, kennt jemand da weitergehende Infos zu speziell diesem Thema (Lösungen von überbestimmten LGS bzw. Ermitteln der besten Approximation) ?
lg Boldar
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Do 27.11.14 17:00 
Hallo,

ist das nicht nur Ausgleichs-gerade/Polynom.Aber mit 20 Koeffizienten? Höhergradige Polynome neigen zum schwingen.Treffen die Werte aber dazwischen ist alles möglich.
Vielleicht steht es hier besser erklärt.
www.arndt-bruenner.d...the/scripts/regr.htm
www.arndt-bruenner.d...s/regr.htm#wasisndas

Wären splines nicht auch eine Lösung?

Gruß Horst
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 433
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 27.11.14 17:48 
Eventuell sogar akima-splines?
www.ads.tuwien.ac.at...a/mmgdv/k1___011.htm
Horst_H
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 1654
Erhaltene Danke: 244

WIN10,PuppyLinux
FreePascal,Lazarus
BeitragVerfasst: Do 27.11.14 18:35 
Hallo,

mit splines ist ja Kokolores, die gehen ja immer durch die Punkte.
user profile iconMathematiker ist da sicher ganz fit

Gruß Horst
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 433
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Do 27.11.14 21:39 
Die Kritik an Splines stimmt.
Mir kamen da noch überbestimmte Gleichungssysteme in den Sinn,
ich bin mathematisch nicht so sehr bewandert, aber vielleicht hilft ja schon der erste Eintrag
den Google bei "überbestimmte gleichungssysteme" findet (ein PDF-Dokument) -
kleinste Fehlerquadrate.
Boldar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Fr 28.11.14 01:06 
Ich denke mal du meinst das oben verlinkte Paper der Uni Heidelberg. Das Problem dabei ist aber meiner Meinung nach, dass ich eben "unbekannte Parameter" habe. Wenn ich nun auf die Fehlerquadrate optimiere, bringt das dann nicht Probleme?
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 433
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Fr 28.11.14 12:22 
Entschuldigung, ja das war das Paper. Vielleicht sollte ich vor dem Schreiben mehr lesen.

Nun habe ich glaube ich auch das Problem verstanden (bitte korrigieren wenn falsch)

Vereinfacht ausgedrückt möchtest Du für gegebene Meßreihen eine minimale Anzahl Koeffizienten herausfinden, welche die als abhängig angesehene Größe mittels eines LGS möglichst genau beschreibt, wobei du bestimmte Größen bereits als unabhängige einordnest und nun wissen willst, welche weiteren evtl. hinzugenommen werden müßten.
(andererseits könnte es doch auch sein, daß von Dir im Vorfeld als "bekannte unabhängige" festgelegte Werte gar keinen Einfluß auf den abhängigen Wert haben?)

Das führt mich dazu, daß ich Dir in dieser Hinsicht nicht weiterhelfen kann, da meine Statistikkenntnisse einfach zu gering sind.

Mein Laien-Ansatz wäre folgender:
Ich führe für das überbestimmte LGS eine Art "Qualitätsmerkmal" ein.
Dann erweitere ich das LGS um einen weiteren Koeffizienten (nach der Methode: Wenn ich einen weiteren Freiheitsgrad zulasse, erklärt das so gewonnene LGS die Meßwerte besser?) und bestimme wieder das "Qualitätsmerkmal".
Wenn sich dieses signifikant verbessert, kann ich davon ausgehen, daß wirklich ein weiterer noch unbekannter Faktor maßgeblich mitwirkt.
Dies kann ich so lange wiederholen, bis sich das "Qualitätsmerkmal" nicht mehr nennenswert verbessert oder eine vorher festgelegte maximale Koeffizientenzahl auftritt.

So ein Verfahren gibt es bestimmt in der Statistik,
aber das übersteigt dann meine Kenntnisse :(

Noch schwieriger wird es sicher, wenn Du höherwertige Abhängigkeiten oder gar brutale Nichtlinearitäten wie max,min betrachten möchtest.

Tut mir leid, daß ich Dir hier nicht weiterhelfen kann.
Boldar Threadstarter
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 1555
Erhaltene Danke: 70

Win7 Enterprise 64bit, Win XP SP2
Turbo Delphi
BeitragVerfasst: Fr 28.11.14 12:58 
Ich muss das ganze glaube ich mal anders beschreiben.
Angenommen ich habe eine Blackbox wo ich 20 (zufällige bzw. nicht von mir beeinflussbare, aber mir bekannte) Zahlen x_1, x_2, x_3 .... x_20 erzeugen kann. Diese verrechnet das dann irgendwie intern und gibt mir eine Zahl y als Ausgabe.
Angenommen ich hätte das jetzt mehrere tausend Mal gemacht. Dann habe ich also mehrere tausend Werte-Reihen mit
x_1, x_2, x_3 .... x_20 und y
und möchte jetzt Wissen wie die Blackbox arbeitet. Ich habe also eine vollkommen unbekannte Funktion

F(x_1, x_2, x_3, ... x_20) -> y
.
Diese möchte ich jetzt annähern.
Ich gehe davon aus dass die meisten Parameter linear eingehen, also

\sum a_i x_i = y

Manche Parameter haben aber vielleicht auch Anteile höherer Ordnung, also:
\sum a_i x_i + b_i x_i^2 + c_i x_i^3 ... = y (Das entspäche ja auch der Entwicklung der Funktion in eine Potenzreihe)
Wobei ich eben davon ausgehe dass b und c meistens null sind.
Ich möchte jetzt einen möglichst guten Wert für die Koeffizienten ermitteln, womit ich dann in Zukunft den Wert von y auch für beliebige x_1, x_2, x_3 .... x_20 vorhersagen kann.
Mir ist natürlich klar dass das mit so wenig Infos über F schwierig ist, und wenn überhaupt nur möglich durch die hohe Anzahl an Beispieldaten.
Gammatester
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 328
Erhaltene Danke: 101



BeitragVerfasst: Fr 28.11.14 13:51 
Sieht aus wie de.wikipedia.org/wik...#Multiple_Regression. Als Versuch kannst Du ja mal die Formel
ausblenden Quelltext
1:
a = (X^T * X)^(-1) * X^T *Y					

aus dem Abschnitt Schätzung der Regressionskoeffizienten testen, obwohl das in der Regel numerisch nicht besonders stabil ist. Ansonsten hat zB DMath 0.86 Units und eine Doku: Ch. 15 "Multilinear regression and principal component analysis", das gibt's hier: www.unilim.fr/pages_...rd/tpmath/tpmath.htm
Xion
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
EE-Maler
Beiträge: 1952
Erhaltene Danke: 128

Windows XP
Delphi (2005, SmartInspect), SQL, Lua, Java (Eclipse), C++ (Visual Studio 2010, Qt Creator), Python (Blender), Prolog (SWIProlog), Haskell (ghci)
BeitragVerfasst: Fr 28.11.14 18:05 
Ohne besondere Mathe-Tricks könnte man noch die Allzweckwaffe Neuronales Netz einsetzen. Grundprinzip ist dabei die Positionierung und Streckung von Kurven (z.B. Gauß-) im Raum, so dass sie die beobachteten Werte erklären. Das macht aber nur Sinn, wenn es a) nicht zeitkritisch ist und b) die Vorhersagen nicht zwingend eine gewissen Güte haben müssen. Meistens macht es also keinen Sinn :mrgreen:
Mit "mehreren Tausend" Testdaten für 20 Dimensionen könnte es aber ohnehin schwierig werden, denn das sind ziemlich wenige, wenn man sich mal den Definitionsbereich dieser Funktion anschaut. :!: Ich habe mal für eine Uni-Aufgabe ein Neuronales Netz programmiert, allerdings für eine zweidimensionale Funktion mit 8000 Testdatensätze...und das Ergebnis war höchstens "größtenteils ok" nach mehreren Tagen Training. Geht aber sicher auch besser ;)

Und dann könnte man es ja auch noch ganz banal durch Interpolation probieren. Alle Punkte speichern und wenn du die Funktion vorhersagen willst, dann guckst du dir die nähsten beobachteten Werte an und gewichtest deren Ausgabe. Sicherlich die einfachste und vielleicht auch beste Variante bei so wenig Testdaten.

PS: Beide Verfahren geben dir aber KEINEN Einblick in die Struktur der Funktion. Also einen linearen Zusammenhang zwischen x3 und y ist so etwa nicht zu ermitteln. Hierfür gibt es aber statistische Mittel (müsste ich konkret erstmal nachschlagen).

_________________
a broken heart is like a broken window - it'll never heal
In einem gut regierten Land ist Armut eine Schande, in einem schlecht regierten Reichtum. (Konfuzius)
mandras
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 433
Erhaltene Danke: 107

Win 10
Delphi 6 Prof, Delphi 10.4 Prof
BeitragVerfasst: Sa 29.11.14 00:16 
NN sehe ich hier auch nicht zielführend.

Wenn alles gut läuft, schaffen sie eine Optimierungsaufgabe zu lösen,
verraten einem aber leider nicht wie sie dies geschaff haben.

Dein Argument betr. Stabilität der Lösungen ist meiner Meinung nach auch wichtig.
jfheins
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 918
Erhaltene Danke: 158

Win 10
VS 2013, VS2015
BeitragVerfasst: Mo 01.12.14 12:39 
Ich glaube, tausende Werte sind da immer noch ziemlich wenig. Ein vollfaktorieller Versuchsplan mit jeweils 2 Ausprägungen für x (würde also gerade für eine Gerade reichen) hat immerhin schon 2^20 = 1 Million Punkte. Bei drei Ausprägungen wären es dann 3^20 = 3 Milliarden Punkte. Das ist natürlich viel zu viel, aber selbst ein CCD Versuchsplan hat 1+2^k+2k Punkte, mit k=20 sind das auch wieder circa 1 Mio.

Jetzt stellt sich natürlich die Frage, ob du die Werte für die x vorgeben kannst, oder nur beobachten. Wenn letzteres, kannst du noch falsche Korrelationen hinein bekommen, weil schon die Eingangsparameter korrelieren können.

Ganz allgemein würde ich eine Toolbox für statistische Versuchsplanung hernehmen (R, MATLAB, SPSS, ...) und da deine Versuchspunkte eintragen. Es gibt dann verschiedene Möglichkeiten, ein Modell zu generieren. Zum Beispiel ausgehend von dem Teil mit vollen Wechselwirkungen immer eine insignifikante streichen, bis ein "noch akzeptables" Modell übrig bleibt.

Das alles geht aber eigentlich davon aus, dass es gemsichte Terme gibt. Also a*x_1*x_2 weil das eigentlich immer der Fall ist. Bist du sicher, dass das bei dir nicht zutrifft?