用matlab的optimization工具箱遗传算法优化函数,被优化的函数和条件约束如下,请问为会有报错(图片)

学习 时间:2026-03-30 15:29:36 阅读:9914
用matlab的optimization工具箱遗传算法优化函数,被优化的函数和条件约束如下,请问为会有报错(图片)以下是要优化的目标函数的m文件function F=f1(x)F=500*x(1)*sin(atan(x(5)/x(7))+acos((x(5)^2+x(7)^2+x(3)^2+x(4)^2-x(6)^2)/(2*sqrt((x(5)^2+x(7)^2)*(x(3)^2+x(4)^2))))-atan(x(3)/x(4))+acos((x(1)*cos(atan(x(5)/x(7))+acos((x(5)^2+x(7)^2+x(3)^2+x(4)^2-x(6)^2)/(2*sqrt((x(5)^2+x(7)^2)*(x(3)^2+x(4)^2))))-atan(x(3)/x(4)))+x(8)-x(9))/x(2)))/(3*sin(acos((x(1)*cos(atan(x(5)/x(7))+acos((x(5)^2+x(7)^2+x(3)^2+x(4)^2-x(6)^2)/(2*sqrt((x(5)^2+x(7)^2)*(x(3)^2+x(4)^2))))-atan(x(3)/x(4)))+x(8)-x(9))/x(2)))*sqrt(x(3)^2+x(4)^2-((x(3)^2+x(4)^2+x(6)^2-x(5)^2-x(7)^2)/(2*x(6)))^2));end以下是约束方程的m文件function [c,ceq]=f2(x)c=[];ceq=x(1)*(sin(atan(x(5)/x(7))+acos((x(5)^2+x(7)^2+x(3)^2+x(4)^2-(1.492*x(6))^2)/(2*sqrt((x(5)^2+x(7)^2)*(x(3)^2+x(4)^2))))-atan(x(3)/x(4)))-sin(atan(x(5)/x(7))+acos((x(5)^2+x(7)^2+x(3)^2+x(4)^2-x(6)^2)/(2*sqrt((x(5)^2+x(7)^2)*(x(3)^2+x(4)^2))))-atan(x(3)/x(4))))+x(2)*(sin(acos((x(1)*cos(atan(x(5)/x(7))+acos((x(5)^2+x(7)^2+x(3)^2+x(4)^2-(1.492*x(6))^2)/(2*sqrt((x(5)^2+x(7)^2)*(x(3)^2+x(4)^2))))-atan(x(3)/x(4)))+x(8)-x(9))/x(2)))-sin(acos((x(1)*cos(atan(x(5)/x(7))+acos((x(5)^2+x(7)^2+x(3)^2+x(4)^2-x(6)^2)/(2*sqrt((x(5)^2+x(7)^2)*(x(3)^2+x(4)^2))))-atan(x(3)/x(4)))+x(8)-x(9))/x(2))))-471;end补充:我的函数和约束方程都是没问题的,肯定有相应的实数解满足约束方程,可偏偏提示“Constraint function must return real value”

最佳回答

内向的鸭子

无情的帽子

2026-03-30 15:29:36

你的约束函数有问题,x如果超出了反正切的默认范围,就会出现复数此时你的程序就没办法通过复数的ceq进行计算了 再问: 我都强调了 函数肯定没问题 肯定有相应实数解 再答: 你强调是你的事情,但是你ceq确实有可能出现复数

最新回答共有2条回答

  • 朴素的冰淇淋
    回复
    2026-03-30 15:29:36

    你的约束函数有问题,x如果超出了反正切的默认范围,就会出现复数此时你的程序就没办法通过复数的ceq进行计算了 再问: 我都强调了 函数肯定没问题 肯定有相应实数解 再答: 你强调是你的事情,但是你ceq确实有可能出现复数

上一篇 饕这个字怎么读?

下一篇 服有哪些词语