Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Bücher:

MATLAB kompakt

Studierende:
weitere Angebote

Partner:


Vermarktungspartner


Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Nichtlineares Optimierungsproblem Matlab

 

FragenUeberFragen1000
Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2019, 13:26     Titel: Nichtlineares Optimierungsproblem Matlab
  Antworten mit Zitat      
Halloo!

Also ich bastle da wieder mal seit Stunden dran herum und habe nun eine Frage zu einer Matlab Funktion:
Ich möchte eine ZF minimieren über einen Vektor
x = [t; eigenschaft1; Eigenschaft 2; eigenschaft 3; Eigenschaft 4;].
Dabei habe ich aber eine DGL für x(2)-x(4) gegeben, und diskretisiiere diese mit Euler implizit.
Jetzt ist die Frage:
wie kann ich das in Matlab unter den nonlinear constraints ceq auch so formulieren? Also in dem Sinne, dass ich x(2)_i+1 verwenden kann?

1.Idee: ich habe den Vektor x als Matrix betrachtet und die verschiedenen Stützstellen dann in die Spalten gepackt
-> Problem: ZF verwenden f(x) = x(2)^2+x(5)+x(3)^2 und wenn die Spalten die Stützstellen sind, ist nicht klar, was x(2) ist.

2.Idee: festlegen x(2)=e1, x(3)=e2, x(4)=e3 und dann die diskretisierung nur darauf beziehen.
-> Problem: man erhält sofort die Fehlermeldung, dass e1,..,e3 nicht definiert sind.

Wie kann ich also über einen Vektor minimieren, dessen Komponenten ich diskretisiere?

Bin dankbar für jede Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.07.2019, 13:42     Titel:
  Antworten mit Zitat      
Hallo,

ich würde da anders vorgehen.
Beim Eulerverfahren ist das Problem, dass der Fehler nicht kontrolliert wird. Stattdessen würde ich ode45 verwenden.

Die Zielfunktion kann ja leicht abgeleitet werden. Ich würde also nach Nullstellen der Ableitung suchen, und das geht bei ode45 "nebenbei" schön mit Events (anzugeben über odeset).

Einzige Anforderung: das gesuchte Minimum muss in der Zeitspanne liegen, über die die DGL gelöst wird.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
FragenUeberFragen1000
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.07.2019, 13:51     Titel:
  Antworten mit Zitat      
Das Problem ist, dass die Eigenschaften selbst auch Funktionen sind (Pendelschwingung zum Beispiel).
Die Idee mit ode45 hatte ich auch schon, und das führte leider zu keinem Ergebnis. Wenn ich also bei den optimization tools bleibe, gibt es da dennoch eine Möglichkeit? :(
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 09.07.2019, 14:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Das Problem ist, dass die Eigenschaften selbst auch Funktionen sind (Pendelschwingung zum Beispiel).

Ich sehe das Problem darin nicht.

Zitat:
Die Idee mit ode45 hatte ich auch schon, und das führte leider zu keinem Ergebnis.

Was genau hast du versucht und welche Probleme sind dabei aufgetreten?

Zitat:
Wenn ich also bei den optimization tools bleibe, gibt es da dennoch eine Möglichkeit?

Wird meines Erachtens umständlich und rechenintensiv, weil du wiederholt dieselbe DGL lösen musst. Ich sehe da höchstens die Möglichkeit, dass man t als zu optimierende Variable nimmt und alles andere in Abhängigkeit davon berechnet.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
FragenUeberFragen1000
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2019, 07:15     Titel:
  Antworten mit Zitat      
Hallo,

genau so soll es ja auch sein, dass alles in Abhängigkeit von t berechnet wird. Dazu brauche ich ja zunächst mein t, daher der Umweg Laughing
möglicherweise habe ich es komplkzierter ausgedrückt oder gemacht. aber im Endeffekt optimiere ich über t und der erst hängt davon ab. die dgl möchte ich jedoch über Euler umgehen. und durch die diskretisierung erhalte ich das Problem der Indizierung.
Ich brauche also eine Formulierung für x(3)_k beispielsweise..
Private Nachricht senden Benutzer-Profile anzeigen
 
FragenUeberFragen1000
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2019, 08:24     Titel:
  Antworten mit Zitat      
Code:

%wir loesen das problem der Zeitminimierung
%zunaechst werden alle Werte festgelegt, die wir brauchen:
N=25;
xf=20;

%wir diskretisieren das gesamte Problem mit euler und indizieren mit k
for k=1:1:N

%wir definieren die Zielfunktion:
fun=@(x) x(6,k)+(x(1,k)-xf)^2+x(2,k)^2+x(3,k)^2+x(4,k)^2;

lb = []; ub = [];
A=[];b=[];Aeq=[];beq=[];


nonlcon=@NLNB;
x(1)=x(1,k);
x(2)=x(2,k);
x(3)=x(3,k);
x(4)=x(4,k);
x(5)=x(5,k);
x(6)=x(6,k);
x(7)=x(7,k);
   
x0=[0;0;0;0;0;30;0];

[x(k), fval(k)]= fmincon(fun, x0, A, b, Aeq, beq, lb, ub, nonlcon);

end
[x(N),fval(N)]
 



so wie:


Code:



function [c, ceq] = NLNB(x)


c(1)=x(5,k)-1;
c(2)=-x(5,k)-1;
c(3)=x(7,k)-1;
c(4)=-x(7,k);

    ceq(1)=(x(1,k+1)-x(1,k))/x(7,k)-x(2,k+1);
    ceq(2)=(x(2,k+1)-x(2,k))/x(7,k)-(25/4)*x(3,k+1)-(1/32)*x(5,k+1);
    ceq(3)=(x(3,k+1)-x(3,k))/x(7,k)-x(4,k+1);
    ceq(4)=(x(4,k+1)-x(4,k))/x(7,k)+(65/64)*x(3,k+1)+(1/512)*x(5,k+1);


 


funktioniert leider nicht. Fehlermeldung, dass k nicht bekannt ist in NLNB
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.07.2019, 08:36     Titel:
  Antworten mit Zitat      
Hallo,

kein Wunder, weil es dort nicht definiert wird. Es gibt zwar die Möglichkeit, externe Parameter zu übergeben, aber ich sehe nicht, wie das hier sinnvoll ist.
https://de.mathworks.com/help/optim.....ing-extra-parameters.html

Es wäre interessant, welches Problem genau du mit dem Code überhaupt zu lösen versuchst.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
FragenUeberFragen1000
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.07.2019, 08:43     Titel:
  Antworten mit Zitat      
es geht dabei um eine zeitoptimale Minimierung einer Fahrt mit angehängtem Pendel ist, bei der x=[position, Geschwindigkeit, Pendelwinkel, pendelwinkelgeschwindigkeit, Steuerung, Endzeit, Disk.Zeit tau=endzeit/N] mit N = Anzahl diskretisierungsschritte.

also ein minimierungsproblem mit einer dgl als Nebenbedingung, sowie Beschränkungen an die Komponenten von x
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 10.07.2019, 15:36     Titel:
  Antworten mit Zitat      
Hallo,

ich hätte es präziser sagen sollen: was ist die vollständige mathematische Formulierung des Problems?

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
FragenUeberFragen1000
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.07.2019, 09:58     Titel:
  Antworten mit Zitat      
Hallo,
entschuldigt die lange Abwesenheit, ich habe in der zeit andere Ansätze getestet.

Ich formulier nochmal eine andere Frage:

wenn ich ein Minimierungsproblem habe:

Code:
%zeit minimieren
min tf
%Nebenbedingungen
abs(u)1
dz/dt=A*z+B*u

%umformulieren mit Euler zu

min tf
abs(u)1
(z(k+1)-z(k))/tau(k) = A*z(k+1)+B*u(k+1)
tf=N*tau
 



Ist es möglich die DGL mit Euler aus den NB rauszuhalten und wenn ich dann k=1:N laufen lasse, muss ich dann fmincon auch N mal laufen lassen , oder kann ich die Euler NB als eigene schleife einbauen und die interation nur für die NB nehmen und ein minimirungsprobem lösen?

Ich hoffe jemand kann mir helfen!
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 23.000
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.07.2019, 22:13     Titel:
  Antworten mit Zitat      
Hallo,

mir ist nicht klar, was tf in der ersten Formulierung mit den Nebenbedingungen zu tun hat. Beim Schluss habe ich keine Ahnung, was du meinst, und kann dir daher leider nicht dabei helfen.

Wenn es eine andere Frage ist, dann mach doch ein neues Thema auf. Wenn ein Thema schon so viele Beiträge hat, ist unwahrscheinlich, dass sich noch jemand neu einklinkt.

Wenn du deine ursprüngliche Frage gelöst hast, dann poste bitte auch wie. Falls jemand anders später auf diesen Beitrag stößt, hat er dann auch was davon.

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 ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
FragenUeberFragen1000
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 7
Anmeldedatum: 09.07.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.07.2019, 07:48     Titel:
  Antworten mit Zitat      
Hallo;

Naja im Endeffekt ist es noch dieselbe Frage:

Ich habe ein Minimierungsproblem was ich mit Matlab lösen möchte. Das Problem ist, dass ich eine DGL als Nebenbedingung habe und die deshalb umformuliere.
Mit Euler erhalte ich dann aber ja N viele Stützstellen von z jeweils, und die Frage ist: löse ich dann N viele Minimierungsprobleme oder kann ich das als ein Problem lösen?

Grüße
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

um dir die Frage beantworten zu können, muss ich genau verstehen, was denn tatsächlich die Problemstellung ist. Deswegen die Frage:
Zitat:
was ist die vollständige mathematische Formulierung des Problems?

die für mich noch nicht beantwortet ist.

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


goMatlab ist ein Teil des goForen-Labels
goForen.de goMATLAB.de goLaTeX.de


 Impressum  | Nutzungsbedingungen  | Datenschutz  | Werbung/Mediadaten | Studentenversion | FAQ | goMatlab RSS Button RSS


Copyright © 2007 - 2021 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
Partner: LabVIEWforum.de

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.