Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   
Bücher:

Studierende:
Praktikant Toolentwicklung Matlab (m/w)
Branche: Beratung, Expertise, Fahrzeugtechnik, Fahrzeugteile, Technische Dienstleistungen
MBtech Group GmbH & Co. KGaA - Fellbach

Abschlussarbeit / Praktikum: Entwicklung Matlab (m/w)
Branche: Informationstechnologie, Elektrotechnik, Elektronik
GIGATRONIK Technologies GmbH - Ulm

Studentischer Mitarbeiter (m/w) - DevOps / Toolentwicklung
Branche: mehrere
IAV GmbH - Ingenieurgesellschaft Auto und Verkehr - Berlin

Praktikant (m/w) Bereich Konzernvorausentwicklung - Aktoren sicherheitsrelevanter Anwendungen
Branche: Fahrzeugtechnik, Fahrzeugteile, Maschinentechnik, Industrietechnik
MAHLE International GmbH - Stuttgart

Praktikum - Softwareentwicklung Java
Branche: mehrere
IAV GmbH - Ingenieurgesellschaft Auto und Verkehr - Dresden, Gifhorn

weitere Angebote

Partner:


Vermarktungspartner


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-Newbie

Forum-Newbie


Beiträge: 4
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: 17.537
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     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-Newbie

Forum-Newbie


Beiträge: 4
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: 17.537
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     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-Newbie

Forum-Newbie


Beiträge: 4
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: 17.537
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     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-Newbie

Forum-Newbie


Beiträge: 4
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: 17.537
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2014a
     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
 
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
.


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de goPCB.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2017 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.