To determine whether the system is stable.

34 次查看(过去 30 天)
I have writen the code to determine the stability of a system. However, the result keeps saying that 'System is not stable' even if I checked the value of pm in workspace and it shows that pm equals to 1, which means that the system is marginally stable. What's wrong with it?
b = [1 0 0 -1 0];
a = [1 0 0 0 -1];
zplane(b,a)
p = roots(a);
pm = abs(p);
if max(pm) <= 1
disp('System is stable');
else
disp('System is not stable');
end
end

采纳的回答

Star Strider
Star Strider 2021-9-21
Welcome to the wonderful world of floating-point approximation error!
See ‘Check’ and ‘Check_max’ for an illustration of the probllem:
format long % View Full Precision Results
b = [1 0 0 -1 0];
a = [1 0 0 0 -1];
zplane(b,a)
p = roots(a)
p =
-1.000000000000000 + 0.000000000000000i 0.000000000000000 + 1.000000000000000i 0.000000000000000 - 1.000000000000000i 1.000000000000000 + 0.000000000000000i
pm = abs(p)
pm = 4×1
1.000000000000000 1.000000000000000 1.000000000000000 1.000000000000000
Check = pm-1
Check = 4×1
1.0e+-15 * 0.444089209850063 -0.444089209850063 -0.444089209850063 -0.111022302462516
Check_max = max(pm)-1
Check_max =
4.440892098500626e-16
if max(pm) <= 1
disp('System is stable');
else
disp('System is not stable');
end
System is not stable
% end
See the documentation on Floating-Point Numbers for an extended discussion on this topic.
.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Filter Analysis 的更多信息

产品


版本

R2020b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by