关于matlab多目标优化的一个问题,希望matlab高手能够帮忙!

首先是目标函数M文件:functionf=myfun(x);rou=7900;G=81000000000;tao=810000000;F1=16390;F2=4000;K... 首先是目标函数M文件:
function f=myfun(x);
rou=7900;
G=81000000000;
tao=810000000;
F1=16390;
F2=4000;
K1=80;
K2=50;
taoo=2000000000;
f=2000*pi*rou/G*(x(2)^4)*((x(3)+x(4)+x(5))^2)/(x(1)^3);

然后是非线性约束函数M文件:
function[c,ceq]=mycoun(x);
c=[8*x(2)*F1/(pi*(x(1)^3))*((4*x(2)-x(1))/(4*x(2)-4*x(1))+0.615*x(1)/x(2))-tao;
8*F1*(x(2)^3)*(x(3)+x(4)+x(5))/(G*(x(1)^3))-x(3)*x(6)-x(4)*x(7)-x(5)*x(8)+(x(3)+x(4)+x(5))*x(1);
4-x(2)/x(1);
x(2)/x(1)-16;
1.3-(taoo*pi*(x(1)^3)+0.75*8*F2*x(2)*((4*x(2)-x(1))/(4*x(2)-4*x(1))+0.615*x(1)/x(2)))/(8*F1*x(2)*((4*x(2)-x(1))/(4*x(2)-4*x(1))+0.615*x(1)/x(2)));
(x(3)*x(6)+x(4)*x(7)+x(5)*x(8))/x(2)-5.3;
atan(x(6)/(pi*x(2)))-9;
atan(x(7)/(pi*x(2)))-9;
atan(x(8)/(pi*x(2)))-9];
ceq=[G*(x(1)^4)/(8*(x(2)^3)*(x(3)+x(4)+x(5)))-K2;
G*(x(1)^4)/(8*(x(2)^3)*x(5))-K1];

最后实在command window里面输入
》》x0=[13;130;2;3;2;1;1;1];
》》lb=[12;120;1;3;1;1;1;1];
》》ub=[20;180;3;5;3;50;50;50];
》》options=optimset('LargeScale','off');
》》[x,fval]=fmincon('myfun',x0,[],[],[],[],lb,ub,'mycoun',options)

运行结果:
Warning: Options LargeScale = 'off' and Algorithm = 'trust-region-reflective' conflict.
Ignoring Algorithm and running active-set method. To run trust-region-reflective, set
LargeScale = 'on'. To run active-set without this warning, use Algorithm = 'active-set'.
> In fmincon at 395
??? Error using ==> fmincon at 600
FMINCON cannot continue because user supplied nonlinear constraint function
failed with the following error:
Undefined function or variable 'F1'.

目标函数公式和约束编辑的应该都没问题,我主要是语法上面 有什么错误,还有那个F1是个常数,明明定义了怎么还报错?谢谢
展开
 我来答
826940218
2013-12-31
知道答主
回答量:10
采纳率:0%
帮助的人:15万
展开全部

  然后是非线性约束函数M文件:此文件中用到的常数要在此函数中定义:如下

  • function[c,ceq]=mycoun(x)
    F1=16390;
    G=81000000000;
    tao=810000000;
    F2=4000;K1=80;K2=50;
    taoo=2000000000;
    c=[8*x(2)*F1/(pi*(x(1)^3))*((4*x(2)-x(1))/(4*x(2)-4*x(1))+0.615*x(1)/x(2))-tao;  
        8*F1*(x(2)^3)*(x(3)+x(4)+x(5))/(G*(x(1)^3))-x(3)*x(6)-x(4)*x(7)-x(5)*x(8)+(x(3)+x(4)+x(5))*x(1); 
        4-x(2)/x(1);  
        x(2)/x(1)-16; 
        1.3-(taoo*pi*(x(1)^3)+0.75*8*F2*x(2)*((4*x(2)-x(1))/(4*x(2)-4*x(1))+0.615*x(1)/x(2)))/(8*F1*x(2)*((4*x(2)-x(1))/(4*x(2)-4*x(1))+0.615*x(1)/x(2))); 
        (x(3)*x(6)+x(4)*x(7)+x(5)*x(8))/x(2)-5.3; 
        atan(x(6)/(pi*x(2)))-9; 
        atan(x(7)/(pi*x(2)))-9;  
        atan(x(8)/(pi*x(2)))-9];
    ceq=[G*(x(1)^4)/(8*(x(2)^3)*(x(3)+x(4)+x(5)))-K2;   
        G*(x(1)^4)/(8*(x(2)^3)*x(5))-K1];

追问
把常数项移到约束函数里面了,可还是不行,请问你能给我运行出来吗?谢谢
tonybus2008
2013-12-31 · TA获得超过655个赞
知道小有建树答主
回答量:295
采纳率:100%
帮助的人:203万
展开全部
在M文件中是不能直接调用其他函数中的常量或是工作空间的常量。这是Undefined function or variable 'F1'.出现的原因
追问
你的意思是常数项必须在command window里面运行吗,,试了还是不行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式