我试图用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发布于 2015-05-18 17:02:25
如果你读了整个错误,你就会看到它实际上是这样写的:
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”,这使我认为您不能使用全局变量作为约束。
https://stackoverflow.com/questions/30308483
复制相似问题