Fmincon bug之 Nonlinear constraint function is undefined at initial point. Fmincon cannot continue.

在使用Fmincon求解最优化问题时,经常由于初始点设置,或者是非线性约束构建问题,出现“Nonlinear constraint function is undefined at initial point. Fmincon cannot continue.”错误

在这个时候,可以通过检查nonlinear约束函数的输出数据来判断在什么位置出现问题;

例如:

 costFun = @(FB)feasible_fun(FB,shapes);
 nonlCon = @(FB)feasible_nonlcon(FB,shapes,aerfa,omega);
 [A,B,Aeq,Beq] = feasible_lcon(FB,shapes,aerfa,omega);
 [lbd,ubd] = feasible_bound(FB,shapes);

以上这四个式子分别构建了fmincon中所需要的目标函数,非线性约束,线性约束以及上下界约束

当报错时,我们可以用:

nonlCon = feasible_nonlcon(FB,shapes,aerfa,omega)

来查看非线性约束的输出结果(公式末尾不加分号就会直接在命令窗口输出该函数的返回结果),例如我报错后的输出结果就是:

可以看到我的输出结果中存在inf和NaN,NaN在非线性中是非法的存在,由此我们可以找到非线性

约束的函数中查看是哪个约束出现的问题;

C6 = 1/f(i,j)-1/yita1-Be(6);

我这里很显然是初始值赋值有问题,f的初始值应该大于零。

修改完后,代码跑通。当然,可能不仅仅因为这个问题导致出错,以上是一种matlab的debug方法,大家可以借鉴。

 

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值