巧用MATLAB绘制阶跃常微分方程的解

pbossiut  于 2022-12-29  发布在  Matlab
关注(0)|答案(1)|浏览(243)

我试图用MATLAB来求解阶跃函数为

的常微分方程
下面是我的代码来解决上述ODE:

syms t s Y y(t) Dy(t) u(t) f(t) k
Dy = diff(y,t)
D2y = diff(Dy,t)
f = heaviside(t) + 2*symsum((-1)^k*heaviside(t-k*pi()),k,1,Inf)
eqn = D2y +0.1*Dy + y == f
leqn = laplace(eqn,t,s)
LT_Y=subs (leqn, laplace (y,t,s),Y);
LT_Y=subs (LT_Y, y(0), 0);
LT_Y=subs(LT_Y, subs(diff(y(t), t), t, 0), 0);
Y=solve(LT_Y,Y);
y=ilaplace(Y,s,t)

然而,结果看起来很奇怪,我无法绘制解决方案的图形。谁能告诉我应该对我的代码做些什么,以便我可以绘制解决方案?非常感谢

1yjd4xko

1yjd4xko1#

摩擦项的衰减率为0.1/2=0.05,因此衰减0.1需要大约t=40。在标准图中,图尺寸小到1%的特征是可见的,这需要t=80的时间跨度,或更长的时间跨度,以便对该水平的振幅稳定性进行一些视觉确认。
右侧与左侧大致共振,因此稳态解大致为-10*cos(t)加上更高频率的分量。
仅绘制数值解就足够了

opts=odeset("AbsTol",1e-6,"RelTol",1e-9);
[T,Y] = ode45(@(t,y)[y(2); f(t)-0.1*y(2)-y(1)], [0, 100], [0;0], opts);
plot(T,Y(:,1),T,-13*cos(T));

function z=f(t)
    z = sign(sin(t));
end

这给出了下图,蓝色表示溶液,绿色表示参比品(推测振幅)

计算右侧的傅里叶级数,解的余弦分量的振幅为40/pi=12.732

相关问题