To determine whether the system is stable.

조회 수: 29 (최근 30일)
William
William 2021년 9월 21일
답변: Star Strider 2021년 9월 21일
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