使用fmincon进行功能约束优化(在Matlab中)?

时间:2015-11-14 16:28:17

标签: matlab optimization functional-programming constraints

我想为每个x值设置约束,0< = f(x,vctr)< = 100。结果是:

  

???由于功能约束“cnstrnt”,未定义的函数或变量'x'。

虽然它是变量,但fmincon要求x中的cnstrnt值。 x代表多个变量。 bkvctr(常量向量)是常量。编码约束的正确方法是什么?

function [ h ] = f(x,vctr)

g=@(x) (vctr(1,6).*x.^5+vctr(1,5).*x.^4+vctr(1,4).*x.^3+ ...
vctr(1,3).*x.^2+vctr(1,2).*x.^1+vctr(1,1));
h=fzero( @(x)(g(x)-y),0);
end

function [ cc,ceq ] = cnstrnt(x,b,vctr)

for k=1:length(b)*2

       cc(k)=f(x(k),vctr)-100;
       cc(k+1)=-f(x(k),vctr);
end

ceq=[];

end


[result,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN]= fmincon(@(x)obj(x,b,c,L,vctr) ,x0,A,B,Aeq,beq,[],ub,cnstrnt(x,b,vctr),opts);

??? Undefined function or variable 'x'.

1 个答案:

答案 0 :(得分:1)

必须使用@(x)将变量声明为@(x)cnstrnt(x,b,vctr)。然后fmincon可以识别变量并区分常量。

[result,FVAL,EXITFLAG,OUTPUT,LAMBDA,GRAD,HESSIAN]= fmincon(@(x)obj(x,b,c,L,vctr) ,x0,A,B,Aeq,beq,[],ub,@(x)cnstrnt(x,b,vctr),opts);