首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用fmincon Matlab求解非线性约束的非线性优化

用fmincon Matlab求解非线性约束的非线性优化
EN

Stack Overflow用户
提问于 2015-05-18 16:31:50
回答 1查看 1.4K关注 0票数 1

我试图用matlab中的fmincon函数来求解具有非线性约束的非线性优化问题。但是,我得到了以下错误:“初始用户提供的非线性约束函数评估失败. FMINCON不能继续.”我经常上网,但我无法修复它。它的接缝是一个非常普遍的错误信息。我用3个变量把我的问题做得很小,但我还是得到了同样的结果。以下是我的职责:

代码语言:javascript
复制
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

哪里

代码语言:javascript
复制
function [c,ceq ] = mycon( x )
c=-(x(3)*y(3)+x(2)*y(2))*x(1)+5;
ceq=[];
end 

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-18 17:02:25

如果你读了整个错误,你就会看到它实际上是这样写的:

代码语言:javascript
复制
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”,这使我认为您不能使用全局变量作为约束。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30308483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档