6.43MATLAB验证:
[r,p,k]=residuez([0 1 1.7],conv([1 0.3],[1 -0.5]))
r =
5.5000
5.8333
p =
0.5000
-0.3000
k =
-11.3333
M6.1
factorize.m:
function Factors = factorize(polyn)
format long; Factors = [];
% Use threshold of 1e-8 instead of 0 to account for
% precision effects
THRESH = 1e-8;
%
proots = roots(polyn); % get the zeroes of the polynomial
len = length(proots); % get the number of zeroes
%
while(len > 1)
if(abs(imag(proots(1))) < THRESH) % if the zero is a real zero
fac = [1 -real(proots(1))];
% construct the factor with proots(1) as zero
Factors = [Factors;[fac 0]];
else % if the zero has imaginary part get all zeroes whose
% imag part is -ve of imaginary part of proots(1)
negimag = imag(proots)+imag(proots(1));
% get all zeroes which have same real part as proot(1)
samereal = real(proots)-real(proots(1));
%find the complex conjugate zero
index = find(abs(negimag) <THRESH & abs(samereal)<THRESH);
if(index) % if the complex conjugate exists
fac = [1 -2*real(proots(1)) abs(proots(1))^2];
%form 2nd order factor
Factors = [Factors;fac];
else % if the complex conjugate does not exist
fac = [1 -proots(1)];
Factors = [Factors;[fac 0]];
end
end
polyn = deconv(polyn,fac);
%deconvolve the 1st/2nd order factor from polyn
proots = roots(polyn); %determine the new zeros
len = length(polyn); %determine the number of zeros
end
脚本:
num = input('Type in the numerator coefficients = ');
den = input('Type in the denominator coefficients = ');
K = num(1)/den(1);
Numfactors = factorize(num)
Denfactors = factorize(den)
disp('Numerator factors');disp(Numfactors);
disp('Denominator factors');disp(Denfactors);
disp('Gain constant');disp(K);
zplane(num,den)
输入:
Type in the numerator coefficients = [3 -2.4 15.36 3.84 9]
Type in the denominator coefficients = [5 -8.5 17.6 4.7 -6]
输出:
输入:
Type in the numerator coefficients = [2 0.2 6.4 4.6 2.4]
Type in the denominator coefficients = [5 1 6.6 0.42 24]
输出: