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

Optimierung von zwei (Ziel-)Funktionen mit zwei Unbekannten

 

Maveric_1993
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2019, 12:29     Titel: Optimierung von zwei (Ziel-)Funktionen mit zwei Unbekannten
  Antworten mit Zitat      
Hallo,

ich bin noch sehr neu im Thema "MatLab", habe aber zu meinem Lösungsproblem keine für mich verständliche Antwort in der MatLab Documentation, in MathWorks oder in diesem Forum hier gefunden. Confused

Folgendes Problem stellt sich mir derzeit:

Funktion A ist von den unbekannten Variablen x und y abhängig.
Funktion B ist ebenfalls von den unbekannten Variablen x und y abhängig.

x und y haben einen definierten Bereich, in dem diese einen sinnvollen Wert darstellen.

Die Funktionen A und B sollen so lange mithilfe der Variablen x und y optimiert werden, bis die Funktionen den Wert A_Ziel und B_Ziel annehmen.

Im Grunde würde sich die Lösung meines Problems als die Schnittpunkte von zwei 3D-Plots (je eines für Funktion A und B) in Abhängigkeit von x und y graphisch zeigen lassen.

Ich bin mir sicher, dass es eine Lösung hierfür gibt - benötige nur den richtigen Denkanstoß! Danke! Smile
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: 10.06.2019, 12:45     Titel:
  Antworten mit Zitat      
Hallo,

mein Vorschlag wäre lsqcurvefit .
Wenn du das schon versucht hast, bitte konkrete Fragen dazu stellen.

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
 
Maveric_1993
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.06.2019, 14:09     Titel: Optimierung von zwei (Ziel-)Funktionen mit zwei Unbekannten
  Antworten mit Zitat      
Die Frage ist, wie ich einen Wert für x und y errechnen kann, unter der Prämisse, dass die beiden Funktion A und B erfüllt sind.

lsqcurvefit habe ich tatsächlich noch nicht versucht. Bei einem Blick in die Syntax wird mir jedoch nicht klar, wie mir lsqcurvefit weiterhelfen sollte.

x = lsqcurvefit(fun,x0,xdata,ydata)

Zwar kann ich die Werte für x und y als "xdata" und "ydata" definieren. Ich habe jedoch nicht nur eine Zielfunktion (hier "fun"), sondern zwei Funktionen, die erfüllt sein müssen ("A" und "B").

Um es etwas konkreter anhand von Zahlen zu machen:

Code:

x = 0.03:0.001:0.10;
y = 0:0.01:0.99;


A = -(2531487*x - 32500*y + 18150*y*x)/(2449350*y + 2500000*y*x - 2531487);

B = -(63724031250000*y^3*x + 63082675625000*y^3 - 3228937500000000*y^2*x^2-...
    3311695168125000*y^2*x - 146082557115000*y^2 + 3618641250000000*y*x^2+...
    5260744592887500*y*x + 118467262823850*y - 1996718598582750*x...
    - 35740110645036)/(22159375000000*y^3*x + 21710426062500*y^3 +...
    478125000000000*y^2*x^2 + 2021799375000000*y^2*x +...
    1499451621945000*y^2 - 2097969851250000*y*x - 3154052370264075*y + 1634148739948095);

 


Dabei sollen die Werte von x und y so gewählt werden, dass A den Wert 0.10 und B den Wert 0.02 annimmt.
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: 10.06.2019, 15:02     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
Zwar kann ich die Werte für x und y als "xdata" und "ydata" definieren.

Keine gute Idee. xdata ist dein x und y, ydata sind die Sollwerte von A und B.

Zitat:
Ich habe jedoch nicht nur eine Zielfunktion (hier "fun"), sondern zwei Funktionen, die erfüllt sein müssen ("A" und "B").

Die beiden Funktionswerte zu einem Vektor zusammenfassen, und es passt. Die Abweichung zu den Sollwerte wird dann minimiert, und wenn es eine Lösung der Gleichung gibt, dann ist dieses Minimum 0.

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
 
Maveric_1993
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.06.2019, 18:09     Titel:
  Antworten mit Zitat      
Zuerst einmal vielen Dank, Harald. Grundsätzlich verstanden.

Nur verstehe ich noch nicht, wie ich xdata als x UND y gleichzeitig definieren kann. Denn sowohl x als auch y ist ja ein eigener Vektor.

Ähnlich ist es auch bei ydata.

Code:
x = 0.03:0.001:0.10;
y = 0:0.01:0.99;

A_Soll = 0.10;
B_Soll = 0.02;
 


Kannst Du mir die Befüllung der Funktion an obigen Beispiel für x, y und A_Soll, B_Soll erläutern?

Die Funktionswerte zu einem Vektor zusammenzufassen bekomme ich hin.
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: 11.06.2019, 18:40     Titel:
  Antworten mit Zitat      
Hallo,

mir ist bewusst geworden, dass lsqnonlin geeigneter ist.

Die Funktion muss so aussehen:
Code:
function F = myfun(p)
x = p(1);
y = p(2);

% A und B berechnen
F = [A - 0.1; B - 0.02];

und dann
Code:
x0 = [0.065; 0.5];
lb = [0.03; 0];
ub = [0.1; 0.99];
x = lsqnonlin(@myfun,x0,lb,ub)


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
 
Maveric_1993
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.06.2019, 09:43     Titel:
  Antworten mit Zitat      
Mein Code sieht nun folgendermaßen aus:

Code:
clear;
clc;

% Definiere Wertebereich für x und y
x = 0.03:0.001:0.10;
y_Strich = 0:0.01:0.99;
y = y_Strich';

% Definiere Funktion A
A = -(2531487.*x - 32500.*y + 18150.*y.*x)./(2449350.*y + 2500000.*y.*x - 2531487);

% Definiere Funktion B
B = -(63724031250000.*y.^3.*x + 63082675625000.*y.^3 - 3228937500000000.*y.^2.*x.^2-...
    3311695168125000.*y.^2.*x - 146082557115000.*y.^2 + 3618641250000000.*y.*x.^2+...
    5260744592887500.*y.*x + 118467262823850.*y - 1996718598582750.*x...
    - 35740110645036)./(22159375000000.*y.^3.*x + 21710426062500.*y.^3 +...
    478125000000000.*y.^2.*x.^2 + 2021799375000000.*y.^2.*x +...
    1499451621945000.*y.^2 - 2097969851250000.*y.*x - 3154052370264075.*y + 1634148739948095);

x0 = [0.065; 0.5];
lb = [0.03; 0];
ub = [0.1; 0.99];
z = lsqnonlin(@myfun,x0,lb,ub)


Die Funktion habe ich wie von Dir vorgeschlagen definiert:

Code:
function F = myfun(p)
x = p(1);
y = p(2);

% A und B berechnen
F = [A - 0.1; B - 0.02];


Leider erhalte ich noch kein Ergebnis, sondern eine Fehlermeldung:

Code:
Error in myfun (line 6)
F = [A - 0.1; B - 0.02];

Error in lsqnonlin (line 205)
            initVals.F = feval(funfcn{3},xCurrent,varargin{:});

Error in Code (line 23)
z = lsqnonlin(@myfun,x0,lb,ub)

Caused by:
    Failure in initial objective function evaluation. LSQNONLIN cannot continue.


Wie kann ich den Fehler beheben, der ja offensichtlich aus der Funktion heraus entsteht?
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: 12.06.2019, 18:27     Titel:
  Antworten mit Zitat      
Hallo,

die Berechungen von A und B müssen in myfun rein. Ich hatte das nur nicht dorthin kopiert.

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
 
Maveric_1993
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 10.06.19
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.06.2019, 15:48     Titel:
  Antworten mit Zitat      
Vielen, vielen Dank. Das hat so funktioniert!
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 - 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.