使用 fmincon Matlab 求解具有非线性约束的非线性优化
solving Non-linear optimization with non-linear constraint using fmincon Matlab
我正在尝试通过应用 解决具有 非线性约束 的 非线性优化 问题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
如果您阅读了整个错误,您会发现实际上是这样说的:
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)
)。
但是,如果你解决了这个问题,你会得到错误 "undefined function y
",这让我认为你不能使用全局变量作为约束。
我正在尝试通过应用 解决具有 非线性约束 的 非线性优化 问题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
如果您阅读了整个错误,您会发现实际上是这样说的:
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)
)。
但是,如果你解决了这个问题,你会得到错误 "undefined function y
",这让我认为你不能使用全局变量作为约束。