Verfasst am: 27.05.2015, 10:44
Titel: Problem mit "nonlcon" von "fmincon"
Hallo Leute ,
ich bin gerade über meiner Abschlussarbeit mit Matlab. Ich komme gerade leider nicht mit "nonlcon" von "fmincon" zurecht.
Das ist meine Zielfunktion:
Z=∑((u_r+Ri_r-Xi_i )^2+(u_i+Xi_r+Ri_i )^2-U^2 )^2
mit folgenden Nebenbedingungen
R>0
X>0
0.9≤U≤1.1 bei p.u.
5≤ X/R≤20
soweit so gut, ich bekomme die Nebenbedingung "5≤ X/R≤20" nicht hin.
Code:
%Hier ein Ausschnitt aus meinem Programm:
%lb und ub für "fmincon" definieren
lbl = [000.9];
ubl = [InfInf1.1];
%Berechnung der Lastszenarien
myObj = @(x)myLast(ur,ui,ir,ii,x);
[x,fval] = fmincon(myObj,[111.0],[],[],[],[],lbl,ubl,@nonlcon,options);
R = x(1);
X = x(2);
U = x(3);
%mit folgenden Funktionen
function Z = myLast(ur,ui,ir,ii,x)
Z = 0;
rb = x(1);
xb = x(2);
ubn = x(3);
for i=1:11
urb = ur(i);
uib = ui(i);
irb = ir(i);
iib = ii(i);
A = (urb+rb*irb-xb*iib)^2+(uib+xb*irb+rb*iib)^2-ubn^2;
Z = Z + A^2;
end end
function[c,ceq] = nonlcon(x)
c = x(2)/x(1);
ceq = [];
end
Könntet ihr mir vielleicht mit nonlcon helfen? Verstehe nicht wie man ihm die Grenzen gibt. Ohne die Ungleichung bekomme ich schon eine Berechnung, aber diese ist nicht zufriedenstellend.
habe ich jetzt so gemacht und bekomme trotzdem die Fehlermeldung:
Error using optimfcnchk/checkfun (line 333)
User function 'myNonlcon' returned Inf or -Inf when evaluated;
FMINCON cannot continue.
Error in nlconst (line 754)
[nctmp,nceqtmp] = feval(confcn{3},x,varargin{:});
Error in fmincon (line 748)
[X,FVAL,LAMBDA,EXITFLAG,OUTPUT,GRAD,HESSIAN]=...
Error in Kurzschlussszenario (line 5
[x,fval] = fmincon(myObj,[1 1 1.0],[],[],[],[],lbl,ubl,@myNonlcon,options);
Code:
%Berechnung der Lastszenarien
myObj = @(x)myLast(ur,ui,ir,ii,x);
[x,fval] = fmincon(myObj,[111.0],[],[],[],[],lbl,ubl,@myNonlcon,options);
R = x(1);
X = x(2);
U = x(3);
bitte nochmal den kompletten momentanen Code.
Ansonsten wie gesagt: man kann das auch als lineare Ungleichungen umsetzen. Das dürfte effizienter sein und das augenscheinliche Problem bei R = 0 lösen.
%Betrag und Phase in Komplex umbrechnen
for i=1:11
Urad_PF(i) = Uwin_PF(i)*pi/180; %Winkel in rad umrechen
Irad_PF(i) = Iwin_PF(i)*pi/180;
uk(i) = u_PF(i)*exp(1i*Urad_PF(i)); %Realteil und Imaginärtiel berechnen
ik(i) = i_PF(i)*exp(1i*Irad_PF(i));
ur(i) = real(uk(i)); %Real und Imaginärteil filtern
ui(i) = imag(uk(i));
ir(i) = real(ik(i));
ii(i) = imag(ik(i));
end
%Berechnung der Lastszenarien
myObj = @(x)myLast(ur,ui,ir,ii,x);
[x,fval] = fmincon(myObj,[111.0],[],[],[],[],lbl,ubl,@myNonlcon,options);
R = x(1);
X = x(2);
U = x(3);
es ging mir darum, das Problem zu reproduzieren. Das ginge aber nur mit den Daten.
Zitat:
Die linearen Begrenzungen wurden ja schon verwendet.
Damit meinst du vermutlich die Schrankenbedingungen. Ich meine aber, dass du die momentanen nichtlinearen NB wie beschrieben als lineare umschreiben und dann als A und b an fmincon übergeben kannst.
Grüße,
Harald
Hinweise:
- wenn du alle benötigten Daten aus der Excel-Tabelle auf einmal ausliest und denn per Indizierung aufspaltest, sollte es deutlich schneller gehen
- auch die for-Schleife unter "%Betrag und Phase in Komplex umbrechnen " ist unnötig.
Das sind die Daten, ich weiß nicht was man unten noch ändern könnte. Habe gerade mit meinem Betreuer gesprochen und er möchte es mit der Ungleichung gelöst haben :/ ...
es spricht ja auch nichts dagegen, die Ungleichungen zu berücksichtigen.
Ich möchte lediglich darauf hinaus, dass man die Ungleichungen als lineare Ungleichungen angeben kann und sollte. Warum soll man die Ungleichungen in der allgemeinen Form c(x) <= 0 angeben, wenn man sie in linearer Form A*x <= b angeben kann?
Durch die beiden 0en ist das Problem mit Inf bzw -Inf aufgetreten.
Das Programm an sich hat gepasst.
Danke und bis bald
Grüße
Max
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
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.