已知连续时间的微分方程y''''(t)+26.1y'''(t)+341.4y’’(t)+2613.1y’(t)+10000y(t)=10000*x(t),用python求出其单位冲击冲激响应,并画出波形的代码
时间: 2023-06-04 16:07:03 浏览: 397
libstdc.so.6.0.26.zip
4星 · 用户满意度95%
以下是Python代码:
```python
import numpy as np
import matplotlib.pyplot as plt
# 系统函数
def sys_func(y, t):
y1, y2, y3, y4 = y
dydt = [y2, y3, y4, -0.1*y4 - 3.414*y3 - 26.1*y2 - 10000*y1]
return dydt
# 初始状态
y0 = [0, 0, 0, 0]
# 时间范围
t = np.linspace(0, 20, 1000)
# 解微分方程
sol = odeint(sys_func, y0, t)
# 单位冲击响应
u = np.zeros(len(t))
u[0] = 1
# 响应
y = np.zeros(len(t))
for i in range(len(t)):
y[i] = np.dot(u[:i+1], sol[i::-1, 0])
# 绘图
plt.plot(t, y)
plt.xlabel('Time')
plt.ylabel('Response')
plt.show()
```
解释:
这段代码使用SciPy库的odeint函数求解微分方程,得到系统的状态响应。
在求解冲击响应时,我们将输入信号置为单位冲击函数,用一个长度为1000的零向量表示,并将第一个元素设为1。然后,计算状态响应中第一个元素与单位冲击信号的内积,即可得到单位冲击响应。使用该冲击响应,可以将任意输入信号(与冲击信号卷积)转换为响应信号。
最后,我们使用Matplotlib库绘图,绘制响应信号随时间的波形图。
阅读全文