怎么用matlab编有阻尼弹簧系统的仿真程序,题3.1
发布网友
发布时间:2023-04-01 04:22
我来回答
共1个回答
热心网友
时间:2023-11-17 18:54
1、用数值方法求解微分方程(未指定初始条件,按零初始条件考虑):
% 常数定义
m=196;
k=19600;
c=2940;
clf
tstr = {'忽略阻尼', '考虑阻尼'};
for n=1:2
subplot(2,1,n)
dx=@(t,x)[x(2); (160*sin(19*t)-k*x(1)-(n-1)*c*x(2))/m];
[t,x]=ode45(dx,[0 3],[0 0]);
ax=plotyy(t,x(:,1),t,160*sin(19*t));
%legend([h1 h2],'x(t)','P(t)')
xlabel t
axes(ax(1)); ylabel x(t)
axes(ax(2)); ylabel P(t)
title(tstr{n})
end
对于考虑阻尼影响的情况,系统稳态响应为和输入相同频率的正弦波,由图中的峰值可以大致计算出幅值的放大倍数以及相位滞后。而对于忽略阻尼影响的情况,由于输出由自由振荡和强迫振荡两部分组成,且频率不同,呈现出来的响应曲线不太容易辨别幅值放大及相位变化。事实上,无阻尼系统在传统控制理论中认为是不稳定的,那么建立在稳态响应基础上的频域方法从概念上说也是有疑问的。
2、理论方法求解。
考虑两种做法,一是求解微分方程的解析解:
>> x1=dsolve('196*D2x+19600*x=160*sin(19*t)','x(0)=0,Dx(0)=0')
x1 =
76/12789*sin(10*t)-40/12789*sin(19*t)
>> x2=dsolve('196*D2x+2940*Dx+19600*x=160*sin(19*t)','x(0)=0,Dx(0)=0')
x2 =
6308/2845871*exp(-15/2*t)*sin(5/2*7^(1/2)*t)*7^(1/2)+1900/1219659*exp(-15/2*t)*cos(5/2*7^(1/2)*t)-580/406553*sin(19*t)-1900/1219659*cos(19*t)
其中x1为无阻尼情况,包括两项,其中后面一项为强迫振荡,可知放大倍数为40/12789/160 = 1.9548e-005,相角滞后为0;x2为考虑阻尼的情况,结果包括4项,前两项为衰减项,稳态响应只有后两项,则其幅值放大倍数和相角滞后分别为
>> norm([-1900/1219659, -580/406553])/160
ans =
1.3202e-005
>> atan2(-1900/1219659, -580/406553)/pi*180
ans =
-132.4831
二是用频率特性的概念直接求:
G = tf(1,[m c k]);
w = 19;
Gjw = evalfr(G,j*w);
mag = abs(Gjw)
phase = angle(Gjw)*180/pi
得到的
mag =
1.3202e-005
phase =
-132.4831
即分别为幅值放大倍数和相角滞后,和上面求解微分方程的结果一致。