24小时热门版块排行榜    

查看: 1701  |  回复: 5

如瑜?运�

银虫 (初入文坛)

[求助] matlab优化设计目标函数复杂,求帮助 已有2人参与

我优化程序的本意是想在两条曲线取j个点,在y相等的情况下,两条曲线对应的x的差的总和值最小,但是好像目标函数太复杂,计算出的结果就迭代一次,根本就不是想要的结果,求高手帮忙呀,看看程序的问题再哪里,我用的是fmincon的优化,下面是我的程序
主函数
CODE:
clc;clear;
%format long;
A=[-1 0;0 -1];b=[0;0];
%A=[0 -zp/rp;0 zp/rp;1 0;-1 0];b=[-c1;c2;rp*(sin(pi/zp))/d1;-rp*(sin(pi/zp))/d2];
%lb=[1;0.6];ub=[7;3];
[x,fval,exitflag,output]=fmincon(@xiuxingOptimFun,[0.1 0.1],A,b,[],[],[0;0],[1.5;1.5],@xiuxingConFun)
%画图
rp=72.5;
rrp=4;
a=1.4;
zc=43;
zp=44;
data=0.14*pi/180;
kd1=a*zp/(rp);
for pha=0:0.002*pi/zc:pi/zc
s1=1+kd1^2-2*kd1.*cos(pha);
i=zp/zc;
xd5=(rp-rrp.*s1.^(-1/2)).*cos((1-i).*pha-data)-(a/rp).*(rp-zp*(rrp).*s1.^(-1/2)).*cos(i.*pha+data);
yd5=(rp-rrp.*s1.^(-1/2)).*sin((1-i).*pha-data)+(a/rp).*(rp-zp*(rrp).*s1.^(-1/2)).*sin(i.*pha+data);
xd7=(rp-rrp.*s1.^(-1/2)).*cos((1-i).*pha)-(a/rp).*(rp-zp*(rrp).*s1.^(-1/2)).*cos(i.*pha);
yd7=(rp-rrp.*s1.^(-1/2)).*sin((1-i).*pha)+(a/rp).*(rp-zp*(rrp).*s1.^(-1/2)).*sin(i.*pha);
%plot(x,y,'-','linewidth',3);
%plot(x,y,'-');
%hold on
kd2=a*zp/(rp+x(2));
s2=1+kd2^2-2*kd2.*cos(pha);
xd6=(rp+x(2)-(rrp+x(1)).*s2.^(-1/2)).*cos((1-i).*pha)-(a/(rp+x(2))).*(rp+x(2)-zp*(rrp+x(1)).*s2.^(-1/2)).*cos(i.*pha);
yd6=(rp+x(2)-(rrp+x(1)).*s2.^(-1/2)).*sin((1-i).*pha)+(a/(rp+x(2))).*(rp+x(2)-zp*(rrp+x(1)).*s2.^(-1/2)).*sin(i.*pha);
plot(xd5,yd5,'r');
hold on
plot(xd6,yd6);
hold on
plot(xd7,yd7,'g');
hold on
end

下面这个是目标函数
CODE:
function y=xiuxingOptimFun(x)

rp=72.5;
rrp=4;
a=1.4;
zc=43;
zp=44;
P=zeros(1,10000);
xd1=P;
yd1=P;
xd2=P;
yd2=P;
yd3=P;
yd4=0;
m=1;
j=1;
data=0.14*pi/180;
kd1=a*zp/(rp);
for pha=0:0.0002*pi/zc:pi/zc
s1=1+kd1^2-2.*kd1.*cos(pha);
i=zp/zc;
xd1(j)=(rp-rrp.*s1.^(-1/2)).*cos((1-i).*pha-data)-(a/rp).*(rp-zp*(rrp).*s1.^(-1/2)).*cos(i.*pha+data);
yd1(j)=(rp-rrp.*s1.^(-1/2)).*sin((1-i).*pha-data)+(a/rp).*(rp-zp*(rrp).*s1.^(-1/2)).*sin(i.*pha+data);

%plot(x,y,'-','linewidth',3);
%plot(x,y,'-');
%hold on
kd2=a*zp./(rp+x(2));
s2=1+kd2^2-2.*kd2.*cos(pha);
xd2(j)=(rp+x(2)-(rrp+x(1)).*s2.^(-1/2)).*cos((1-i).*pha)-(a/(rp+x(2))).*(rp+x(2)-zp*(rrp+x(1)).*s2.^(-1/2)).*cos(i.*pha);
yd2(j)=(rp+x(2)-(rrp+x(1)).*s2.^(-1/2)).*sin((1-i).*pha)+(a/(rp+x(2))).*(rp+x(2)-zp*(rrp+x(1)).*s2.^(-1/2)).*sin(i.*pha);
j=j+1;
end
for k=1:1:j-1
    for o=1:1:j-1
       if(yd1(k)-yd2(o)<=0.01)
          yd3(m)=abs(xd1(k)-xd2(o));
          yd4=yd4+yd3(m);
          m=m+1;
       end
    end
end
%plot(x,y,'-','linewidth',3);
%plot(x,y,'-');
%hold on
y=yd4;

约束条件
CODE:
function [c,ceq]=xiuxingConFun(x)
c=[];
ceq=x(1)-x(2)-0.02;

回复此楼

» 猜你喜欢

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

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

如瑜?运�

银虫 (初入文坛)

怎么没人理呀,求帮助
2楼2014-12-08 15:14:59
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

dingd

铁杆木虫 (职业作家)

【答案】应助回帖

把你的问题用文字图片简明扼要描述清楚,已知参数、数据、目标函数、约束条件、待求参数等,直接放Matlab代码不知道有几个人愿意根据代码去还原原问题?
3楼2014-12-08 16:45:23
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

月只蓝

主管区长 (职业作家)

【答案】应助回帖

???????:
2?: Originally posted by ?????? at 2014-12-08 15:14:59
????????????????

???????????ga?????
???????1stopt?????????
MATLAB、MS小问题、普通问题请发帖求助!时间精力有限,恕不接受无偿私信求助。
4楼2014-12-08 17:05:49
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

如瑜?运�

银虫 (初入文坛)

引用回帖:
3楼: Originally posted by dingd at 2014-12-08 16:45:23
把你的问题用文字图片简明扼要描述清楚,已知参数、数据、目标函数、约束条件、待求参数等,直接放Matlab代码不知道有几个人愿意根据代码去还原原问题?

您好,优化程序的本意是曲线1(xd1,yd1),与曲线2(xd2,yd2),方程为
xd1(j)=(rp-rrp.*s1.^(-1/2)).*cos((1-i).*pha-data)-(a/rp).*(rp-zp*(rrp).*s1.^(-1/2)).*cos(i.*pha+data);
yd1(j)=(rp-rrp.*s1.^(-1/2)).*sin((1-i).*pha-data)+(a/rp).*(rp-zp*(rrp).*s1.^(-1/2)).*sin(i.*pha+data);
xd2(j)=(rp+x(2)-(rrp+x(1)).*s2.^(-1/2)).*cos((1-i).*pha)-(a/(rp+x(2))).*(rp+x(2)-zp*(rrp+x(1)).*s2.^(-1/2)).*cos(i.*pha);
yd2(j)=(rp+x(2)-(rrp+x(1)).*s2.^(-1/2)).*sin((1-i).*pha)+(a/(rp+x(2))).*(rp+x(2)-zp*(rrp+x(1)).*s2.^(-1/2)).*sin(i.*pha);

这两段曲线上面分别有j个点,使用以下的循环嵌套,判断在yd1=yd2相等的情况下,xd1-xd2的差值加起来最小
for k=1:1:j-1
    for o=1:1:j-1
       if(yd1(k)-yd2(o)<=0.01)
          yd3(m)=abs(xd1(k)-xd2(o));
          yd4=yd4+yd3(m);
          m=m+1;
       end
    end
end
最后输出yd4的值作为目标函数,但是好像目标函数太复杂,计算出的结果就迭代一次,这个您看懂了吗,求高手帮忙
5楼2014-12-09 14:36:42
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

如瑜?运�

银虫 (初入文坛)

引用回帖:
4楼: Originally posted by 月只蓝 at 2014-12-08 17:05:49
用遗传算法函数ga试试。
或者换用1stopt软件试试。...

我试过用ga算法了,但是结果依旧不理想,,另外那个软件我没用过呀
6楼2014-12-09 14:38:54
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 如瑜?运� 的主题更新
信息提示
请填处理意见