# Nonlinear constraint function with the optimization toolbox

1 visualización (últimos 30 días)
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 comentariosMostrar -1 comentarios más antiguosOcultar -1 comentarios más antiguos

Iniciar sesión para comentar.

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
% ...
% ...
%% In constraint function
function [c,ceq] = nonlcon(x)
global anzahlpipes anzahlnodes pipesmatlaberweitert inzierweitert xgv
% ...
% ...
end
##### 1 comentarioMostrar NingunoOcultar Ninguno
Kai Krickmann el 7 de Feb. de 2020
Yeahhh it works! Thanks a lot!

Iniciar sesión para comentar.

### Más respuestas (1)

Karthi Ramachandran el 7 de Feb. de 2020
1. Is your function "nonlcon" or "unitdisk" , unit disk has no option to call "anzahlpipes"
2. if your nonlcon is a function of 'x' and the others are constants('glgew' and 'xgv') calculated, then supply as '@(x) nonlcon(x,....)'
3. The constarint looks like a linear constarint of the form Ax+b . Check it
##### 2 comentariosMostrar 1 comentario más antiguoOcultar 1 comentario más antiguo
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.

Iniciar sesión para comentar.

### Categorías

Más información sobre Problem-Based Optimization Setup en Help Center y File Exchange.

R2019b

### Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by