我有二阶微分方程
d^2(y(t))/dt^2+ B1*d(y(t))/dt+ c1*y(t)=A1*x(t)
t 以秒为单位并且大于 0。A1、B1、C1 是常数,它们等于:
A1= 3.8469x10^6
B1= 325.6907
C1= 3.8469x10^6
这个系统是线性的、时不变的和随意的。该系统称为H1。我想用 Matlab 计算和绘制这个系统的脉冲响应函数 h1(t) 和单位阶跃响应函数 g1(t)。
我有二阶微分方程
d^2(y(t))/dt^2+ B1*d(y(t))/dt+ c1*y(t)=A1*x(t)
t 以秒为单位并且大于 0。A1、B1、C1 是常数,它们等于:
A1= 3.8469x10^6
B1= 325.6907
C1= 3.8469x10^6
这个系统是线性的、时不变的和随意的。该系统称为H1。我想用 Matlab 计算和绘制这个系统的脉冲响应函数 h1(t) 和单位阶跃响应函数 g1(t)。
在 MATLAB 中有一个非常漂亮的函数 dsolve,它接受一个字符串作为参数(类似于 ezplot)。您可能必须手动输入常量。但它会解决DE。
通常这些输出,尤其是像这样的输出会很讨厌,所以我建议使用 pretty 函数,至少尝试使其可读。
尝试输入:
帮助解决
进入matlab,看看你得到了什么:)
您可以使用 dsolve 找到脉冲响应,但您解决的问题与 ODE 略有不同。
脉冲响应是对 n-1 处的脉冲的自由响应,其中 n 是 ode 的阶数。您想求解 y(0)=0, dy/dt=1, x = 0(无强制)。
这是使用 MATLAB 执行此操作的方法。
% // symbolic variables
syms y(t) x(t)
% // these could be symbolic as well
A1= 3.8469E6
B1= 325.6907
C1= 3.8469E6
% // so that you can pass an argument to diff(y)
Dy = diff(y)
% // symbolically solve
ySol = dsolve(diff(diff(y,t),t)+B1*diff(y,t)+C1*y-A1*0,y(0)==0,Dy(0)==1)
% // use five digits only (shortens the result)
digits(5)
ySol = vpa(ySol)
% // show a human readable result
pretty(ySol)
% // solve by replacing the symbol t with the numerical value
f = @(t) subs(ySol, 't', t)
% // plot the function. note you can analytically know a better range
% // from A1, B1, C1, but I leave that to you
ezplot(f, [0 .06])
恕我直言,更好的方法是将脉冲响应的解析解用于二阶 ODE。通过搜索可以轻松找到许多关于此的注释(例如这些注释)。
对于阶跃响应,您可以使用卷积积分......但上述内容应该有助于使用 ode 求解器。