|
|
Optimierung mit einem Integral |
|
Fino |

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 05.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 05.08.2013, 16:13
Titel: Optimierung mit einem Integral
|
 |
|
 |
|
Hallo zusammen,
ich möchte eine Funktion optimieren, die ein Integral beinhaltet. Trotz intensiver Suche habe ich allerdings keinen Befehl gefunden der das kann. Deswegen wende ich mich an euch.
Meine Funktion besteht aus 4 Summanden, die alle in Abhängigkeit von Q angegebene werden können. Einer dieser Summanden beinhaltet allerdings ein Integral, wobei sowohl das Integral als auch die Grenzen des Integrals die zu optimierende Variable Q enthalten.
Das Ziel ist es nun E zu maximieren unter der Beachtung zweier Nebenbedingungen.
Mein Ansatz war bisher mit fmincon E zu maximieren. Da aber die Maximierung von Q auch Auswirkungen auf die Grenzen des Integrals hat, wird dieses Unterfangen sehr kompliziert. Der int-Befehl kann leider keine explizite Lösung finden. Mit dem quad-Befehl habe ich das Problem, dass ich eine Funktion an quad übergeben muss. Diese Funktion soll ja aber auch Teil der Optimierung sein.
Ich hoffe ich konnte mich einigermaßen verständlich ausdrücken. Über jede Form der Unterstützung würde ich mich sehr freuen.
Freundliche Grüße
Fino
|
|
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 05.08.2013, 17:22
Titel:
|
 |
Hallo,
ich würde mit quad arbeiten.
Du kannst für das Integrieren Q ja als Parameter verwenden, also etwa
Grüße,
Harald
|
|
|
MaFam |

Forum-Meister
|
 |
Beiträge: 799
|
 |
|
 |
Anmeldedatum: 02.05.12
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2009b
|
 |
|
|
 |
|
Verfasst am: 06.08.2013, 10:53
Titel:
|
 |
Hallo,
als Ergänzung: du kannst auch die Integrationsgrenzen als Parameter übergeben und brauchst dich vor Komplexität dabei nicht zu scheuen. Dafür ist mehrdimensionale Optimierung ja da.
Grüße, Marc
|
|
|
Fino |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 05.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 06.08.2013, 12:02
Titel:
|
 |
|
 |
|
Hallo Harald, Hallo MaFam, Hallo an den Rest der community,
ich habe versucht eure Tipps umzusetzen:
Die function in der ich die Zielfunktion E_ges definiere beinhaltet nun den quad-Befehl, den ich nach Harald's Tipp verfasst habe. Der Parameter tr_param für den quad Befehl wird, wie es MaFam vorgeschlagen hat, auch in der gleichen Funktion ermittelt.
Dem quad-Befehl selbst übergebe ich die function Integral_dep_Q, welche abhängig ist von tr und Q (s.u.)
Um eine bessere Übersicht zu erreichen habe ich versucht mich beim Code auf das wesentliche zu beschränken (keine Nebenrechnungen, Zuweisungen ...)
Leider bekomme ich nun folgende Fehlermeldung:
The integrand function must return an output vector of the same length as the input vector.
Gleichzietig erhalte ich aber ein Ergebnis, dass wie folgt aussieht:
Das Ergebnis beinhaltet leider immer noch tr, sodass ich eben nicht nach Q optimieren kann.
Auch nach langer Suche kann ich mir bisher nicht erklären, wo genau das Problem liegt. Vielleicht ist dies nun ein Anfängerfehler aber ich würde mich trotzdem sehr freuen, wenn mir jemand einen Tipp geben könnte.
Grüße
Sören
|
|
|
Fino |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 05.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 06.08.2013, 14:45
Titel:
|
 |
Das obige Problem scheine ich gelöst zu haben. Aber jetzt motzt MuPAD ... mal sehen was er jetzt hat
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 06.08.2013, 17:47
Titel:
|
 |
Hallo,
wo verwendest du denn MuPAD? Ich sehe zumindest auf den ersten Blick nichts in der Hinsicht.
Ein Problem bei deinem geposteten Code ist, dass die ganzen anderen Variablen wohl in der anderen Funktion nicht bekannt sind. Dazu müsstest du den von mir genannten Trick bzgl. Q auf die anderen Variablen ausweiten. Damit nicht so viele Variablen übergeben werden müssen, würde ich mit einer Parameterstruktur arbeiten.
Grüße,
Harald
|
|
|
Fino |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 05.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 07.08.2013, 12:27
Titel:
|
 |
|
 |
|
Hallo,
MuPad wurde scheinbar von Matlab intern bei einer Berechnung verwendet und damit gab es scheinbar einen Fehler.
Das Übergeben der Variablen funktioniert gut. Ich habe es nur ganz bewusst bei der Angabe des Codes weg gelassen um den Code nicht ewig in die Länge zu ziehen.
Mein ganzes Problem lässt sich ja letztlich darauf reduzieren, dass der quad-Befehl mit einer Variablen rechnen muss. Deswegen habe ich mir ein kleines Test-Skirpt gebastelt.
Ich definiere die Funktion Test
nun möchte ich diese Funktion in den Grenzen [0:10] berechnen. Dazu definiere ich y als Variable und übergebe x und y an den quad Befehl.
Maple spuckt mir dann diese Fehlermeldung aus:
Undefined function 'isfinite' for input arguments of type 'sym'.
Wenn ich das richtig verstehe heißt es schlicht und einfach quad kann nicht mit einer Variablen rechnen. Ich glaube ich habe eure Tipps berücksichtigt.
Um das Problem zu umgehen fällt mir jetzt nur noch die Möglichkeit ein mit diversen Schleifen für jedes Q in einem gewissen Bereich (etwa 200 Mal in meinem Fall) das Ergebnis meiner Zielfunktion zu berechnen und dann eben die Ergebnisse zu vergleichen. Das wäre allerdings die Holzhammermethode und da ich diese Prozedur wahrscheinlich mehrere tausend mal durchziehen muss bekomme ich neben dem bedingt genauen Ergebnis auch noch eine riesige Rechenzeit.
Habt ihr noch irgendwelche Ideen, Hinweise Tipps?
Vielen Dank für eure Unterstützung
Gruß Sören
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.08.2013, 13:42
Titel:
|
 |
Hallo,
du hattest ja festgestellt, dass symbolische Integration nicht funktioniert, da keine Stammfunktion gefunden werden kann. Damit bleibt eben nur noch numerische Integration, und das geht rein mit Zahlen. Du musst also einen konkreten Zahlwert für y vorgeben.
Übertragen auf deine eigentliche Situation macht das nicht viel aus, denn du bekommst Q ja ohnehin als Eingang für die Zielfunktion, musst also nur für dieses eine Q das Integral ausrechnen. Dass bei weiteren Auswertungen der Zielfunktion das Integral für andere Q von neuem ausgewertet werden muss, wird sich nicht vermeiden lassen.
Grüße,
Harald
|
|
|
Fino |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 05.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 07.08.2013, 13:51
Titel:
|
 |
Hallo Harald,
wenn ich deinen Kommentar richtig verstanden habe, haben wir glaube ich ein wenig aneinander vorbei geredet. Das Ziel ist es meine Zielfunktion zu optimieren. Ich möchte ein Q erhalten für das die Zielfunktion maximal wird. Somit habe ich Q nicht als Zahl zur Verfügung.
Gruß Sören
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 07.08.2013, 13:56
Titel:
|
 |
Hallo,
Zitat: |
Somit habe ich Q nicht als Zahl zur Verfügung. |
Das ist wahr. Das Optimierungsverfahren wählt aber selbstständig verschiedene Q und möchte damit die Zielfunktion auswerten. Q wird also ein Eingabeargument der Zielfunktion sein und steht dann auch (als numerischer Wert) zur Verfügung, um das Integral (numerisch) zu berechnen. Siehe auch mein Beitrag von 5.8., 17:22.
Grüße,
Harald
|
|
|
Fino |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 05.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 07.08.2013, 14:06
Titel:
|
 |
Ok das bedeutet fmincon gibt Werte vor und wenn ich diesen Wert übergebe sollte auch der quad Befehl funktionieren. Ich habe bisher immer versucht den quad Befehl isoliert zum laufen zu bekommen. Ich probiere das aus und melde mich dann nochmal.
Bis dahin schon mal vielen Dank für die Geduld.
|
|
|
Fino |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 7
|
 |
|
 |
Anmeldedatum: 05.08.13
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: R2013a
|
 |
|
|
 |
|
Verfasst am: 08.08.2013, 09:27
Titel:
|
 |
Ich kann einen Erfolg vermelden.
Das Programm läuft durch und spuckt auf den ersten Blick auch die richtigen Ergebnisse aus. Jetzt muss ich nur noch ein wenig an den Nebenbedingungen spielen.
Vielen Dank für die Hilfe hier im Forum, ohne die Unterstützung hätte ich es wahrscheinlich nicht hin bekommen.
Gruß Sören
|
|
|
Harald |

Forum-Meister
|
 |
Beiträge: 24.501
|
 |
|
 |
Anmeldedatum: 26.03.09
|
 |
|
 |
Wohnort: Nähe München
|
 |
|
 |
Version: ab 2017b
|
 |
|
|
 |
|
Verfasst am: 08.08.2013, 11:03
Titel:
|
 |
Hallo,
das ist doch was :)
Beim Optimierer auch auf exitflag achten. Man kann auch mal unterschiedliche Startwerte nehmen und schauen, ob die Optimierung immer zum selben Minimum konvergiert.
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.
|
|