声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 8227|回复: 35

[车辆工程] 悬置系统优化

  [复制链接]
发表于 2010-11-10 15:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
悬置系统合理分配频率范围,以解耦率为目标函数的情况下,如何优化悬置刚度。
自己一个人实在是解决不了了,所以请大家帮忙。
我仔细研究过fmincom与fgoalattain这2个函数,也做过一些例子,但是具体实施到悬置系统上面来还是解决不了。
请大家帮忙,给点提示也行。
邮箱:zs.jordan@163.com

本帖被以下淘专辑推荐:

回复
分享到:

使用道具 举报

发表于 2010-11-15 12:15 | 显示全部楼层
您是单纯以解耦率为目标吗?这个应该很好解决。可以用遗传算法,蚁群算法,非线性规划等获得局部及全局最优解。我做过悬置解耦的程序,是用Nastran和Matalb 混合编译的。个人感觉有时候不要特意只关注解耦率有多高,而且还要根据实际的情况考虑,比如解耦各频率大小,还有供应商是否能够制造出你解耦出的悬置,这个还要向供应商取得他们悬置橡胶各方向刚度的变化的比例。

评分

2

查看全部评分

 楼主| 发表于 2010-11-15 12:32 | 显示全部楼层
我用线性规划的时候约束函数不起作用,算出来的频率不在限定的范围之内,导致求出来的刚度也不在约束的范围之内。
这是我的求解过程,但是算不出来,不知道哪里需要修改
这是求解的:
x0=[570,108,330,570,108,330,319.5,15,15];
lb=[300,50,100,300,50,200,200,10,10];
ub=[600,300,500,600,300,500,500,100,100];
option=optimset;
option.MaxFunEvals=50000000;
option.MaxIter=20000000;
[x,fval,exitflag,output]=fmincon(@opt_jieou_myfun,x0,[],[],[],[],lb,ub,@opt_jieou_mycon,option)
目标函数:
function f=opt_jieou_myfun(x)
m=323.98;%kg
Jx=25.706;Jy=13.607;Jz=23.014;Jxy=-3.029;Jyz=3.359;Jzx=-0.876;%kg*m*m
Xz=72.44;Yz=-431.92;Zz=148.82;
Xy=4.34;Yy=452.98;Zy=250.22;
Xh=199.64;Yh=-7.72;Zh=-245.93;
%mm在下面将位移坐标变成m
% Kzx;Kzy;Kzz;
% Kyx;Kyy;Kyz;
% Khx;Khy;Khz;%N/m
ALFAzu=0;BETAzu=90*pi/180;GAMAzu=90*pi/180;
ALFAzv=90*pi/180;BETAzv=0;GAMAzv=90*pi/180;
ALFAzw=90*pi/180;BETAzw=90*pi/180;GAMAzw=0;
ALFAyu=0;BETAyu=90*pi/180;GAMAyu=90*pi/180;
ALFAyv=90*pi/180;BETAyv=0;GAMAyv=90*pi/180;
ALFAyw=90*pi/180;BETAyw=90*pi/180;GAMAyw=0;
ALFAhu=8*pi/180;BETAhu=90*pi/180;GAMAhu=82*pi/180;
ALFAhv=90*pi/180;BETAhv=0;GAMAhv=90*pi/180;
ALFAhw=98*pi/180;BETAhw=90*pi/180;GAMAhw=8*pi/180;
Th=[cos(ALFAhu),cos(BETAhu),cos(GAMAhu);cos(ALFAhv),cos(BETAhv),cos(GAMAhv);cos(ALFAhw),cos(BETAhw),cos(GAMAhw)];
Tz=[cos(ALFAzu),cos(BETAzu),cos(GAMAzu);cos(ALFAzv),cos(BETAzv),cos(GAMAzv);cos(ALFAzw),cos(BETAzw),cos(GAMAzw)];
Ty=[cos(ALFAyu),cos(BETAyu),cos(GAMAyu);cos(ALFAyv),cos(BETAyv),cos(GAMAyv);cos(ALFAyw),cos(BETAyw),cos(GAMAyw)];
Fh=[1e3,0,0,0,Zh,-Yh;0,1e3,0,-Zh,0,Xh;0,0,1e3,Yh,-Xh,0]*0.001;
Fz=[1e3,0,0,0,Zz,-Yz;0,1e3,0,-Zz,0,Xz;0,0,1e3,Yz,-Xz,0]*0.001;
Fy=[1e3,0,0,0,Zy,-Yy;0,1e3,0,-Zy,0,Xy;0,0,1e3,Yy,-Xy,0]*0.001;
%%此处将位移坐标转变成m
kz=[x(1),0,0;0,x(2),0;0,0,x(3)];
ky=[x(4),0,0;0,x(5),0;0,0,x(6)];
kh=[x(7),0,0;0,x(8),0;0,0,x(9)];
M=[m,0,0,0,0,0;0,m,0,0,0,0;0,0,m,0,0,0;0,0,0,Jx,-Jxy,-Jzx;0,0,0,-Jxy,Jy,-Jyz;0,0,0,-Jzx,-Jyz,Jz];
% D=[1200,0,0,0,0,0;0,1600,0,0,0,0;0,0,2000,0,0,0;0,0,0,60,0,0;0,0,0,0,80,0;0,0,0,0,0,100];
K=Fh'*Th'*kh*Th*Fh+Fz'*Tz'*kz*Tz*Fz+Fy'*Ty'*ky*Ty*Fy;
[v,d]=eig(K,M);
g=diag(sqrt(d)/2/pi)'
for j=1:6
for k=1:6
for l=1:6
ENERGY(k,l)=M(k,l)*v(k,j)*v(l,j);
end
end
qq=sum(ENERGY);
qqt=sum(qq);
dig=[qq/qqt];
EGEN(:,j)=dig;
ep1=max(dig);
ep2=sum(dig);
eper(j)=ep1/ep2*100;
end
eper;
EGEN=EGEN*100;
f=-(1.3*max(EGEN(1)))-(3*max(EGEN(2)))-(1.5*max(EGEN(3)))-(2*max(EGEN(4)))-(3*max(EGEN(5)))-(0.5*max(EGEN(6)));
约束函数:
function [c,ceq]=opt_jieou_mycon(x)
% m=323.98;%kg
% Jx=25.706;Jy=13.607;Jz=23.014;Jxy=-3.029;Jyz=3.359;Jzx=-0.876;%kg*m*m
% Xz=72.44;Yz=-431.92;Zz=148.82;
% Xy=4.34;Yy=452.98;Zy=250.22;
% Xh=199.64;Yh=-7.72;Zh=-245.93;
% %mm在下面将位移坐标变成m
% ALFAzu=0;BETAzu=90*pi/180;GAMAzu=90*pi/180;
% ALFAzv=90*pi/180;BETAzv=0;GAMAzv=90*pi/180;
% ALFAzw=90*pi/180;BETAzw=90*pi/180;GAMAzw=0;
% ALFAyu=0;BETAyu=90*pi/180;GAMAyu=90*pi/180;
% ALFAyv=90*pi/180;BETAyv=0;GAMAyv=90*pi/180;
% ALFAyw=90*pi/180;BETAyw=90*pi/180;GAMAyw=0;
% ALFAhu=8*pi/180;BETAhu=90*pi/180;GAMAhu=82*pi/180;
% ALFAhv=90*pi/180;BETAhv=0;GAMAhv=90*pi/180;
% ALFAhw=98*pi/180;BETAhw=90*pi/180;GAMAhw=8*pi/180;
% Th=[cos(ALFAhu),cos(BETAhu),cos(GAMAhu);cos(ALFAhv),cos(BETAhv),cos(GAMAhv);cos(ALFAhw),cos(BETAhw),cos(GAMAhw)];
% Tz=[cos(ALFAzu),cos(BETAzu),cos(GAMAzu);cos(ALFAzv),cos(BETAzv),cos(GAMAzv);cos(ALFAzw),cos(BETAzw),cos(GAMAzw)];
% Ty=[cos(ALFAyu),cos(BETAyu),cos(GAMAyu);cos(ALFAyv),cos(BETAyv),cos(GAMAyv);cos(ALFAyw),cos(BETAyw),cos(GAMAyw)];
% Fh=[1e3,0,0,0,Zh,-Yh;0,1e3,0,-Zh,0,Xh;0,0,1e3,Yh,-Xh,0]*0.001;
% Fz=[1e3,0,0,0,Zz,-Yz;0,1e3,0,-Zz,0,Xz;0,0,1e3,Yz,-Xz,0]*0.001;
% Fy=[1e3,0,0,0,Zy,-Yy;0,1e3,0,-Zy,0,Xy;0,0,1e3,Yy,-Xy,0]*0.001;
% %%此处将位移坐标转变成m
% % x(1);x(2);x(3);
% % x(4);x(5);x(6);
% % x(7);x(8);x(9);%N/m
% kz=[x(1),0,0;0,x(2),0;0,0,x(3)];
% ky=[x(4),0,0;0,x(5),0;0,0,x(6)];
% kh=[x(7),0,0;0,x(8),0;0,0,x(9)];
% M=[m,0,0,0,0,0;0,m,0,0,0,0;0,0,m,0,0,0;0,0,0,Jx,-Jxy,-Jzx;0,0,0,-Jxy,Jy,-Jyz;0,0,0,-Jzx,-Jyz,Jz];
% % D=[1200,0,0,0,0,0;0,1600,0,0,0,0;0,0,2000,0,0,0;0,0,0,60,0,0;0,0,0,0,80,0;0,0,0,0,0,100];
% K=Fh'*Th'*kh*Th*Fh+Fz'*Tz'*kz*Tz*Fz+Fy'*Ty'*ky*Ty*Fy;
% [v,d]=eig(K,M);
% g=diag(sqrt(d)/2/pi)'
% for j=1:6
% for k=1:6
% for l=1:6
% ENERGY(k,l)=M(k,l)*v(k,j)*v(l,j);
% end
% end
% qq=sum(ENERGY);
% qqt=sum(qq);
% dig=[qq/qqt];
% EGEN(:,j)=dig;
% ep1=max(dig);
% ep2=sum(dig);
% eper(j)=ep1/ep2*100;
% end
% eper;
% EGEN=EGEN*100;
c(1)=g(1)-8;
c(2)=g(2)-15;
c(3)=g(3)-11;
c(4)=g(4)-18;
c(5)=g(5)-12;
c(6)=g(6)-17;
c(2)=7-g(1);
c(8)=7-g(2);
c(9)=8-g(3);
c(10)=8-g(4);
c(11)=8-g(5);
c(12)=8-g(6);
% ceq=[];

每次算的时候求出来的频率,(这里我改成了g)不在约束的范围之内,并且经常出现评价次数不够或者迭代次数不够,实在没办法。

约束函数不会写,目标函数我改了一下,设置了几个加权值。但是还是不对,算出来的g都不在范围之内。

评分

2

查看全部评分

发表于 2010-11-15 12:41 | 显示全部楼层
不好意思,我在班上没有Matlab无法运行你的程序。你说迭代次数不够无法收敛的情况吗?这个我没有用过线性规划,以前用过遗传算法,个人认为还是约束的不好导致无法收敛找不到最优解。你看看Matlab的版面有线性规划的帖子没,可以了解下。
 楼主| 发表于 2010-11-15 13:24 | 显示全部楼层
恩,迭代的时候经常会出现MaxFunEvals,MaxIter超出范围,我把参数设的特别大之后就求不出来,所以烦人啊。谢谢你哈

其他的类似的列子我做过很多,这些例子里面约束的都是关于自变量X(i)的,而这悬置的话求的是K(i),约束的确是另一个变量,通过求解特征值求出来的频率f(i),所以这里比较棘手,不知道怎么约束,还是要谢谢你哦...
发表于 2010-11-15 14:19 | 显示全部楼层
呵呵,大家互相学习。
 楼主| 发表于 2010-11-20 12:29 | 显示全部楼层
回复 6 # wy558558558 的帖子

我做出来了,但是最后exitflag=5,是收敛的。
这和exitflag=1有什么区别啊。
 楼主| 发表于 2010-11-20 12:31 | 显示全部楼层

点评

反对: 5.0
反对: 5
请善用编辑功能。  发表于 2010-11-20 13:38
发表于 2010-11-20 13:21 | 显示全部楼层
回复 7 # LAN博基尼 的帖子

不好意思没明白你的意思。
 楼主| 发表于 2010-11-20 15:33 | 显示全部楼层
回复 9 # wy558558558 的帖子

Optimization terminated: Magnitude of directional derivative in search
direction less than 2*options.TolFun and maximum constraint violation
  is less than options.TolCon.
Active inequalities (to within options.TolCon = 1e-006):
  lower      upper     ineqlin   ineqnonlin
    9          8                     

x =

  343.8480   77.8024  488.4697  342.4638   95.0791  480.7947  497.0000   50.0000    7.0000


fval =

    0.3400


exitflag =

     5


output =

       iterations: 104
        funcCount: 1667
         stepsize: 1
        algorithm: 'medium-scale: SQP, Quasi-Newton, line-search'
    firstorderopt: 0.0041
     cgiterations: []
          message: [1x172 char]

这是优化的结果,也不知道对不对,exitflag大于0就是收敛的,我做过的例子都是exitflag=1,而我这个结果怎么exitflag=5,1和5有什么区别。
发表于 2010-11-20 15:40 | 显示全部楼层
我感觉1的应该不对,很可能是局部的收敛。5的话是不是也有点太快了啊,我不敢说,如果你的参数设置的好,也有可能收敛很快的。请问你算出的7.0000是刚度吗?
 楼主| 发表于 2010-11-20 16:30 | 显示全部楼层
回复 11 # wy558558558 的帖子

x = 343.8480   77.8024  488.4697  342.4638   95.0791  480.7947  497.0000   50.0000    7.0000
这是防扭拉杆的Z方向的值,原始值是15n/mm,我设定的范围是15~50,结果他给我算出来一个这么小的刚度值。
对应的是左悬置kx ky kz=343.8480   77.8024  488.4697
              右悬置kx ky kz=342.4638   95.0791  480.7947
              防扭拉杆kx ky kz=497.0000   50.0000    7.0000
也不知道对不对啊,按理说拉杆主要承受侧倾力与扭转力,X方向是应该大一些的,可能是为了追求解耦高,导致z方向偏小了。


 楼主| 发表于 2010-11-20 16:34 | 显示全部楼层
哦,说错,是5到50,结果得出一个7的结果
发表于 2010-11-20 17:07 | 显示全部楼层
哦,要是扭力臂的话这个值还是可以的,你这个应该是动刚度吧,反正是能算出来数,但是与实际相差太远了,根本无法作出你算出的悬置,很难想象你刚度值这么大,固有频率点多大啊……可能你的发动机质量也很大。
 楼主| 发表于 2010-11-21 13:40 | 显示全部楼层
总成323kg,固有频率用优化的刚度算出来后值都比较小。优化的直接是动刚度,这样的话静刚度就更小了,估计实际的悬置都难以做出来。
解耦率83.5806   95.3373   86.9081   98.2464   97.3627   99.7429
频率  8.2036    9.6405   11.6367   12.2828   14.2039    4.1244
貌似最小值偏低了
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-25 03:37 , Processed in 0.075412 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表