使用fmincon Matlab求解非线性约束的非线性优化问题

时间:2015-05-18 16:31:50

标签: matlab optimization constraints

我试图通过在matlab中应用 fmincon 函数来解决非线性约束非线性优化问题。但是,我收到以下错误:  " 初始用户提供的非线性约束函数评估失败。     FMINCON无法继续。" 我在网上查了很多但我无法修复它。它接缝是一个非常一般的错误信息。 只用3个变量我的问题非常小,但我得到了相同的结果。这是我的职能:

function main()
global x
global y
y(2)=15;
y(3)=15;
a=[0.01;0.05];
opts = optimoptions(@fmincon,'Algorithm','interior-point')
[x,fval] = fmincon(@objfun,a,[],[],[],[],0.01,1,@mycon,opts)
y(1)=x(2)*y(2)+x(3)*y(3);
x
y
fval
end

,其中

function [c,ceq ] = mycon( x )
c=-(x(3)*y(3)+x(2)*y(2))*x(1)+5;
ceq=[];
end 

function fun = objfun( x )
      fun=@(x)(x(2)*y(2)+x(3)*y(3))*(1+(1/x(1)-1)+x(1))+y(2)*(1+     (1/x(2)-1)+x(2))+y(3)*(1+(1/x(3)-1)+x(3));
    end

1 个答案:

答案 0 :(得分:1)

如果您阅读了整个错误,您会看到实际上说:

Index exceeds matrix dimensions.

Error in mycon (line 2)
c=-(x(3)*y(3)+x(2)*y(2))*x(1)+5;

那是因为你的初始条件是a=[0.01;0.05];,但实际上你想要解决3个变量! (或者你在等式中使用其中的3个,例如x(3))。

但是如果你解决了,你会得到错误“未定义的函数y”,这让我觉得你不能使用全局变量作为约束。