Verfasst am: 14.05.2019, 09:00
Titel: Variablen lösen durch Iteration einer Matrix
Hallo zusammen,
ich hoffe sehr, dass mir jemand helfen kann.
Meine Messdaten liegen in Matrizen vor. Jetzt möchte ich meine Eingangsparameter mittels einer Funktion korrelieren, sodass die Variablen die Korrelation das Ergebnis mittels Fehlerquadratminimierung bestmöglich lösen.
Zu findende Variablen: a b und c
Vektoren: G, RG, L und RL (jeweils 133x1 double)
Korrelation/Zielfunktion: a*(L(:)./G(:)).^(b+c).*RG(:).^b.*RL(:).^c (Zusammenhang kommt aus einer Dimensionsanalyse meines physikalischen Problems)
Idee war jetzt, dass meine Nebenbedingung minimal werden soll: sum((Ergebnis(:)-ErgebnisNeu(:)).^2)
Code:
syms a b c
[sola, solb, solc] = solve([ErgebnisNeu(:) == a*(L(:)./G(:)).^(b+c).*RG(:).^b.*RL(:).^c, 100>=sum((Ergebnis(:)-ErgebnisNeu(:)).^2)],[a,b,c])
Eregbnis ist für alle drei sola, solb und auch solc "Empty sym: 0-by-1"
Ich habe mal Zahlenwerte getestet und meine Grenze noch weiter rauf gesetzt, aber irgendwie scheint mein Weg die grunsätzlich falsche Lösungsstrategie meines Problems zu sein.
solve ist nicht dafür gedacht.
Mein Tipp wäre
lsqcurvefit
.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hi Harald,
danke für Deine schnelle Antwort.
Hatte ich mir auch schon einmal angeschaut, wenn ich es aber richtig verstanden haben sollte, dann ist Vorraussetzung ein funktioneller direkter Zusammenhang (z.B. ein Polynom oder so) zwischen den Eingangsgrößen?
Meine Messwerte liegen im Raum und bestmöglich kommt eine Fläche als Ergebnis heraus.
Kannst du aus Deiner Erfahrung abschätzen, ob das damit möglich ist? Dann versuche ich mich nochmal mich einzufuchsen.
nach meinem Verständnis ist das der funktionale Zusammenhang:
a*(L(:)./G(:)).^(b+c).*RG(:).^b.*RL(:).^c
Statt a bis c müsstest du x(1) bis x(3) verwenden. Dann kannst du dich an dem Beispiel "Simple Exponential Fit" aus der Doku orientieren, nur dass es da halt zwei Parameter sind und bei dir drei.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Hi Harald,
also das klappt formal irgendwie schon so ein bisschen, aber rein physikalisch dann leider doch nicht.
Da xdata(:,3) und xdata(:,4) genau genommen aus xdata(:,1) und xdata(2) berechnet werden (mit vielen pyhsikalischen Konstanten, zusammengefasst in konstante1 und konstante2), habe ich das mal in der Gleichung ersetzt, sodass ich nur noch eine Matrix von 133x2 double reinschicke.
Egal welche Startwerte ich hier nehme, Matlab bricht sofort an. Angeblich ist jeder Startwert schon das "Ergebnis": Initial point is a local minimum.
Das kann aber nicht sein, da meine Messdaten eine ansteigende Fläche (kartesisches Koordinatensystem) darstellen.
wenn ich das richtig sehe, lässt sich aus der Gleichung einiges rauskürzen?
Konkrete Beispiele für xdata und ydata wären hilfreich, um das Problem nachvollziehen zu können.
Wenn die Daten eine Fläche darstellen, sollte man dann nicht eher
z = a * x + b * y + c
versuchen?
Was ansteigend im Zusammenhang mit der Fläche bedeutet, ist mir nicht klar.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
erstmal Danke, dass Du mir überhaupt noch zuhörst.
Anbei eine Abbildung meiner Messdaten. Das sind eigentlich Punkte, aber ich hab mit surf mal ne Fläche raus gebastelt, einfach zur optischen Veranschaulichung. Da ist keine Korrelation/Fit dahinter. Achsen und Achsenskala dürfte für das Problem unerheblich sein.
Die Korrelation, die ich annehme, mit der ich das Problem beschreibe möchte, die kommt aus einer Dimensionsanalyse, also an der kann ich nichts schubsen, die Fläche (siehe Abbildung) muss sich mit der Funktion bestimmen lassen. Also ich habe mehrerer solcher Flächen und ohne die Dimensionsanalyse kann ich die Abhängigkeit der einzelnen physikalischen/dimensionsloser Parameter nicht miteinander vergleichen.
Ich hoffe ich habe es so anschaulicher erklärt =)
Grüße, AL
Achsen und Achsenskala dürfte für das Problem unerheblich sein.
Jein. Welche Startwerte funktionieren, wird davon durchaus beeinflusst.
Vor allem würde ich gerne das konkrete Problem reproduzieren. Dafür brauche ich aber auch konkrete Daten. Wenn die eigentlichen Daten vertraulich sind, lassen sie sich in der Regel so reduzieren und verfälschen, dass man den Effekt trotzdem sieht.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
ok, konkrete: Ich habe gemessen die Eingangsgeschwindigkeiten von Gas und Flüssigkeit vor einem Rohr und den resultierenden Druckverlust pro Rohrlänge:
u_G,ein (m/s) , u_L,ein (m/s), und DP/DL (Pa/m).
Größenordnung: 0-2 m/s für die Geschwindigkeiten und der Druckverlust liegt bei 0-10^5 Pa/m.
Meine Funktion die das Problem beschreiben soll ist mittels Dimensionsanalyse bestimmt: Korrelation hat eine Abhängigkeit von den Reynolds-Zahlen, der Weber-Zahl und eben der beiden Eingangsgeschwindigkeiten.
Also in der Art: DP/DL = x1*(uL/uG)^(x2)*Re_L^(x2+x3)*(Re_G/We_L)^(x3) (Beispiel)
Umrechnen lassen sich Reynolds-Zahl und Weber-Zahl auf die beiden Geschwindigkeiten mittels Stoffwerte und Rohrgeometrie.
Ich möchte die Konstanten aus den dimensionslosen Kennzahlen nicht in die anderen Variablen (x1,x2,x3) hinein ziehen, da ich sonst die Abhängigkeit der Kennzahlen verfälsche. Am Ende möchte ich die Variablen für verschiedenen Flächen (DP/DL und dessen jeweilige Abhängigkeit von Reynolds (Verhältnis von Trägheits- zu Zähigkeitskräften) oder Weber (Verhältnis Trägheits- zu Oberflächenkräfte)) miteinander vergleichen.
bitte wirklich ganz konkrete Daten, also eine Matrix xdata mit zwei Spalten und ein Vektor ydata mit einer Spalte.
Die Informationen sind zwar interessant, helfen aber nicht dabei, das Problem zu reproduzieren.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
nun bitte noch Werte für die Konstanten. Wenn ich beide auf 1 setze, bekomme ich ein lokales Minimum. Das kann aber natürlich von den Konstanten abhängen.
Kannst du denn sinnvollere Startwerte angeben als 1 bis 3?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Heyho,
die konstanten sind zwar sehr klein, aber leider relevant ^^
konstante1: 6.5830e-05
konstante2: 9.3482e-04
Mit sinnvollen Startwerten tue ich mich schwer, orientiere ich mich an der Literatur würde mein x1 sehr groß ausfallen und x2 und x3 eher kleiner, wenn ich das versuche, löst er es mit:
Jetzt sagt Matlab: Local minimum possible.
Heißt doch, dass er es auch nicht wirklich lösen kann? Bzw dass er das Minimum nicht finden konnte.
Kannn ich mir denn irgendwie anschauen welche "Genauigkeit" diese Korrelation hat? Und welche Genauigkeit die einzelnen Variablen haben? Ähnlich der Funktion RGP von Excel?
Heißt doch, dass er es auch nicht wirklich lösen kann? Bzw dass er das Minimum nicht finden konnte.
Im Gegenteil. Es handelt sich (möglicherweise / wahrscheinlich) um ein lokales Minimum, und das ist das beste, was ein Löser wie lsqcurvefit liefern kann.
Das immer noch sehr hohe n deutet darauf hin, dass dieses lokale Minimum eventuell nicht das globale ist. Bessere Startwerte könnten helfen.
Für Konfidenzinterfalle könntest du fitnlm statt lsqcurvefit und dann coefCI verwenden.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.