二自由度振动仿真:matlab直接解微分方程&&virtual.lab motion仿真

85 篇文章 15 订阅
56 篇文章 20 订阅

一、二自由度振动解析法与多种数值算法见:https://blog.csdn.net/lijil168/article/details/67647924

 

二、用matlab符号建立微分方程,并用龙格库塔法 ode45()直接进行数据计算

%SH760小轿车空载主要参数
clear;
m=1340;
a=1.54;
b=1.29;
l=a+b;
Ic=2395; %绕质心的转动惯量
rou=sqrt(Ic/m);
k1=40*1000;
k2=44*1000;
M=[m*(b^2+rou^2)/l^2,m*(a*b-rou^2)/l^2;m*(a*b-rou^2)/l^2,m*(a^2+rou^2)/l^2];
K=[k1,0;0,k2];
 
%用matlab ode45数值解------------------------------------------------
 
A=[zeros(2,2),eye(2);-M\K,zeros(2,2)]; %四阶参数4X4矩阵X'=AX-->X=expm(A*t)*X0 X=[x1;x2;x1';x2']
syms x1 x2 dx1 dx2
df_sym=A*[x1;x2;dx1;dx2];
df_sym=subs(df_sym,{'x1','x2','dx1','dx2'},{'x(1)','x(2)','x(3)','x(4)'});
n=length(df_sym);
i=1;
ss='[';   %先定义好很重要,否则再循环体中定义时,每一循环ss不累加。
while i<n
    ss=strcat(ss,char(df_sym(i)),';');
    i=i+1;
end
ss=strcat(ss,char(df_sym(i)));
ss=strcat(ss,']');
f=inline(ss,'t','x');
[t,x]=ode45(f,[0 10],[1,0,0,0]);%初始
%subplot(2,2,1)
plot(t,[x(:,1),x(:,2)]) %时间状态系列

三、virtual.lab motion仿真

注意,当设置初始位移x1=1m,x2=0m时,由方程x1=x-l1*theta,x2=x+l2*theta,计算小车重心的初始位移x=0.455830和小车的初始转角theta=0.353357时,有误差(线性近似计算)。

由motion制图容易取得真实的值:x_3d=0.456000,theta_3d=0.361039(20.686度)。

另外,力平衡方程也是线性近似的(只有在小位移时成立)。这是造成理论计算和motion仿真结果有部分误差的主要原因!

特别需要注意的是motion用欧拉四元素来定义小车的初始姿态,欧拉四元素可参考维基百科:https://en.wikibooks.org/wiki/Multibody_Mechanics/Euler_Parameters

u为旋转轴的单位矢量,phai 为相对旋转轴的转角。欧拉四元素组成四维单位矢量,即四元素平方和=1。

为了方便得到各参数,用计算器软件先计算:

仿真结果为:

可见,小车的运动趋势和理论解很接近,而且理论微分方程是近似的,在大位移时误差会偏大,用motion仿真的可行度更高。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值