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

übergabe von weiteren inputs (fmincon)

 

marc-205
Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 12.12.12
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 16.04.2013, 11:13     Titel: übergabe von weiteren inputs (fmincon)
  Antworten mit Zitat      
hallo,
ich hab ein Problem, bei der Übergabe von inputs und den zu verändernden Variablen bei der fmincon Funktion.
Code:
objectiveFunction= @(cylPos) objective(distances, Ladegabel, points_x, points_y, misc);
constraintFunction= @(cylPos) constraint(points_x, points_y, Ladegabel);
cylPos=fmincon(objectiveFunction,[1100,1150],[],[],[],[],[distances.('PC_min'), distances.('EF_min')],[distances.('PC_max'), distances.('EF_max')],constraintFunction,options);
 


In der objectiveFunction soll eine andere Datei ausgeführt werden und der Wert einer zu berechnenden Größe als Zielwert definiert werden.
Der zu minimierende Wert ist value (berechnet aus 3 Ergebnissen der calcKinematic Datei, die ich gern dort als Ausgabe hätte), die Variablen des Optimierungsproblems sind in cylPos. Zum Ausführen der Datei calcKinematic brauche ich auch noch die folgenden Werte aus vorherigen Rechnungen als zusätzliche Inputs: (distances, points_x, points_y, misc), was soweit glaube ich auch stimmt, bzw übergeben wird. Diese Datei braucht ebenfalls die Variablen cylPos als Eingabe, daher habe ich das mit dem @ versucht. Allerdings wird das wohl nicht übergeben.

Code:
function [value] = objective(distances, Ladegabel, points_x, points_y, misc)
[points_y.('S'), points_y.('SL'), points_y.('y_Ref')] =@(cylPos) calcKinematic (distances, points_x, points_y, misc);
value=points_y.('S')+points_y.('y_Ref');
end


das ergibt eine Fehlermeldung (Line 62 ist die erste Zeile in der Objectivefunction)
Code:
??? Error: File: calccylPos.m Line: 62 Column: 57
Only functions can return multiple values.
 


Wenn ich hingegen das "@(cylPos)" weglasse und das dann wieder aussieht wie ein normaler Funktionsaufruf, dann fehlt das cylPos wohl in der calcKinematic, weil dort dann folgender Fehler kommt. (Ist auch logisch.)
Code:
??? Index exceeds matrix dimensions.

Error in ==> calcKinematic at 11
distances.('EF')=cylPos(1,2);


Wie kann man das machen damit Matlab klar ist/bleibt, dass cylPos die Variablen der Zielfunktion sind, die anderen Werte jedoch trotzdem mit übergeben werden, um diese berechnen zu können? ich habe bisher nur Beispiele gefunden, wo der Zielfunktion nur die Variable übergeben wurde (und keine weiteren inputs), indem nach dem Schema hier gearbeitet wurde, was mich aber nicht weiterbringt:
Code:
function [y]=objective(x)


Hat jemand einen Vorschlag, wie man das umsetzt?

Gruß Marc
Private Nachricht senden Benutzer-Profile anzeigen


marc-205
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 25
Anmeldedatum: 12.12.12
Wohnort: ---
Version: R2010b
     Beitrag Verfasst am: 17.04.2013, 15:40     Titel:
  Antworten mit Zitat      
Hab das Problem inzwischen gelöst, will es aber eventuellen späteren Suchern nicht vorenthalten:
Die zusätzlichen inputs (x1, x2, x3, misc) für die Zielfunktion und die constraint Funktion werden im fmincon Befehl einfach hinter den options eingefügt.
Code:
cylPos=fmincon(@objective,[a,b],[],[],[],[],[distances.('E_min'), distances.('F_min')],[distances.('E_max'), distances.('F_max')],@constraint,options,distances, x1, x2, x3, misc);


die Zielfunktion und constraint Funktion sehen dann so aus:
Code:
function [value] = objective(cylPos, distances, x1, x2, x3, misc)
%hier stehen die Rechnungen und am Schluss: value= zu minimierender Wert
end


Code:
function [unequal,equal] = constraint(cylPos, distances, x1, x2, x3, misc)
%hier stehen die Rechnungen und am Schluss: unequal= einzuhaltende ungleichheitsbedingung oder unequal=[] wenn keine berücksichtigt wird
%equal= Gleichheitsbedingung oder equal=[] wenn keine berücksichtigt wird.
end
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 - 2025 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.