我试图通过在matlab中应用fmincon函数来解决非线性约束的非线性优化问题 . 但是,我收到以下错误:“初始用户提供的非线性约束函数评估失败.FININCON无法继续 . ”我在网上查了很多但我无法修复它 . 它接缝是一个非常一般的错误信息 . 只用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 回答
如果您阅读了整个错误,您会看到实际上说:
那是因为你的初始条件是
a=[0.01;0.05];
但你实际上想要解决3个变量! (或者你在方程式中使用其中的3个,例如x(3)
) .但是如果你解决了,你会得到错误“未定义函数
y
”,这让我觉得你不能使用全局变量来约束 .