【问题标题】:How to plot Root Locus without using special Matlab functions如何在不使用特殊 Matlab 函数的情况下绘制根轨迹
【发布时间】:2015-04-07 04:14:40
【问题描述】:

我需要在不使用任何特殊的 Matlab 函数(即“rlocus”、“tf”)的情况下,用给定传递函数的“k”变化来绘制根轨迹。我被允许使用根。下面的代码显示了一条我无法弄清楚的错误/警告消息(下标索引必须是真正的正整数或逻辑。)。

查看我的代码。

%In vector form
num = input('Enter the coefficients of numerator of J(s): ');
%In vector form 
den = input('Enter the coefficients of denominator of J(s): ');
qs = 0; 
for k = 0:0.1:1000; 
qs(k,:) = roots(den + num.*k); 
end; 
plot(qs,'+'), xlabel('\sigma'), ylabel('j\omega'), title ('Root-Locus'), grid

谢谢

【问题讨论】:

  • 您正在索引qs(k,:)q 并不总是一个整数,您正在尝试执行q(0,:)=...q(0.1,:)=... 等。Matlab 错误消息告诉您究竟是什么问题是。
  • 感谢您回答我的问题,我需要将 k 从零变为一个大数,如果我尝试将其更改为从 1 开始,我会收到另一条错误消息(下标分配维度不匹配。)

标签: matlab plot transfer-function


【解决方案1】:

正如@David 在评论中已经描述的那样,问题是您使用k=0:0.1:1000 作为索引。因此,您尝试访问 qs(0)qs(0.1)、...,这在 MATLAB 中是不可能的。索引必须是大于 0 的整数值大于,即从 1 开始。 (与大多数编程语言不同,索引从 0 开始)。

我建议通过创建一个包含0:0.1:1000 的向量k 来分离k 和索引变量,然后在for 循环中使用一个单独的变量(例如ii)作为索引变量:

%In vector form
num = input('Enter the coefficients of numerator of J(s): ');
%In vector form 
den = input('Enter the coefficients of denominator of J(s): ');
qs = 0; 
k = 0:0.1:1000;
for ii = 1:length(k)
    qs(ii,:) = roots(den + num.*k(ii)); 
end; 
plot(qs,'+'), xlabel('\sigma'), ylabel('j\omega'), title ('Root-Locus'), grid

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-08-26
    • 1970-01-01
    • 2014-03-26
    相关资源
    最近更新 更多