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

Parameter in ode45 variieren um Optimum zu treffen

 

jonas10030
Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2017, 10:06     Titel: Parameter in ode45 variieren um Optimum zu treffen
  Antworten mit Zitat      
Hallo,

ich bin noch recht frisch in Matlab und komme hier nicht weiter. Ich habe 5 DGLs und kann diese mittels ode45 einfach lösen. Ich möchte jetzt zwei Werte von denen alle DGLs abhängen so variieren, dass ich mit jeder DGL zu einer bestimmten Zeit einen bestimmten Punkt treffe. Diese Punkte sind keine Maxima /Minima sondern Punkte die während Laborversuchen aufgenommen wurden.

Also im Prinzip soll das so aussehen: 5 DGL (zusätzlich abhängig von 2 Werte), Zielwerte (Punkte im System), --> variiere die 2 Werte so, dass ich alle Zielwerte möglichst genau treffe

Ich wäre für Lösungsvorschläge sehr Dankbar!

Grüße Jonas
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


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

du kannst es z.B. mal mit fmincon versuchen.
Falls du auf Probleme mit der Konvergenz stößt, siehe hier:
https://www.mathworks.com/help/opti.....ifferential-equation.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jonas10030
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2017, 11:32     Titel:
  Antworten mit Zitat      
Hallo und danke für die schnelle Antwort,
aber nach durchlesen der Hilfe und ansehen von zwei Youtube Videos steh ich immer noch völlig auf dem Schlauch.
Wie bekomm ich denn meine DGLs in die Form, dass ich sie in als "fun" in den solver schreiben kann?
Grüße Jonas
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Beispiel mit einer DGL:

Code:
%% Testdaten
x = 1;
y1Soll = exp(-3*x); % zu findender Parameter: 3

%% Parameter optimieren
kOpt = fmincon(@(k) dglfun(k, y1Soll), 1)


mit

Code:
function err = dglfun(k, y1Soll)

[~,y] = ode45(@(t,x) -k*x, [0, 1], 1);
y1 = y(end);
err = norm(y1 - y1Soll);


Wenn du Unterstützung dabei benötigst, das auf deine Anwendung zu übertragen, müsstest du mehr Informationen liefern, wie diese aussieht.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jonas10030
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2017, 13:22     Titel:
  Antworten mit Zitat      
also mein Problem sieht wie folgt aus:

das sind meine DGLs:
Code:
function dX = test(t,X,)

    dX = [(-(k1+k2)*X(1)*X(2));...
        (-(k1+k2)*X(1)*X(2));...
        (k1*X(1)*X(2));...
        (k2*X(1)*X(2));...
        (k1*X(1)*X(2))]

[end


k1 und k2 sollen so variiert werden, dass ich mit meinen gegebenen Startwerten bestimmte Zielwerte treffe.

Code:
%Startwerte
X0 = [1,2,3,4,5];
%Zeitschritte
t=0:0.1:6;

%Zielwerte
laenge =  size(X,1)
X(laenge,1) = 0.5
X(laenge,2) = 0.01
X(laenge,3) = 0.1
X(laenge,4) = 2
X(laenge,5) = 3

 


Meine Vorstellung bzgl der Lösung wäre eine Funktion der man vorgibt variiere k1 und k2 (gleichzeitig) so, dass unter Verwendung der ode45 bei der Lösung der DGLs diese Zielwerte alle bestmöglich erreicht werden.

steh bei Matlab noch komplett am Anfang und bin mir auch nicht so sicher ob ich da überhapt richtig ran geh :/

Besten Dank für deine Antwort
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Problemstellung war mir schon klar.
Hast du jetzt mal versucht, meinen Vorschlag auf deine Aufgabenstellung zu übertragen? Falls ja, welche Probleme sind dabei aufgetreten?

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jonas10030
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2017, 13:58     Titel:
  Antworten mit Zitat      
nein hab das noch nicht übertragen können weil mir die Syntax in deinem zweiten Code nicht ganz klar ist.
also ich seh zum Beispiel nicht wirklich wo deine DGL ist. Bitte verziehe wenn ich dumme Fragen stelle aber ich arbeite seit 2 Tagen mit Matlab und finde die Syntax ( auch und besonders in der Hilfe) noch äußerst kryptisch

grüße Jonas
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die DGL ist hier: @(t,x) -k*x

In deinem Fall kannst du auch @test verwenden, bzw. du wirst vermutlich so wie im Beispiel "Pass Extra Parameters to ODE Function" der Doku von ode45 vorgehen müssen wie hier beschrieben um die Parameter zu übergeben.

Zitat:
finde die Syntax ( auch und besonders in der Hilfe) noch äußerst kryptisch

Ich finde die Doku generell sehr hilfreich. Bei konkreten Fragen dazu kann ich gerne versuchen, das zu erklären.

Für den Einstieg kann auch das kostenlose MATLAB Onramp hilfreich sein:
https://matlabacademy.mathworks.com/

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
jonas10030
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 11
Anmeldedatum: 20.10.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.12.2017, 10:40     Titel:
  Antworten mit Zitat      
Hallo,

ich habe das Problem mittlerweile versucht auf meine Aufgabenstellung zu übertragen und mache dabei aber Fehler. Einen optimalen Parameter bei nur einer DGL zu finden stellt kein Problem dar. Was momentan nicht funktioniert ist zwei (oder mehr) DGL's nach Parametern zu optimieren.

Evtl liegt es nur an der Syntax?! Das sind die m-Files
Code:
Xexp=[10,8];

[kOpt] = fmincon(@(k1,k2) dglfun(k1,k2, Xexp),[1,1])
 


und
Code:

function err = dglfun(k1,k2,Xexp)
X0= [1,2];
t=0:0.1:6;
[t,X]=ode45(@(t,X) [-k1*X(1); -k2*X(2)],t,X0);  
Xrech = X(end);
err = norm(Xrech - Xexp);
 


Hat jemand eine Idee was ich falsch mache?
Ich bin über jede Hilfe super Dankbar!
Grüße [/code]
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.434
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 05.12.2017, 10:51     Titel:
  Antworten mit Zitat      
Hallo,

du musst die Parameter zu einem Vektor zusammenfassen, also:

Code:
[kOpt] = fmincon(@(k) dglfun(k, Xexp),[1,1])

und
Code:
function err = dglfun(k,Xexp)
k1 = k(1);
k2 = k(2);
X0= [1,2];
t=0:0.1:6;
[t,X]=ode45(@(t,X) [-k1*X(1); -k2*X(2)],t,X0);  
Xrech = X(end);
err = norm(Xrech - Xexp);


In dem Fall war es mir zwar recht schnell klar, aber grundsätzlich bitte immer angeben, woraus du schließt, dass du einen Fehler machst bzw. was genau nicht funktioniert.

Grüße,
Harald
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.