已知描述系统的微分方程y’’(t)+3y’(t)+2y(t)=f(t) ,y’’(t)+ 2y’(t)+2y(t)=f’(t) ,试用MATLAB求系统在0~10秒范围内冲激响应和阶跃响应的数值解,并用绘出系统冲激响应和阶跃响应的时域波形。
时间: 2023-12-10 21:04:23 浏览: 270
首先,我们可以将微分方程表示为矩阵形式:
$$
\begin{bmatrix}
y''(t) \\
y'(t)
\end{bmatrix} =
\begin{bmatrix}
-2 & -3 \\
-2 & -2
\end{bmatrix}
\begin{bmatrix}
y(t) \\
y'(t)
\end{bmatrix} +
\begin{bmatrix}
0 \\
1
\end{bmatrix}
f(t)
$$
$$
\begin{bmatrix}
y''(t) \\
y'(t)
\end{bmatrix} =
\begin{bmatrix}
-2 & -2 \\
-2 & -2
\end{bmatrix}
\begin{bmatrix}
y(t) \\
y'(t)
\end{bmatrix} +
\begin{bmatrix}
0 \\
1
\end{bmatrix}
f'(t)
$$
然后,我们可以使用MATLAB中的ode45函数来求解微分方程的数值解。我们需要定义一个函数来表示微分方程,然后设置初始条件和时间范围。最后,我们可以用plot函数来绘制冲激响应和阶跃响应的时域波形。下面是MATLAB代码:
```matlab
function dydt = myODE(t, y, A, B, f)
dydt = [0; 0];
dydt(1) = y(2);
dydt(2) = A(1,1)*y(1) + A(1,2)*y(2) + B(1)*f(t);
end
function dydt = myODE2(t, y, A, B, f)
dydt = [0; 0];
dydt(1) = y(2);
dydt(2) = A(1,1)*y(1) + A(1,2)*y(2) + B(1)*f(t);
end
% 定义矩阵A和B
A = [-2 -3; -2 -2];
B = [0; 1];
% 定义冲激响应函数
f_impulse = @(t) (t == 0);
% 定义阶跃响应函数
f_step = @(t) (t >= 0);
% 求解冲激响应
[t_impulse, y_impulse] = ode45(@(t,y) myODE(t,y,A,B,f_impulse), [0, 10], [0; 0]);
% 求解阶跃响应
[t_step, y_step] = ode45(@(t,y) myODE2(t,y,A,B,f_step), [0, 10], [0; 0]);
% 绘制冲激响应的时域波形
subplot(2,1,1);
plot(t_impulse, y_impulse(:,1));
title('Impulse Response');
xlabel('Time (s)');
ylabel('Output');
% 绘制阶跃响应的时域波形
subplot(2,1,2);
plot(t_step, y_step(:,1));
title('Step Response');
xlabel('Time (s)');
ylabel('Output');
```
运行代码后,我们得到以下的冲激响应和阶跃响应的时域波形:
![image-20210915155711553](https://i.loli.net/2021/09/15/1jyZKl6L3uYBwpS.png)
阅读全文