|
|
least square Verfahren - Variable einer Funktion bestimmen |
|
mishka84 |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 30.10.13
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.10.2013, 16:39
Titel: least square Verfahren - Variable einer Funktion bestimmen
|
|
|
|
|
Hallo Leute,
stehe vor folgendem Problem: habe die Funktion für einen Temperaturverlauf
T(x)=T(O)+((T(inf)-T(0)*L*x)/(1-(1-L)*x))ausserdem hab ich durch Experimente
12 einzelne T in abhängigkeit von x bestimmt
Gefragt ist nun folgendes- ich soll die zweite Variable L so bestimmen, das der Kurvenverlauf T(x) so nah wie möglich an meine experimentell bestimmten Punkte rankommt d.h. die Summe der quadrate der Abweichungen soll minimiert werden. Ich weiss des hört sich jetzt kompliziert an....falls ihr etwas net versteht versuch ichs anders zu erklären......
1 Frage: wie bringe ich Ihn überhaupt dazu die Funktion für ein bestimmtes L zu plotten / bis jetzt habe ich einen Vektor eingegeben mit den Werten für x / Wenn ich dann aber die Funktion eingeben will y=T(0)+.......dann nimmt er nicht die einzelnen Werte für x aus dem Vektor sondern nur einen(irgendwie denk ich er nimmt den Betrag) und rechnet dann mit diesem Betrag nur ein T aus, weshalb der Plot mir nur Punkte mir fixem y-Wert (also mit fixem T) liefert....
hoffe mir kann einer von euch helfen...vielen dank
|
|
|
|
|
mishka84 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 30.10.13
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 30.10.2013, 18:03
Titel:
|
|
hallo nochmal...bin grad am stöbern...ich glaube es läuft bei meinem Problem auf das lsqcurvefit hinaus.......habe aus Messungen meine xData (Aushärtegrad) und mein yData (Glasübergangstemperatur)....
in der Formel kommt die Variable L vor welche optimiert werden soll, sodass die durch die Gleichung beschriebene Kurve möglichst gering von meinen Messwerten abweicht.....hab bisher folgendes geschrieben
Lambda = 0.1;
>> x(1)=Lambda;
>> F= @(x,xData) Tgo+(((Tginf-Tgo)*x(1)*xData)/(1-(1-x(1))*xData));
>> [xbest,resnorm]=lsqcurvefit(F,x0,xData,yData);
Tgo;Tginf sind konstanten
xData (Aushärtegrad); yData (Glasübergangstemperatur) sind Zeilenvektoren
mit 12 Zeilen
Lambda soll so bestimmt werden das die Abweichung von den Messdaten möglichst gering ist......
wenn ich des so eingebe kommt folgender Fehler
Error using lsqcurvefit (line 248)
Function value and YDATA sizes are not equal.
sprich die Größe stimmen net überein......was tun??
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 30.10.2013, 22:11
Titel:
|
|
Hallo,
gibt dir
denn etwas vernünftiges zurück?
Wenn nicht, musst du möglicherweise komponentenweise Operationen wie ./ statt Operationen wie / nutzen.
Grüße,
Harald
|
|
|
mishka84 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 30.10.13
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.11.2013, 00:29
Titel:
|
|
|
|
|
hallo harald......danke das du dich der sache hier annimmst.....
will dir nochmal kurz sagen was ich vom start von matlab an mache....
ich definiere die konstanten ( Tgo Tginf Lambda)
danach definiere ich die vektoren ( xData sind der Aushärtegrad / yData sind die Glasübergangstemperaturen (Zeilenvektoren mit jeweils 12 Zeilen) )
Danach tue ich analog zu einem hier schon bearbeiteten fall folgendes....
ich definiere x0 mit einem bestimmten Wert ( Wert für Lamba )
Danach lege ich eine weitere variable an x(1) = Lambda
anschließend gebe ich die funktion ein
>> F= @(x,xData) Tgo+(((Tginf-Tgo)*x(1)*xData)./(1-(1-x(1))*xData))
und als nächstes
[xbest,resnorm]=lsqcurvefit(F,x0,xData,yData)
hier nochmal der komplette code
>> clear all
>> Tginf=127.36;
>> Tgo=-44.33;
>> xData=[0.184 0.247 0.358 0.445 0.502 0.588 0.599 0.617 0.755 0.757 0.851 0.883]';
>> yData=[-31.45 -27.21 -16.42 -3.45 -9.74 21.26 11.91 9.3 46.36 32.92 76.45 57.88]';
>> Lambda = 0.1;
>> x0=[0.1;]
x0 =
0.1000
>> x(1)=Lambda;
>> F= @(x,xData) Tgo+(((Tginf-Tgo)*x(1)*xData)./(1-(1-x(1))*xData));
>> [xbest,resnorm]=lsqcurvefit(F,x0,xData,yData);
Local minimum possible.
lsqcurvefit stopped because the final change in the sum of squares relative to
its initial value is less than the default value of the function tolerance.
<stopping criteria details>
ich glaube nur durch den punkt mit dem ich komponentenweise operationen durchführe gibt mir die funktion jetzt nen passablen wert raus.....
es erscheinen zwei weitere variablen im workspace
xbest = 0.3163
resnorm = 819
is dies nun schon mein optimales Lambda /
was bedeutet der Wert für resnorm....is des die summe der quadratischen Abweichung???
und was will mir die fehlermeldung sagen???wenn ich unter stopping criteria gehe dann steht dort soviel wie.....optimierung wurde gestoppt weil die änderung der summe der abweichungen sich um weniger als 1e-06 ändert......
des heisst doch das des optimale Lambda gefunden wurde..
danke
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 01.11.2013, 00:39
Titel:
|
|
Hallo,
die Meldung ist keine Fehlermeldung, sondern eine Statusmeldung, die Erfolg signalisiert.
Du möchtest doch eine Kurve fitten, dann plotte doch die Kurve mal für diesen Parameter. Wenn das sehr schlecht ist, solltest du es mal mit anderen Startwerten versuchen.
Grüße,
Harald
|
|
|
mishka84 |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 30.10.13
|
|
|
|
Wohnort: München
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.11.2013, 11:16
Titel:
|
|
|
|
|
hallo nochmal harald........PERFECT!!!!!!!!!!!!!is super gelungen.....
jetzt habe ich noch paar fragen an dich und hoffe du kannst mich aufklären......versuche alles aus den doc files zu erlesen aber des english da macht mir ziemlich zu schaffen......da ich das vorgehen hier im forum nachgeschaut habe bleiben doch noch paar fagen zum vorgehen....ich schreib einfach mal was ich denke und hoffe du korrigierst mich falls nötig
1) mit der Zeile x0=[0.1;] definiere ich mir den Startwert von x / dieser ist beliebig und bildet mir den Startpunkt der optimierung
2) die Zeile >> x(1)=Lambda; mit dieser weise ich der variablen x(1) in meiner formel den Wert für lambda zu / Warum muss ich dies so machen / wenn ich in der formel statt x(1) aber Lambda einsetze dann optimiert er nicht sondern gibt mir für xbest den Wert von x0 wieder....
3) mit der Zeile F= @(x,xData) Tgo+(((Tginf-Tgo)*x(1)*xData)./(1-(1-x(1))*xData)); gebe ich matlab eine Funktion vor die er optimieren soll......die frage ist hierbei was bewirkt das @(x,xData).......komme an dieser Stelle gar nicht klar
4) mit der Zeile [xbest,resnorm]=lsqcurvefit(F,x0,xData,yData); sage ich matlab, es soll mir 2 Konstanten mit dem lsq-Verfahren ermitteln (xbest, resnorm)........is des soweit richtig.....hoffe du kannst mir bei den punkten die unklar sind helfen.......vielen dank
|
|
|
Harald |
Forum-Meister
|
|
Beiträge: 24.492
|
|
|
|
Anmeldedatum: 26.03.09
|
|
|
|
Wohnort: Nähe München
|
|
|
|
Version: ab 2017b
|
|
|
|
|
|
Verfasst am: 01.11.2013, 20:17
Titel:
|
|
Hallo,
1) Beliebig ist übertrieben. Da im Hintergrund ein Gradientenverfahren (Richtung des steilsten Abstiegs) läuft, besteht bei einem schlechten Startwert die Gefahr, dass die Lösung nicht das globale Minimum ist.
2) Du musst nicht x verwenden, aber es muss mit der Variablenliste zusammenpassen. Genauso könntest du schreiben:
F= @(lambda,xData) Tgo+(((Tginf-Tgo)*lambda*xData)./(1-(1-lambda)*xData));
3) Das ist ein anonymous function handle. Bitte in der Doku genauer nachlesen.
4) Ja, mit dem Aufruf holst du dir zwei Rückgabeargumente zurück. xbest ist der optimale Parameter(vektor), resnorm ein Gütemaß - siehe auch Doku.
Grüße,
Harald
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
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
| 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.
|
|