24小时热门版块排行榜    

查看: 914  |  回复: 5

老张666

新虫 (初入文坛)

[求助] MATLAB优化问题已有2人参与

我是初学者,请教一个问题,在做无约束优化时,zeros(1,16)这个1和16 是怎么来的啊?
我查了很多资料,都没有解释的
另外这样写目标函数,约束函数和主函数对不对?
目标函数:
function f=mubiaohanshou(x)      
OM=x(1);
ON=x(2);
F1=x(3);
OO1=0.55;
O1O2=0.55;
m1=23.67;
m2=11.7;
m3=7.9;
m4=57.9;
OG1=0.415;
OG2=0.26;
for i=4:10;%大臂转角在30°-90°范围时
    alfa(i)=(i-1)*10*pi/180;
    j=1:13;%机械手小臂转角在0°-120°
    beta(j)=(j-1)*10*pi/180;
    MN(i)=sqrt(x(1)^2+x(2)^2-2*x(1)*x(2)*cos(0.5*pi-alfa(i)));
    Ld(i)=OG1*cos(alfa(i));
    Lx(j)=OO1*cos(alfa(i)+O1G2*sin(beta(j)));
    Lf(j)=OO1*cos(alfa(i)+O1O2*sin(beta(j)));
    Lp(i)=(x(1)*x(2)*sin(0.5*pi-alfa(i)))/MN(i);
    Md(i)=m1*Ld(i);
    Mx(j)=m2*Lx(j);
    Mk(j)=m3*Lf(j);
    Mf(j)=m4*Lf(j);
    Mp(i)=2*x(3)*Lp(i);
    ditam1(i)=Md(i)+Mx(j)+Mk(j)-Mp(i);
    ditam2(i)=Md(i)+Mx(j)+Mk(j);
    ditam3(i)=Md(i)+Mx(j)+M(j)-Mp(i);
    ditam4(i)=Md(i)+Mx(j)+M(j);
    end
for i=11:16;%大臂转角在90°-150°范围时
    alfa(i)=(i-1)*10*pi/180;
    j=1:16;%机械手小臂转角在0°-150°
    beta(j)=(j-1)*10*pi/180;
    MN(i)=sqrt(x(1)^2+x(2)^2-2*x(1)*x(2)*cos(alfa(i)-0.5*pi));
    Ld(i)=OG1*cos(pi-alfa(i));
    Lx(j)=abs(OG1*cos(pi-alfa(i))-O1G2*sin(beta(j)));
    Lf(j)=abs(OO1*cos(pi-alfa(i)-O1O2*sin(beta(j))));
    Lp(i)=(x(1)*x(2)*sin(alfa(i)-0.5*pi))/MN(i);
    Md(i)=m1*Ld(i);
    Mx(j)=m2*Lx(j);
    Mk(j)=m3*Lf(j);
    Mf(j)=m4*Lf(j);
    Mp(i)=2*x(3)*Lp(i);
   ditam1(i)=Md(i)+Mx(j)+Mk(j)-Mp(i);
   ditam2(i)=Md(i)+Mx(j)+Mk(j);
   ditam3(i)=Md(i)+Mx(j)+M(j)-Mp(i);
   ditam4(i)=Md(i)+Mx(j)+M(j);
f1=max(ditam1(i));
f2=max(ditam2(i));
f3=max(ditam3(i));
f4=max(ditam4(i));
end
f=max(f1,f3);
约束函数:
function[g,ceq]=yueshuhanshu(x)   
g(1)=0-x(1);
g(2)=x(1)-1000;
g(3)=10-x(2);
g(4)=x(2)-40;
g(5)=10-x(3);
g(6)=x(3)-500;
ceq=[];
主函数:
x0=[50;20;30];
A=[-1,0,0;1,0,0;0,-1,0;0,1,0;0,0,-1;0,0,1];
b=[0,1000,-10,40,-10,500];
Aeq=[];
beq=[];
lb=[0;10;10];
ub=[1000;40;500];
[x,fn]=fmincon(@zhulijixieshoumubiaohanshu,x0,A,b,Aeq,beq,lb,ub,@zhulijixieshouyueshuhanshu);
disp('最优解')
fprintf('  x(1)=%3.4f  \n',x(1))
fprintf('  x(2)=%3.4f  \n',x(2))
fprintf('  x(3)=%3.4f  \n',x(3))
fprintf('  f=%6.4f  \n',f)
请指教,谢谢
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chendequan

铁虫 (小有名气)

【答案】应助回帖

感谢参与,应助指数 +1
约束函数不用写了吧,你现在写的就是未知量上下限
QQ:516477448,真心帮助解决MATLAB相关问题,提供详细资料,Word文档明确具体问题及要求,尽力而为!
2楼2016-12-10 10:42:32
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

tuburfransth

金虫 (正式写手)

【答案】应助回帖

感谢参与,应助指数 +1
zeros(1,16)应该是搜索的起始点,16应该是你有16个参数需要优化

发自小木虫Android客户端
3楼2016-12-10 11:20:34
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

老张666

新虫 (初入文坛)

引用回帖:
2楼: Originally posted by chendequan at 2016-12-10 10:42:32
约束函数不用写了吧,你现在写的就是未知量上下限

约束函数不写行吗?还是在主函数里把上下限去掉?
我写的程序还有其它问题吗?
4楼2016-12-10 15:18:03
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

老张666

新虫 (初入文坛)

引用回帖:
3楼: Originally posted by tuburfransth at 2016-12-10 11:20:34
zeros(1,16)应该是搜索的起始点,16应该是你有16个参数需要优化

起始点不是通过x0来定义的吗?
5楼2016-12-10 15:20:20
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

chendequan

铁虫 (小有名气)

【答案】应助回帖

内容已删除
QQ:516477448,真心帮助解决MATLAB相关问题,提供详细资料,Word文档明确具体问题及要求,尽力而为!
6楼2016-12-11 10:46:36
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 老张666 的主题更新
信息提示
请填处理意见