WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Variablen lösen durch Iteration einer Matrix

 

Anne-Laura
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 15.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2019, 09:00     Titel: Variablen lösen durch Iteration einer Matrix
  Antworten mit Zitat      
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)

Gemessenes Ergebnis: Ergebnis (133x1 double)
Ergebnis der Korrelation: ErgebnisNeu (133x1 double)

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.

Vielen Dank für Eure Hilfe!
Grüße, AL
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2019, 11:43     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anne-Laura
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 15.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2019, 11:47     Titel:
  Antworten mit Zitat      
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.

Danke Dir,
AL
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2019, 12:07     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anne-Laura
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 15.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2019, 13:09     Titel:
  Antworten mit Zitat      
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.

Code:
fun=@(x,xdata)x(1)*(xdata(:,1)./xdata(:,2)).^(x(2)+x(3)).*(xdata(:,2)*konstante2).^x(2).*(xdata(:,1)*konstante1).^x(3);
x0=[1,2,3];
x= lsqcurvefit(fun,x0,xdata,ydata)


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.

Confused AL
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2019, 13:25     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anne-Laura
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 15.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2019, 13:55     Titel:
  Antworten mit Zitat      
Hi,

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

xdata ydata Beispiel.jpg
 Beschreibung:
Messdaten Beispiel

Download
 Dateiname:  xdata ydata Beispiel.jpg
 Dateigröße:  97.68 KB
 Heruntergeladen:  409 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2019, 14:52     Titel:
  Antworten mit Zitat      
Hallo,

mir hilft das offen gesagt nicht weiter.

Zitat:
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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anne-Laura
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 15.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2019, 15:11     Titel:
  Antworten mit Zitat      
Hi Harald,

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.

AL =)
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2019, 15:20     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anne-Laura
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 15.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2019, 15:29     Titel:
  Antworten mit Zitat      
Hi Harald,

alles klar, sorry für meine lange Leitung.
Anbei die xdata Matrix und der ydata Vektor.

AL =)

xdata.matlab.mat
 Beschreibung:

Download
 Dateiname:  xdata.matlab.mat
 Dateigröße:  2.02 KB
 Heruntergeladen:  386 mal
ydata.matlab.mat
 Beschreibung:

Download
 Dateiname:  ydata.matlab.mat
 Dateigröße:  1.22 KB
 Heruntergeladen:  422 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 14.05.2019, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anne-Laura
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 15.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.05.2019, 20:43     Titel:
  Antworten mit Zitat      
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:
Code:
x0 =[14920253215.90529, 1.82882, -0.25944];


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?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.495
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.05.2019, 08:32     Titel:
  Antworten mit Zitat      
Hallo,

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

Der Versuch guten Ratens für den Startwert:
Code:
x0=[1,1,1];
x0(1) = mean(ydata ./ fun(x0,xdata))


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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Anne-Laura
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 15.01.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.05.2019, 09:44     Titel:
  Antworten mit Zitat      
Juten Morgen,

vielen Dank, dass klappt ganz herausragend!

Vielen Dank für Deine Hilfe,
AL =)
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

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.