Ich sitze mal wieder an einem Matlab Problem dessen theoretische Lösung eigentlich nicht so schwer sein sollte, mir es aber wohl am nötigen Knowhow-fehlt wie ich das ganze in einen fehlerfreien Code darstellen kann.
Es geht darum dass ich ein ODE bestehend aus 4 Gleichungen gegeben habe und dieses ODE optimieren soll, dafür stehen 2 Stellgrößen zur Verfügung um eine der Ausgangsgrößen zu maximieren.
Hier nun erstmal mein Code, ich hoffe es ist nicht allzu unübersichtlich, um ehrlich zu sein, habe ich versucht mir den Anhand eines Beispiels zurecht zu basteln, mir fehlen aber wohl noch wesentliche Grundlagen, was das Aufrufen von Funktionen in anderen Funktionen angeht.
Jedenfalls sollen die Größen PARAMS( und (9) die Stellgrößen darstellen und Y(2) soll maximiert werden.
Wenn ich das Programm starte, scheitert es schon an einem wohl sehr simplen Problem (Not enough input arguments.) aber ich versteh es einfach nicht
Bin ich auf dem richtigen Weg?
Mach ich's mir unnötig kompliziert?
Hat jemand Idee wo meine Fehler liegen könnten?
Hoffe dass man da als aussenstehender überhaupt durchblickt, ich tu es selbst ja kaum
das Function Handle für lsqnonlin ist falsch. Es müsste @objFunc oder auch @(u) objFunc(u) heißen.
Desweiteren ist die Angabe von lb und ub so nicht sinnvoll.
Zum einen sollten es Vektoren derselben Länge sein wie der Anfangsvektor (also 2), zum anderen ist es sehr unüblich, sie gleich zu wählen.
Hallo Harald, danke für die schnelle Antwort. Ich hab den Code ein wenig angepasst, leider hört der nach ein paar Iterationsschirtten (2-3 Schritte nur) auf mit der Fehlermeldung:
Subscripted assignment dimension mismatch.
Error in finitedifferences (line 273)
Error in sfdnls (line 8
[J,~,~,numEvals] = finitedifferences(x,fun,[],lb,ub,valx,[],[], ...
Error in snls (line 340)
[newA, findiffevals] = sfdnls(xcurr,newfvec,Jstr,group,[], ...
Error in lsqncommon (line 150)
[xC,FVAL,LAMBDA,JACOB,EXITFLAG,OUTPUT,msgData]=...
Error in lsqnonlin (line 237)
[xCurrent,Resnorm,FVAL,EXITFLAG,OUTPUT,LAMBDA,JACOB] = ...
Error in odeParamID (line 2
best_T = lsqnonlin(objective, u, lb, ub, options)
Wie gesagt, es sollen die Parameter 8 und 9 angepasst werden um den Vektor Y(:,2) zu maximieren. Da der solver wohl nur eine Größe optimieren kann, werden die beiden Parameter gleichgesetzt, zu mindest fürs erste um eine erste Näherung zu erhalten. Naja ist auch schon spät, vielleicht sollte ich erstmal drüber schlafen.
gegenwärtig wählt ode45 je nach Durchlauf unterschiedliche Schritte, d.h. die Länge von c_A ist unterschiedlich. Das ist wohl nicht sinnvoll. Eine mögliche Wahl wäre
Danke Harald ! Dein Tip war wohl die Ursache des Problems, nachdem ich deinen vorgeschlagenen Code verwendet habe, funktioniert das Problem wie gewollt !
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.