Hallo
zurzeit komme ich in einem Studiprojekt mit einem Kostenfunktional nicht weiter (Aufgabe 5-Anhang)
Könnte jemand mal drüberschauen, ob die Codes soweit stimmen und was ich falsch mache?
Mein Code "opti" gibt jedes mal die Fehlermeldung , zu wenig Inputargumente.
ins Befehlfenster gebe ich ein k=fminunc(opti,x0)
Da bekomm ich auch nur die Fehlermeldung, zu wenig Inputargumente und Fehler bei opti.
Hab ich da einen Denkfehler? Bin nur leihenhaft in matlab bewandert.
Danke im Voraus
Code:
function J=opti(k)
tspan=[010];
x0=[5;0;0;0;0;0];
[x]=ode45(@(x) DLG2(x,k),tspan,x0);
J=x(end,6);
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Daniel1904
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.06.2019, 06:44
Titel: Angepasst
Hi
Danke für die Hilfe! Hab den Code mal abgeändert aber er spuckt leider immer noch dieselbe Fehlermeldung raus. :/
Es scheint irgendwie auch ein Problem zu sein, das k zu bestimmen.
LG
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Daniel_1904
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.06.2019, 13:27
Titel: Antw.
Hallo Harald
Gebe ich das Function handle ins Befehlsfenster ein, oder muss ich dafür ein neues "Skript" dafür erstellen? Im Befehlsfenster hatte es bisher nicht funktioniert.
LG Daniel
du kannst den Befehl wie angegeben ins Command Window eingeben.
Zitat:
Im Befehlsfenster hatte es bisher nicht funktioniert.
Bitte die genaue Fehlermeldung angeben. Ohne das @ kann es nicht funktionieren.
Ein Problem, auf das ich nach Umsetzen meiner Vorschläge stoße: A ist eine 5x5-Matrix, x0 aber ein 6x1-Vektor. Das passt nicht zusammen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Daniel_1904
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.06.2019, 15:29
Titel: Antw.
Hi
x0 war ein älterer Fehler, den hab ich bereits schon verbessert
die Erklärung dafür habe ich dir oben bereits gegeben:
Zitat:
A ist eine 5x5-Matrix, x0 aber ein 6x1-Vektor. Das passt nicht zusammen.
Mit dem Debugger kannst du solche Fehler auch wunderbar selbst aufspüren.
Bei Veränderungen bitte auch den aktuellen Code posten, sonst kann man das momentane Problem nicht nachvollziehen.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Daniel_1904
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.06.2019, 16:22
Titel: Antw.
Hallo Harald,
Mein aktueller code:
Code:
function J=opti(k)
tspan=[010];
x0=[5;0;0;0;0];
[t,x]=ode45(@(t,x) DLG2(x,k),tspan,x0);
J=x(end,6);
Ich habe im aktuellen Code keine Matrixdimensionsfehler finden können.
Hast du denn den Debugger verwendet?
Wenn das eine * nicht fehlerhaft ist, dann vielleicht das andere in derselben Zeile? Sollten b und x nicht eher komponentenweise, also mit .* multipliziert werden?
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
bereits in den Aufgaben verwendet und es hat alles funktioniert. Denke mal nicht, dass hier eine komponentweise Multiplikation angewendet werden soll. Hab es zwar getestet ob sich etwas ändert, aber es kam leider nichts anderes dabei heraus.
Ich muss gestehen, dass ich den Debugger bisher nur einmal erklärt bekommen habe und ihn noch nie nutzen musste. Ich hab grad versucht mithilfe eines Tutorials zum Debugger an die vierte Zeile bei opti heranzugehen, verstehe aber leider nicht, was das Programm mir sagen möchte. Lediglich das kommt immer
bereits in den Aufgaben verwendet und es hat alles funktioniert.
Auch mit b und x als 5x1-Vektoren? Das wäre extrem verwunderlich.
Zitat:
Denke mal nicht, dass hier eine komponentweise Multiplikation angewendet werden soll.
Ich denke schon. ;)
Zitat:
Ich muss gestehen, dass ich den Debugger bisher nur einmal erklärt bekommen habe und ihn noch nie nutzen musste.
Dann würde ich dringend empfehlen, dass du dich genauer damit auseinander setzt. Aus eigener Erfahrung kann ich sagen, dass man so nicht nur die eigenen Fehler, sondern sogar die anderer findet. :)
Zitat:
Ich hab grad versucht mithilfe eines Tutorials zum Debugger an die vierte Zeile bei opti heranzugehen
Du hast wohl einen Haltepunkt gesetzt? Hast du dann auch wirklich den Code wieder aus dem Command Window ausgeführt? In opti.m auf "Run" zu drücken ist nicht sinnvoll, weil die Funktion ja Inputs benötigt.
Um es abzukürzen: mit .* ist das eine Problem gelöst. Dann gab es noch Probleme damit, dass du J in der DGL nicht konsequent mitgezogen hast. Nun sieht es so aus:
Code:
function J=opti(k)
tspan=[010];
x0=[5;0;0;0;0;0]; % J(0) = 0 als 6. Anfangswert? [t,x]=ode45(@(t,x) DLG2(x,k),tspan,x0);
J=x(end,6);
function dx=DLG2(x,k)
A=[0,0,1,0,0;0,0,0,1,0;-50,50,-5,5,-20;25,-25,2,-2,0;-600,0,20,0,-3];
b=[0;0;0;0;-1.5];
dx=A*x(1:end-1)+b.*(-k.*x(1:end-1)); % 1:end-1 weil J nicht berücksichtigt werden soll
dx=[dx;x(2)^2];
Dann läuft der Code zumindest durch. Allerdings gibt es ja nach Startwert unterschiedliche Lösungen. Du musst also einen ausreichend guten Startwert für k angeben.
Grüße,
Harald
_________________
1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Daniel_1904
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 25.06.2019, 20:10
Titel: Antw.
Hallo Harald,
danke für deine Mühen!
Ich werde mich mal in den Debugger mal mehr reinarbeiten xD
Danke für den Tipp!
Ich hab mal deinen Code kopiert und getestet, aber es funktioniert leider immer noch nicht. Ich weiß nicht warum es bei dir klappt und bei mir nicht ^^
Ich werde morgen mich nochmals da dransetzen und es nochmals austesten.
Vielen Dank dir
Gruß Daniel
Daniel_1904
Gast
Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
Verfasst am: 28.06.2019, 08:49
Titel: Lösung
Hallo Harald,
kleines Update
Um das Thema abzuschließen:
Die Vektoren dürfen nicht komponentenweise multipliziert werden und in der Eingabe muss man statt x0, das Anfangs - k nehmen.
Code:
function dx=DLG2(x,k)
A=[0,0,1,0,0;0,0,0,1,0;-50,50,-5,5,-20;25,-25,2,-2,0;-600,0,20,0,-3];
b=[0;0;0;0;-1.5];
dx=A*x(1:end-1)+b*(-k*x(1:end-1));
dx=[dx;x(2)^2];
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.