首页 文章

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

提问于
浏览
1

我试图通过在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 回答

  • 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 ”,这让我觉得你不能使用全局变量来约束 .

相关问题