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

Optimierungsproblem (Alternativ für Excel Solver)

 

SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 26.06.2017, 09:15     Titel:
  Antworten mit Zitat      
Der Plan ist deswegen immer 1000 Zeitpunkte zu berechnen. Wie kann ich denn Zeile für Zeile meine Nebenbedingung aufstellen? Bei 1000 Zeitpunkten wären es ja 1000 Zeilen. Das habe ich leider nicht so ganz verstanden.
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 26.06.2017, 10:01     Titel:
  Antworten mit Zitat      
Hallo,

Beispiel:
Code:
M = zeros(1000, 2000);
M(1, 1:2) = [-0.5, 1];
for k = 2:1000
    M(k, :) = M(k-1, :);
    M(k, 2*k-1:2*k) = [-0.5, 1];
end


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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 27.06.2017, 10:16     Titel:
  Antworten mit Zitat      
Als Anfänger möchte ich mir sicher gehen, dass ich das Beispiel verstanden habe. Werde gleich mit 15 Zeiteinheiten das ganze versuchen. Möchte also am Ende 15 Ergebnisse für X und 15 für Y haben.

Da M in dem Fall meine Nebenbedingung ist:

M=zeros (15,3); >

1. Spalte für 0.5 X
2. Spalte für -Y
3. Spalte für F(n-1)

M(1, 1:2) = [-0.5, 1]

Damit fülle ich die Konstanten vor den Variablen auf.

for k = 2:15 >>> Schleife bis 15. Zeile

M(k, Smile = M(k-1, Smile;

>>>>>Alle zeilen wiederholen sich, dabei wird jedesmal k durch das Ergebnis von k-1 ersetzt

M(k, 2*k-1:2*k) = [-0.5, 1];

>>> Das habe ich leider nicht so ganz verstanden?

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

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 27.06.2017, 19:09     Titel:
  Antworten mit Zitat      
Hallo,

die NB müssen x1, y1 bis xn, yn enthalten. F_(n-1) kann nicht verwendet werden, sondern muss über die vorherigen Variablen ausgedrückt werden.

Bei 15 Zeilen:
Code:
M = zeros(15, 30);
M(1, 1:2) = [-0.5, 1];
for k = 2:15
    M(k, :) = M(k-1, :);
    M(k, 2*k-1:2*k) = [-0.5, 1];
end


Zitat:
Das habe ich leider nicht so ganz verstanden?

Damit werden zwei Elemente auf diese Werte gesetzt. Schau dir das ganze am besten mal im Debugger Schritt für Schritt an.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 28.06.2017, 10:01     Titel:
  Antworten mit Zitat      
Ich glaube jetzt habe ich alles um das Problem zu lösen. Bis auf die Grenzen von der Nebenbedingung. Ich erhalte folgende Fehlermeldung. Die Nebenbedingung soll ja einmal kleiner-gleich 4 und einmal größer-gleich 0 sein. Wie kann ich das ganze als ein 15-Zeilen Vektor ausdrücken?

1.JPG
 Beschreibung:

Download
 Dateiname:  1.JPG
 Dateigröße:  39.01 KB
 Heruntergeladen:  287 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

du hast dann jeweils zwei Ungleichungen, also eine Matrix mit 30 Zeilen. Du kannst da z.B. die Matrix M mit geändertem Vorzeichen (weil einmal <=, einmal >=) an die Originalmatrix M anhängen.
Dann musst du einen Vektor der Länge 30 mit 15 Nullen und 15 Vieren erzeugen.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2017, 09:41     Titel:
  Antworten mit Zitat      
Wie meinst du das mit dranhängen?

Ich habe jetzt b umgeändert in:

b=[4;4;4;4;4;4;4;4;4;4;4;4;4;4;4;0;0;0;0;0;0;0;0;0;0;0;0;0;0;0];

Der Rest ist wie oben in der Datei. (intcon = 30)

Ich erhalte nun die folgende Fehlermeldungen für lb und ub:

Length of lower bounds is < length(x); filling in missing lower bounds with -Inf.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 29.06.2017, 10:49     Titel:
  Antworten mit Zitat      
Hallo,

ich sehe nirgends, was du als lb und ub verwendest.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2017, 11:24     Titel:
  Antworten mit Zitat      
In der Datei oben sind beide abgebildet.

lb=zeros(15,1);
ub=ones(15,1);

Vielen Dank nochmal, dass du dir Mühe gibst.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

sorry, hatte ich nicht gesehen. Ich bin Code als .m gewohnt, nicht als Bild ;)

Du hast ja 15 x- und 15 y-Variablen, also insgesamt 30. Dann solltest du entsprechend auch Vektoren der Länge 30 als Schranken angeben.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2017, 13:01     Titel:
  Antworten mit Zitat      
Sorry, als Maschinenbaustudent komme ich mit Codes nicht zurecht. Very Happy

Wow, es hat tatsächlich geklappt. Ich habe jetzt ein Ergebnis raus, aber leider geht der Füllstand in den Minusbereich weil meine Grenze -4 ist.

Ich habe zuerst mit b=[4;4;4;4;4;4;4;4;4;4;4;4;4;4;4]; überall ein Minus hingeschrieben. So hat es leider gar nicht geklappt.

Anschließend habe ich mit N=-M versucht und für N gerechnet. Dann hat er nur Entladen.

Was muss ich denn ändern damit der Füllstand natürlich positiv bleibt?
Private Nachricht senden Benutzer-Profile anzeigen
 
SM6789
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 29.06.2017, 13:39     Titel:
  Antworten mit Zitat      
Ok jetzt habe ich festgestellt, meine Nebenbedingung lautet größer gleich. Ich habe jetzt mit b=[0;0;0;0;0;0;0;0;0;0;0;0;0;0;0;] gerechnet und habe das gleiche Ergebnis wie in Excel rausbekommen. Aber bei 1000 Intervallen wird der Füllstand sehr wahrscheinlich über 4 gehen. Wie kann ich denn die Nebenbedingung nach oben begrenzen? also kleiner gleich?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

Zitat:
Sorry, als Maschinenbaustudent komme ich mit Codes nicht zurecht.

Die wenigsten MATLAB-Nutzer sind Informatiker oder sehen sich als Programmierer.

Nebenbedingungen sind immer in der Form <=. Ich hatte dir nur mal gesagt, wie du >= hinbekommst. Den Trick darfst du dann aber natürlich nur auf die Ungleichungen anwenden, die auch wirklich >= sein sollen.

f(x) >= -4 bedeutet -f(x) <= 4. Du musst also nur die Vorzeichen richtig kombinieren.

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

Forum-Anfänger

Forum-Anfänger


Beiträge: 29
Anmeldedatum: 30.05.17
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 04.07.2017, 10:40     Titel:
  Antworten mit Zitat      
Jetzt habe ich es geschafft die Vorzeichen richtig zu kombinieren und kann den Füllstand kleiner gleich 4 regeln. Füllstand größer gleich 0 habe ich auch hinbekommem. Aber leider kriege ich beide Bedingungen nicht zusammen hin. Wie muss ich da vorgehen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

die Matrizen für A und die Vektoren für b untereinanderhängen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite Zurück  1, 2, 3, 4  Weiter

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