优化这段代码syms z;% 传递函数H = (z^2 + 2*z + 1) / (z^3 - z^2 + 2*z - 2);% 部分分式分解[r, p, k] = residue([1 2 1], [1 -1 2 -2]);% 输出结果disp('Residues:');disp(r);disp('Poles:');disp(p);disp('Constant:');disp(k);% 求解z反变换syms n;x = symsum((r(i) / (z - p(i))) * z^-n, i, 1, length(p)) + k * dirac(n);pretty(x);% 绘制z反变换结果n = 0:30;y = eval(x);stem(n, y);xlabel('n');ylabel('x[n]');title('z^{-1} Transform using Partial Fraction Expansion');
时间: 2023-06-20 14:07:18 浏览: 91
Z变换及Z传递函数
这段代码已经很简洁了,但是有一些可以优化的地方:
1. 在部分分式分解时,可以直接输入传递函数H,而不需要手动输入分子和分母的系数。
2. 在求解z反变换时,可以使用symsum函数的矢量化特性,避免使用for循环。
下面是优化后的代码:
% 传递函数
H = (z^2 + 2*z + 1) / (z^3 - z^2 + 2*z - 2);
% 部分分式分解
[r, p, k] = residue(sym2poly(H), sym2poly(z));
% 输出结果
disp('Residues:');
disp(r);
disp('Poles:');
disp(p);
disp('Constant:');
disp(k);
% 求解z反变换
x = k * dirac(n) + symsum(r(i) * p(i)^(-n) * ztrans(exp(n), n, z - p(i)), i, 1, length(p));
pretty(x);
% 绘制z反变换结果
n = 0:30;
y = double(subs(x, n));
stem(n, y);
xlabel('n');
ylabel('x[n]');
title('z^{-1} Transform using Partial Fraction Expansion');
阅读全文