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

Probleme mit fmincon()

 

senmeis
Forum-Guru

Forum-Guru


Beiträge: 301
Anmeldedatum: 09.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.05.2015, 16:03     Titel: Probleme mit fmincon()
  Antworten mit Zitat      
Hi,

ich möchte das Minimum einer Funktion mit zwei unabhängigen Variablen mit fmincon() bestimmen, mit den Bedingungen 0 <= x <= 10 und 0 <=y <= 20.

Code:

lb = [0;0];
ub = [10;20];
x0 = ub;
[x,fval] = fmincon(@myfun,x0,[],[],[],[],lb,ub);
 


Problem 1: Eine Warnung meldet sich: ... FMIMCON will use the active_set algorithm instead. ...

Problem 2: Nach dem Ausführen bleibt ‚x‘ immer ub.

Woran liegen die?

Owen
Private Nachricht senden Benutzer-Profile anzeigen


Winkow
Moderator

Moderator



Beiträge: 3.842
Anmeldedatum: 04.11.11
Wohnort: Dresden
Version: R2014a 2015a
     Beitrag Verfasst am: 27.05.2015, 16:09     Titel:
  Antworten mit Zitat      
Zitat:
... FMIMCON will use the active_set algorithm instead. ...

kann mir nicht vorstellen das das die vollständige fehlermeldung ist.
Zitat:
Problem 2: Nach dem Ausführen bleibt ‚x‘ immer ub.

liegt denn das minimum bei ub? hast du mal einen anderen start punkt versucht?
_________________

richtig Fragen
Private Nachricht senden Benutzer-Profile anzeigen
 
senmeis
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 301
Anmeldedatum: 09.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.05.2015, 17:12     Titel:
  Antworten mit Zitat      
Mit fmincon() möchte ich folgende Aufgabe lösen.

Ein Vektor im 3D Raum, der durch seine Richungskosinus eindeutig beschrieben werden kann, hat Abweichungen zu der X Achse und der Y Achse. Die Abweichung zu der Z Achse kann damit ausgerechnet werden.

Gegeben seien die Abweichungsbereich:

0 <= x1 <= 10 Grad
0 <= x2 <= 20 Grad

Gesucht ist die Abweichung zwischen diesen zwei Vektoren.

Code hier:

Code:

function f = myfun(x)
direction_cosine = [0.433;0.25;0.866];  % originaler Richtungskosinus
direction_cosine_in = direction_cosine';
% Richtungskosinus des abgeweichten Vektors
direction_cosine_out_x = cosd(acosd(direction_cosine(1))+x(1));
direction_cosine_out_y = cosd(acosd(direction_cosine(2))+x(2));
direction_cosine_out_z = sqrt(1-direction_cosine_out_x^2-direction_cosine_out_y^2);
direction_cosine_out = [direction_cosine_out_x;direction_cosine_out_y;direction_cosine_out_z];
% Kosinus des Winkels zwischen den beiden Vektoren
f = direction_cosine_in*direction_cosine_out;
 


Owen
Private Nachricht senden Benutzer-Profile anzeigen
 
senmeis
Themenstarter

Forum-Guru

Forum-Guru


Beiträge: 301
Anmeldedatum: 09.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.08.2015, 16:57     Titel:
  Antworten mit Zitat      
Die Grundidee ist folgendes:

Die Abweichung (im Grad) zu der X Achse vergrössert sich von 0 kontinuierlich bis 10, gleichzeitig variert auch die Abweichung zu der Y Achse von 0 bis 20. Irgendwann erreicht die Abweichung zwischen diesen beiden Vektoren das Maximum, also entsprechend das Minimum der Multiplikationen von den beiden Richtungskosinusfunktionen.

Ich weiss nicht ob dieser Gedanke fehlerhaft ist. Kann mir jemand helfen?

Owen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 13.08.2015, 17:58     Titel:
  Antworten mit Zitat      
Hallo,

die Warnung ist erst mal kein Problem. Sie besagt nur genau das, was sie sagt, nämlich dass intern ein anderer Algorithmus verwendet wird.

Zum anderen Problem: wie von Winkow vorgeschlagen mal andere Startwerte versuchen. Vor allem aber auch die Statusmeldung von fmincon lesen und beachten - diese besagt ja, wie das Ergebnis zu interpretieren ist.

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

Forum-Guru

Forum-Guru


Beiträge: 301
Anmeldedatum: 09.03.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.08.2015, 15:57     Titel:
  Antworten mit Zitat      
Mit dem Startwert x0 = ub = ub = [10;20] bekomme ich x = [10;20] und fval = 0.9225, mit folgenden Info:
Zitat:

Local minimum found that satisfies the constraints.

Optimization completed because the objective function is non-decreasing in
feasible directions, to within the default value of the function tolerance,
and constraints are satisfied to within the default value of the constraint tolerance.

<stopping criteria details>

Active inequalities (to within options.TolCon = 1e-06):
lower upper ineqlin ineqnonlin
1
2

Kann man sicherstellen, das Minimum ist tatsächlich 0.9225, oder der Vorgang hört auf beim Startwert?

Owen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.08.2015, 18:11     Titel:
  Antworten mit Zitat      
Hallo,

grundsätzlich sind die Löser aus der Optimization Toolbox gradientenbasiert, d.h. sie konvergieren generell zu einem lokalen Minimum. Das globale Minimum wird nur bei ausreichend guten Startwerten gefunden. Was "ausreichend gut" heißt, kann von Problem zu Problem sehr stark variieren.
Wenn das globale Minimum gefunden werden soll, bietet sich die Iteration über verschiedene Startwerte oder die Nutzung von Lösern aus der Global Optimization Toolbox an.

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