|
|
|
Nebenbedingung fmincon erzeugt fehler |
|
| Hanspeter |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.05.2012, 08:59
Titel: Nebenbedingung fmincon erzeugt fehler
|
 |
Hallo,
ich bin gerade an einer optimierungsaufgabe per fmincon mit einer Nebenbedingung. Leider kriege ich die Nebenbedingung nicht hin und verstehe nicht wieso er es nicht macht.
Meine Funktion lautet:
so nun lautet meine Nebenbedingung:
also ich möchte das wenn die werte von p11 >0 sind das
x1*p12+x2*p13 >u1 ist und umgekehrt.
hiernochmal mein aufruf mit fmincon:
Das Problem das ich jetz habe ist das er die Nebenbedingung zwar irgendwie anerkennt und etwas ändert aber nicht richtig. Die Nebenbedingung wird nicht erfüllt außerdem ignoriert er plötzlich den lower und upper bound und gibt mir x werte raus die negativ sind obwohl das gar nicht möglich sein sollte?
weiß vll jemand wo mein Fehler liegt? Ich glaube da stimmt noch irgendwas nicht in der Nebenbedingung
|
|
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.05.2012, 09:12
Titel:
|
 |
Hallo,
in der jetzigen Form wird deine NB nur für eine Komponente (die i-te) von p11 angewendet. Ist das so gedacht? Zudem schreibst du, dass die NB auch im Umkehrschluss erfolgen soll.
Nebenbedingungen werden nur mit einer gewissen Toleranz erfüllt. Diese Toleranz kannst du mit optimset über die Option tolcon anpassen.
Und bitte versuche doch, die globalen Variablen zu vermeiden.
Grüße,
Harald
|
|
|
|
| Hanspeter |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.05.2012, 09:41
Titel:
|
 |
Hallo,
Ja das mit der i´ten Komponente ist so gedacht da ich 430 mal optimiere und alle werte die Nebenbedingung erfüllen müssen. Im Umkehrschluss würde es bedeuten das p11 <=0 ist in diesem fall habe ich x1*p12+x2*p13 <u1. Ich werde mir das mit der toleranz mal ansehen.
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.05.2012, 09:43
Titel:
|
 |
Hallo,
auch ein Hinweis: in deiner Hauptfunktion überschreibst du x und fval in jeder Iteration. Das erscheint mir nicht sinnvoll.
Die Frage ist auch: selbst wenn du die x-Werte und fval-Werte in Vektoren abspeicherst, bekommst du je 430 davon. Was willst du dann mit denen machen?
Grüße,
Harald
|
|
|
|
| Hanspeter |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.05.2012, 10:59
Titel:
|
 |
hallo,
die Funktionswerte fval benötige ich nicht unbedingt, und die x Werte sind sozusagen gespeichert in C1 und C2. Mein Ziel ist es die Kreuzkorrelation in den punkten 435 und 444 zu maximieren. Mit den gepsicherten C werten lässt sich jetz die Kreuzkorrelation berechnen und diese ist auch maximal in den punkten nur stimmt die Nebenbedingung noch nicht ganz.
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.05.2012, 11:50
Titel:
|
 |
Hallo,
ich sehe gerade, dass deine Umsetzung der NB nicht mit dem zusammenpasst, was du im Text schreibst.
Du möchtest beispielsweise
Dann musst du das in < 0 umformen, also
Im Code muss das dann so aussehen, nur ohne < 0.
Grüße,
Harald
|
|
|
|
| Hanspeter |
Gast
|
 |
Beiträge: ---
|
 |
|
 |
Anmeldedatum: ---
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 10.05.2012, 13:25
Titel:
|
 |
Hallo,
Danke für die Hilfe hat geholfen, verstehe jetz auch wieso der bound/Nebenbedingung nicht immer eingehalten wird.
Es gibt Werte bei denen es nicht möglich ist das x1>0 x2>0 und das die Nebenbedingung eingehalten wird. Bei diesen Werten erhalte ich dann negative Werte.
|
|
|
|
| Harald |

Forum-Meister
|
 |
Beiträge: 24.502
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 10.05.2012, 13:52
Titel:
|
 |
Hallo,
du solltest dir bei fmincon auch das Rückgabeargument exitflag ansehen. Auf die Weise findest du heraus, wenn beispielsweise kein Punkt gefunden werden konnte, der alle NB erfüllt, und deswegen einer zurückgegeben wird, der sie nicht erfüllt.
Grüße,
Harald
|
|
|
|
|
|
|
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
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| 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.
|
|