1

我有二阶微分方程

 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)。

4

2 回答 2

0

在 MATLAB 中有一个非常漂亮的函数 dsolve,它接受一个字符串作为参数(类似于 ezplot)。您可能必须手动输入常量。但它会解决DE。

通常这些输出,尤其是像这样的输出会很讨厌,所以我建议使用 pretty 函数,至少尝试使其可读。

尝试输入:

帮助解决

进入matlab,看看你得到了什么:)

于 2012-12-03T03:12:13.983 回答
0

您可以使用 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 求解器。

于 2012-12-03T03:56:14.070 回答