Root locus imaginary axis intersection

21 ビュー (過去 30 日間)
Ande Mandoyi
Ande Mandoyi 2021 年 6 月 14 日
コメント済み: Star Strider 2021 年 6 月 15 日
Other than using interactive data cursors, is there anyway of finding the point where the root locus intersects the imaginary axis?

採用された回答

Star Strider
Star Strider 2021 年 6 月 14 日
Try something like this —
sys = tf([3 1],[9 7 5 6]); % Example From The Documentation
[r,k] = rlocus(sys)
r =
-0.9406 + 0.0000i -0.8744 + 0.0000i -0.8685 + 0.0000i -0.8620 + 0.0000i -0.8550 + 0.0000i -0.8475 + 0.0000i -0.8394 + 0.0000i -0.8306 + 0.0000i -0.8212 + 0.0000i -0.8111 + 0.0000i -0.8003 + 0.0000i -0.7888 + 0.0000i -0.7766 + 0.0000i -0.7636 + 0.0000i -0.7500 + 0.0000i -0.7358 + 0.0000i -0.7209 + 0.0000i -0.7055 + 0.0000i -0.6896 + 0.0000i -0.6734 + 0.0000i -0.6569 + 0.0000i -0.6402 + 0.0000i -0.6236 + 0.0000i -0.6071 + 0.0000i -0.5908 + 0.0000i -0.5748 + 0.0000i -0.5593 + 0.0000i -0.5443 + 0.0000i -0.5299 + 0.0000i -0.5161 + 0.0000i -0.5030 + 0.0000i -0.4906 + 0.0000i -0.4789 + 0.0000i -0.4679 + 0.0000i -0.4576 + 0.0000i -0.4480 + 0.0000i -0.4390 + 0.0000i -0.4306 + 0.0000i -0.4229 + 0.0000i -0.4157 + 0.0000i -0.4090 + 0.0000i -0.4029 + 0.0000i -0.3972 + 0.0000i -0.3919 + 0.0000i -0.3871 + 0.0000i -0.3826 + 0.0000i -0.3785 + 0.0000i -0.3748 + 0.0000i -0.3713 + 0.0000i -0.3681 + 0.0000i -0.3652 + 0.0000i -0.3334 + 0.0000i -0.3333 + 0.0000i 0.0814 + 0.8379i 0.0483 + 0.9140i 0.0453 + 0.9212i 0.0421 + 0.9291i 0.0386 + 0.9377i 0.0349 + 0.9470i 0.0308 + 0.9573i 0.0264 + 0.9686i 0.0217 + 0.9809i 0.0167 + 0.9943i 0.0113 + 1.0090i 0.0055 + 1.0251i -0.0006 + 1.0426i -0.0071 + 1.0617i -0.0139 + 1.0826i -0.0210 + 1.1053i -0.0284 + 1.1300i -0.0362 + 1.1568i -0.0441 + 1.1859i -0.0522 + 1.2175i -0.0605 + 1.2515i -0.0688 + 1.2883i -0.0771 + 1.3278i -0.0853 + 1.3703i -0.0935 + 1.4158i -0.1015 + 1.4644i -0.1092 + 1.5162i -0.1167 + 1.5714i -0.1239 + 1.6299i -0.1308 + 1.6920i -0.1374 + 1.7578i -0.1436 + 1.8273i -0.1494 + 1.9006i -0.1549 + 1.9780i -0.1601 + 2.0594i -0.1649 + 2.1452i -0.1694 + 2.2354i -0.1736 + 2.3302i -0.1775 + 2.4299i -0.1810 + 2.5345i -0.1844 + 2.6442i -0.1875 + 2.7594i -0.1903 + 2.8802i -0.1929 + 3.0069i -0.1953 + 3.1397i -0.1976 + 3.2789i -0.1996 + 3.4247i -0.2015 + 3.5775i -0.2032 + 3.7375i -0.2048 + 3.9052i -0.2063 + 4.0807i -0.2222 +81.7209i Inf + 0.0000i 0.0814 - 0.8379i 0.0483 - 0.9140i 0.0453 - 0.9212i 0.0421 - 0.9291i 0.0386 - 0.9377i 0.0349 - 0.9470i 0.0308 - 0.9573i 0.0264 - 0.9686i 0.0217 - 0.9809i 0.0167 - 0.9943i 0.0113 - 1.0090i 0.0055 - 1.0251i -0.0006 - 1.0426i -0.0071 - 1.0617i -0.0139 - 1.0826i -0.0210 - 1.1053i -0.0284 - 1.1300i -0.0362 - 1.1568i -0.0441 - 1.1859i -0.0522 - 1.2175i -0.0605 - 1.2515i -0.0688 - 1.2883i -0.0771 - 1.3278i -0.0853 - 1.3703i -0.0935 - 1.4158i -0.1015 - 1.4644i -0.1092 - 1.5162i -0.1167 - 1.5714i -0.1239 - 1.6299i -0.1308 - 1.6920i -0.1374 - 1.7578i -0.1436 - 1.8273i -0.1494 - 1.9006i -0.1549 - 1.9780i -0.1601 - 2.0594i -0.1649 - 2.1452i -0.1694 - 2.2354i -0.1736 - 2.3302i -0.1775 - 2.4299i -0.1810 - 2.5345i -0.1844 - 2.6442i -0.1875 - 2.7594i -0.1903 - 2.8802i -0.1929 - 3.0069i -0.1953 - 3.1397i -0.1976 - 3.2789i -0.1996 - 3.4247i -0.2015 - 3.5775i -0.2032 - 3.7375i -0.2048 - 3.9052i -0.2063 - 4.0807i -0.2222 -81.7209i Inf + 0.0000i
k = 1×53
0 0.5932 0.6491 0.7103 0.7772 0.8504 0.9305 1.0182 1.1141 1.2190 1.3339 1.4595 1.5970 1.7475 1.9121 2.0922 2.2893 2.5050 2.7410 2.9992 3.2817 3.5908 3.9291 4.2993 4.7043 5.1474 5.6323 6.1629 6.7435 7.3787
fre2 = isfinite(real(r(2,:)));
fim2 = isfinite(imag(r(2,:)));
fidx2 = fre2 & fim2;
fre3 = isfinite(real(r(3,:)));
fim3 = isfinite(imag(r(3,:)));
fidx3 = fre3 & fim3;
v2 = interp1(real(r(2,fidx2)), imag(r(2,fidx2)), 0, 'linear','extrap')
v2 = 1.0409
k2 = interp1(imag(r(2,fidx2)), k(fidx2), v2, 'linear','extrap')
k2 = 1.5835
v3 = interp1(real(r(3,fidx3)), imag(r(3,fidx3)), 0, 'linear','extrap')
v3 = -1.0409
k3 = interp1(imag(r(3,fidx3)), k(fidx3), v3, 'linear','extrap')
k3 = 1.5835
figure
plot(real(r(1,:)),imag(r(1,:)), '-g')
hold on
plot(real(r(2,:)),imag(r(2,:)), '-b')
plot(real(r(3,:)),imag(r(3,:)), '-r')
plot(0, v2, 'sr')
plot(0, v3, 'sb')
hold off
grid
ylim([-6 6])
.
  2 件のコメント
Paul
Paul 2021 年 6 月 15 日
Will this solution work if a branch of the root locus crosses the imaginary axis twice? For example if
sys = tf([3 1],[9 7 5 6]) * tf(20,[1 20])
Can this solution be generalized to loop over all of the rows of r?
As I understand it, this solution assumes that the rows of r are, in some sense, smooth. I think that rlocus() tries to ensure this, but I'm not sure it's guaranteed.
Star Strider
Star Strider 2021 年 6 月 15 日
This is prototype code.
It simply shows the correct approach, and would likely have to be adapted to specific situations that did not follow the same sort of loci.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeClassical Control Design についてさらに検索

タグ

製品


リリース

R2020a

Community Treasure Hunt

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

Start Hunting!

Translated by