如何在不使用特殊Matlab函数的情况下绘制Root Locus

时间:2015-04-07 04:14:41

标签: matlab plot transfer-function

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

查看我的代码。

%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

谢谢

1 个答案:

答案 0 :(得分:0)

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

我建议通过创建包含k的向量k然后使用单独的变量(例如0:0.1:1000)作为索引变量来分隔ii和索引变量for loop:

%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