作业帮 > 综合 > 作业

紧急,谁知道这个matlab优化程序错在哪里了?

来源:学生作业帮 编辑:作业帮 分类:综合作业 时间:2024/05/18 01:43:19
紧急,谁知道这个matlab优化程序错在哪里了?
function y=myfunction(x);
y=0.785398*(4.75*x(1)*x(2)^2*x(3)^2+85*x(1)*x(2)*x(3)^2-85*x(1)*x(3)^2+0.92*x(1)*x(6)^2-x(1)*x(5)^2+0.8*x(1)*x(2)*x(3)*x(6)-1.6*x(1)*x(3)*x(6)+x(4)*x(5)^2+x(4)*x(6)^2+280*x(5)^2+320*x(6)^2);
function[c1,c2]=myfunctionb(x);
T(1)=2674000;K=1.3;i=5;
Y(1)=0.169+0.006666*x(2)-0.0000854*x(2)^2;
Y(2)=0.2824+0.0003539*i*x(2)-0.000001576*(i*x(2))^2;
F(n)=2*T(1)/x(2)/x(3)/cosa; E=2*10^5; a=20; J=pi*x(5)^4/64;
M=T(1)*x(4)/x(2)/x(3)*cosa; a(1)=0.58;
W(1)=0.1*x(5)^3; W(2)=0.1*x(6)^3;
g(1)=2-x(3);
g(2)=x(1)/35/x(3)-1;
g(3)=1-x(1)/16/x(3);
g(4)=100-x(5);
g(5)=x(5)-150;
g(6)=130-x(6);
g(7)=x(6)-200;
g(8)=17-x(2);
g(9)=x(2)*x(3)/300-1;
g(10)=sqrt((i+1)*K*T1/x(1)/(x(2)*x(3))^2*i)*670/855.5-1;
g(11)=2*K*T(1)/261.7/x(1)/x(2)/x(3)^2/Y(1)-1;
g(12)=2*K*T(1)/213.3/x(1)/x(2)/x(3)^2/Y(2)-1;
g(13)=F(n)*x(4)^2/48/0.003/E/J-1;
g(14)=sqrt(M^2+(a(1)*T(1))^2)/55/W(2)-1;
g(15)=sqrt(M^2+(a(1)*T(1))^2)/55/W(2)-1;
g(16)=(x(1)-x(4)+0.25*x(6))/40+1;
c1=[ g(3),g(4),g(10),g(11),g(12),g(13),g(14),g(15),g(16),g(17),g(18),g(19)];
c2=0;
x0=[230,210,8,420,120,160];
[x,y]=fmincon('myfunction',x0,[],[],[],[],[],[],'myfunctionb')
cx=myfunctionb(x);
运行不出来啊
呃……你这里有一些个小问题,我先给你指出来
首先,就我用这个fmincon的经验,目标函数,约束函数,和主函数是不能放在一起的,要分开放,我不知道你这个贴上来的是一起的还是分开的,总之,一定放到三个m文件里,或者主函数在命令窗口里也行.
第二,你的F(n)=2*T(1)/x(2)/x(3)/cosa; E=2*10^5; a=20; J=pi*x(5)^4/64;行中,cosa是cos(a)吧?还有,你这个a现在没有定义,要把a=20写在前面
第三,F(n)=2*T(1)/x(2)/x(3)/cosa; E=2*10^5; a=20; J=pi*x(5)^4/64;F(n)是什么,我看了一下用F就行吧?g(13)=F(n)*x(4)^2/48/0.003/E/J-1;这里我也改成F了
第四,g(10)=sqrt((i+1)*K*T1/x(1)/(x(2)*x(3))^2*i)*670/855.5-1;T1忘了加括号了
第五,c1=[ g(3),g(4), g(10),g(11),g(12),g(13),g(14),g(15),g(16),g(17),g(18),g(19)];这里的g(17),g(18),g(19)根本没有定义啊,写多了吧,给你删掉了
然后我运行之后一直没有结果,怀疑约束函数有问题,还有啊,你的这个c1里面没包括的那些g是什么情况呢,g(4)到g(8)你没包括在c1里,也没有写到主函数中的线性约束处.
楼主参考一下以上问题然后改一下再试试吧,再有问题欢迎追问~
再问: 打出来是这样的 高手啊 救命 Input argument "x" is undefined. Error in ==> myfunction at 3 y=0.785398*(4.75*x(1)*x(2)^2*x(3)^2+85*x(1)*x(2)*x(3)^2-85*x(1)*x(3)^2+0.92*x(1)*x(6)^2-x(1)*x(5)^2+0.8*x(1)*x(2)*x(3)*x(6)-1.6*x(1)*x(3)*x(6)+x(4)*x(5)^2+x(4)*x(6)^2+280*x(5)^2+320*x(6)^2);
再答: 我知道,所以让你把这三个程序分开放,把function y=myfunction(x); y=0.785398*(4.75*x(1)*x(2)^2*x(3)^2+85*x(1)*x(2)*x(3)^2-85*x(1)*x(3)^2+0.92*x(1)*x(6)^2-x(1)*x(5)^2+0.8*x(1)*x(2)*x(3)*x(6)-1.6*x(1)*x(3)*x(6)+x(4)*x(5)^2+x(4)*x(6)^2+280*x(5)^2+320*x(6)^2); 保存成myfunction.m文件 然后从function[c1,c2]=myfunctionb(x);到后面c2=0;保存成myfunctionb.m文件 把最后剩下的在command window里输入 这样,然后你就发现我说的后面几个问题,一一改吧
再问: x0=[30,210,8,420,120,160]; [x,y]=fmincon('myfunction',x0,[],[],[],[],[],[],'myfunctionb') cx=myfunctionb(x); 这个fmincon怎么分开呢 谢谢高手
再答: 呃,我的意思是,把x0=[30,210,8,420,120,160]; [x,y]=fmincon('myfunction',x0,[],[],[],[],[],[],'myfunctionb') cx=myfunctionb(x); 这三行的东西复制到命令窗口里,在你的matlab里面有一个command window,复制进去回车就好。 还有fmincon里面这两个单引号我不知道这么用行不行,我一般是 [x,y]=fmincon(@myfunction,x0,[],[],[],[],[],[],@myfunctionb) 对,提醒一下我上一次说的那两个m文件,在你把内容粘贴进去之后别忘了保存 觉得有帮助请采纳~~多谢~~