用matlab求对于一个已知的线性时不变(LTI)系统,其微分方程表示为 y’‘(t) + y’(t) =cost·ε(t),且y(0)=1,y'(t)=1,编写求该系统的全响应、零输入响应、零状态响应、单位冲激响应和单位阶跃响应,并画出各响应曲线。
时间: 2024-12-22 12:30:03 浏览: 22
MATLAB-3.连续时间LTI系统的时域分析.docx
在MATLAB中,计算线性时不变(LTI)系统的一组基本响应通常涉及到使用系统函数或差分方程模型。首先,我们需要定义系统传递函数或建立微分方程模型。对于给定的微分方程 \( y''(t) + y'(t) = cos(t) \cdot \epsilon(t) \),我们可以假设这是一个简单的二阶线性常系数系统。
对于已知初始条件 \( y(0) = 1 \) 和 \( y'(0) = 1 \),可以设置状态向量为 \( x = [y, y']^T \),则状态空间形式为:
\[ \dot{x}(t) = Ax(t) + Bu(t) \]
其中 \( A = \begin{bmatrix} 0 & 1 \\ -1 & 0 \end{bmatrix}, B = \begin{bmatrix} 0 \\ 1 \end{bmatrix} \), \( u(t) = cos(t) \cdot \epsilon(t) \)。
1. **全响应** (包括初始状态影响)
这需要解非齐次微分方程,可以使用`lsim`函数:
```matlab
sys = tf([1], [1 1]); % 创建传递函数
tspan = [0, 5]; % 时间范围
u = cos(tspan); % 输入信号
y_full = lsim(sys, u, tspan);
```
2. **零输入响应** (仅考虑自由响应)
由于输入为零,即 \( u = 0 \),这时我们只看原系统的自然响应:
```matlab
u_zero = zeros(size(tspan));
y_zero = lsim(sys, u_zero, tspan);
```
3. **零状态响应** (初始状态设为零)
要求初始状态 \( x(0) = 0 \),这时的响应相当于完全由输入驱动:
```matlab
reset(sys, 0); % 设置初始状态为0
y_zero_state = lsim(sys, u, tspan);
```
4. **单位冲激响应** (输入为δ函数)
需要利用 `impulse` 函数:
```matlab
u_impulse = impz(sys); % 单位阶跃响应就是系统对单位阶跃响应的拉普拉斯逆变换
```
5. **单位阶跃响应**
类似于单位冲激响应,可以用 `step` 函数得到:
```matlab
u_step = step(sys); % 直接给出单位阶跃响应
```
为了可视化这些响应,可以使用 `plot` 函数分别绘制:
```matlab
figure;
plot(tspan, y_full, 'r', 'LineWidth', 2, 'DisplayName', '全响应');
hold on;
plot(tspan, y_zero, 'g', 'LineWidth', 2, 'DisplayName', '零输入响应');
plot(tspan, y_zero_state, 'b', 'LineWidth', 2, 'DisplayName', '零状态响应');
plot(tspan, u_impulse, 'm', 'LineWidth', 2, 'DisplayName', '单位冲激响应');
plot(tspan, u_step, 'c', 'LineWidth', 2, 'DisplayName', '单位阶跃响应');
legend('show');
xlabel('时间 (s)');
ylabel('响应值');
grid on;
```
这将显示所有响应的图形。记得替换 `tspan` 和 `sys` 以适应实际需求。如果你的系统不是传递函数形式,那么可能需要先将其转换。
阅读全文