Nonlinear constraint function with the optimization toolbox
1 visualización (últimos 30 días)
Mostrar comentarios más antiguos
Kai Krickmann
el 7 de Feb. de 2020
Editada: Kai Krickmann
el 4 de Dic. de 2020
First of all thank you for your time!
My goal is to set up a nonlinear constraint related to fluid dynamics. This is about a hydrostatic model, which should be in balance. I would like to calculate all pressures and flows with the help of some measured values. Since the resistance depends on the flow velocity and the pressure, in my opinion the resistances would have to be recalculated after each iteration step.
For this reason, I had to include the calculation of the resistance in the nonlinear function "nonlcon", but the function apparently cannot access the variables in the workspace.
Does anyone have an approach on how to solve this problem?
Error message:
Not enough input arguments.
Error in Main>nonlcon (line 224)
for i = 1 : anzahlpipes * 2
Error in Main (line 217)
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
0 comentarios
Respuesta aceptada
Gifari Zulkarnaen
el 7 de Feb. de 2020
Editada: Gifari Zulkarnaen
el 7 de Feb. de 2020
Seems you have extra parameters beside the optimization input variables.
See these explanation:
I personally like to define those extra parameters as global variables because of the convenience, although others say global variables is somehow troublesome.
For your case, try this (global method):
%% In main script:
global anzahlpipes anzahlnodes pipesmatlaberweitert inzierweitert xgv
% ...
% your main code
% ...
%% In constraint function
function [c,ceq] = nonlcon(x)
global anzahlpipes anzahlnodes pipesmatlaberweitert inzierweitert xgv
% ...
% your constraint function code
% ...
end
Más respuestas (1)
Karthi Ramachandran
el 7 de Feb. de 2020
- Is your function "nonlcon" or "unitdisk" , unit disk has no option to call "anzahlpipes"
- if your nonlcon is a function of 'x' and the others are constants('glgew' and 'xgv') calculated, then supply as '@(x) nonlcon(x,....)'
- The constarint looks like a linear constarint of the form Ax+b . Check it
2 comentarios
Karthi Ramachandran
el 7 de Feb. de 2020
Editada: Karthi Ramachandran
el 7 de Feb. de 2020
If your constriant is of the form Ax=b use "Aeq and beq" option for constarint, instead of nonlinear constarint
for a constarint of this form 2x(1)+x(2)=1 Aeq = [1 2] and beq = 1;
In your case Aeq = glgew and beq = -xgv; if I have understood it right . Pls check your function and pass the parameters correctly . It should work.
Also pls check if it is really necesaru to calvulate the constants inside the function file.
Ver también
Categorías
Más información sobre Problem-Based Optimization Setup en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!