ich habe folgendes Problem: Ich habe Meßdaten für eine Differentiallgleichung augenommen und will anhand dieser Daten, die Parameter für die Differentiallgeichung bestimmen. Es handelt sich um eine Gleichung 1. Ordnung.
Code:
% Gleichung:
'2*A*DY1 = B*Y2-(C+2/15*(Y1-Y3))*(Y1-Y3)'
% zu bestimmende konstante Parameter: A B C % Bekannte Meßdaten (abhängig von der Zeit t): Y1(t) Y2(t) Y3(t) % Ableitung DY1=d(Y1)/dt
Die Werte von A, B und C möchte ich nun so ermitteln, dass die Parameter die Gleichung bestmöglich erfüllen.
LSQ-Funktionen wie lsqcurvefit, lsgnonlin,lsqlin, qr,... wären dabei meiner Ansicht nach angebracht.
Wie kann ich die Parameter ermitteln?
Ich sehe da 2 Probleme:
1. Die Ableitung ergibt eine Fehlermeldung
2. Falls ich die Ableitung diskret bilde, wie kann ich mehr als 2 von der Zeit t abhängige Daten in einen Lösungsalgorithmus unterbringen (lsqcurvefit akzeptiert nur 2 Vektoren (XData und YData), ich habe aber 3/4 zeitabhängige Größen)
ich würde das folgendermaßen angehen:
- lsqnonlin verwenden.
- in der Zielfunktion mit ode45 die DGL lösen und mit y1 vergleichen. Dabei die DGL an den Zeitschritten lösen lassen, an denen y1 vorliegt.
- um an Y2 und Y3 zu bestimmten Zeiten heranzukommen wie für die DGL nötig, muss wohl interpoliert werden.
Danke für deine schnelle Antwort.
Ich hab die Zeitwerte und die zugehörigen Messwerte von Y1,Y2 und Y3 (Interpolation noch nötig?). Nur die Parameter A,B,C sind unbekannt und sollen für alle Zeiten t bestmöglich angepasst werden. Kannst du mir das bitte mal beispielhaft zeigen, wie das ggf. mit lsqnonlin & Zielfunktion aussehen würde?
Hallo Harald,
danke für die Mühe, das sieht ja echt kompliziert aus mit den verschachtelten Funktionen
Leider ist es mir (noch) nicht gelungen, daß mein Programm läuft .
Ich hab die Messdaten mal beigefügt.
Benötige ich bei Ode45 zwingend Anfangsbedingungen und wenn ich dort keine angebe, werden die dann auf Null gesetzt?
Mal sehen ob ich das noch hinbekomme...
Lg
Coja
da ist nichts beigefügt.
Und ja, du brauchst Anfangsbedingungen. Aber du könntest Y1Werte(1) als Anfangswert nehmen, wenn nichts anderes da ist.
Die verschachtelten Funktionen habe ich deswegen genommen, damit die Variablen sichtbar bleiben.
Hallo,
ich hab meinen Beitrag gesten noch ergänzt (Dateianhang). Da ich ja 3 verschiedene Meßwerte hab, muss ich ja eine bestimmte Anfangsbedingung vorgeben, da die Differentialgleichung in deinem Beispiel von Y1 abhängt, gebe ich demzufolge Y1 eine Anfangsbedingung, wie du schon sagtest den 1. Wert (beispielsweise). Da es sich um relative kleine Zeitschritte handelt, kann man den Fehler ja vernachlässigen... mal sehen ob ich mein Programm noch zum laufen bekomme, danke schonmal für die Hilfe.
y1(1) ist definitiv die Anfangsbedingung, alles andere macht keinen Sinn.
Meine Zeit ist leider gerade eingeschränkt, aber ich kann in ein paar Tagen nochmal genauer draufschauen, wenn du nicht weiter kommst.
es eilt ja bei mir nicht so Ich probiere gerade noch ein wenig, aber es kommt eine Fehlermeldung nach der nächsten...aber ich versuchs weiter. Du kannst den Beitrag auch später ergänzen (ich würde mich sehr freuen), ich sehe täglich nach.
Vielen Dank für die bisherige Mühe
viele Grüße Coja
function y = obj(x, p) % x beinhaltet A, B, C
opts = odeset('RelTol', 1e-3); % verkleinern für zuverlässige Ergebnisse [tsim, ysim] = ode23s(@(t,y) diffeq(t,y,x,p), p.t, p.Y1(1), opts);
iflength(ysim) == length(p.Y1) && ~any(isnan(ysim))
y = norm(ysim - p.Y1);
else
y = 1e10;
end end
function f = diffeq(t, Y1in, x, p)
f = (x(2)*Y2eval(t,p) - (x(3)+2/15*(Y1in-Y3eval(t,p)))*(Y1in-Y3eval(t,p)))/(2*x(1));
end
Vernünftige Ergebnisse bekomme ich damit jedoch auch nicht.
Ein paar Vorschläge:
1. Gleichung überprüfen
2. Messungen in feineren Abständen, um die Wirkung von Interpolationsfehlern zu verringern.
3. Möglichst gute Startwerte und untere und obere Schranken vorgeben.
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
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.