用MATLAB求离散差分方程有y(n)+3y(n-1)+2y(n-2)=0.2^n*u(n),其中y(-1)=2,y(-2)=1,分别求该系统的零状态响应,零输入响应和全响应 y。
时间: 2023-12-14 15:36:37 浏览: 148
我们可以使用MATLAB中的`dsolve`函数来求解离散差分方程。首先,我们需要将差分方程转换为通项公式形式。将y(n)表示为y的z变换,得到:
Y(z) + 3z^-1Y(z) + 2z^-2Y(z) = 0.2^n / (1 - z^-1)
移项得到:
Y(z) = 0.2^n / (1 - z^-1) / (1 + 3z^-1 + 2z^-2)
将初始条件带入,得到:
Y(z) = (0.6z^-1 + 0.4z^-2) / (1 + 3z^-1 + 2z^-2)
现在我们可以使用MATLAB中的`dsolve`函数求解该离散差分方程。首先,我们需要定义方程:
```matlab
syms y(n)
eqn = y(n) + 3*y(n-1) + 2*y(n-2) == 0.2^n;
```
然后,我们可以使用`dsolve`函数求解:
```matlab
yZT = dsolve(eqn, y(-2)==1, y(-1)==2);
```
`dsolve`函数返回的是通项公式形式的解,我们需要将其转换为时域形式。我们可以使用`iztrans`函数将z变换转换为离散时间信号:
```matlab
syms n
y(n) = iztrans(yZT);
```
现在,我们可以分别求解零状态响应、零输入响应和全响应。零状态响应即为初始化条件对通项公式的影响,可以通过直接代入n=-2和n=-1求解:
```matlab
zsRes = subs(y, n, -2:0);
```
零输入响应即为输入为0时系统的响应,可以通过将输入置为0后求解:
```matlab
ziRes = subs(y, 0);
```
全响应即为零状态响应和零输入响应的叠加:
```matlab
zRes = zsRes + ziRes;
```
最终,我们可以绘制出系统的全响应曲线:
```matlab
n = -2:20;
stem(n, double(zRes(n+3)), 'filled');
xlabel('n');
ylabel('y(n)');
```
完整代码如下:
```matlab
syms y(n)
eqn = y(n) + 3*y(n-1) + 2*y(n-2) == 0.2^n;
yZT = dsolve(eqn, y(-2)==1, y(-1)==2);
y(n) = iztrans(yZT);
zsRes = subs(y, n, -2:0);
ziRes = subs(y, 0);
zRes = zsRes + ziRes;
n = -2:20;
stem(n, double(zRes(n+3)), 'filled');
xlabel('n');
ylabel('y(n)');
```
阅读全文