作业帮 > 综合 > 作业

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

来源:学生作业帮 编辑:灵鹊做题网作业帮 分类:综合作业 时间:2024/05/02 07:06:50
用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”
用matlab的optimization工具箱遗传算法优化函数,被优化的函数和条件约束如下,请问为会有报错(图片)
你的约束函数有问题,x如果超出了反正切的默认范围,就会出现复数
此时你的程序就没办法通过复数的ceq进行计算了
再问: 我都强调了 函数肯定没问题 肯定有相应实数解
再答: 你强调是你的事情,但是你ceq确实有可能出现复数