我编写了一种算法,用于检查Nyquist准则(criterion)的闭系统的稳定性。
function answear=stability(re,im)
%% Function check stability of system
%re is real part of transmitation
%im is imagine part of transmitation
%% Check number of vectors elements
re(end +1:5) = 0;
im(end +1:5) = 0;
if( length(re) > length(im))
root = length(re);
else
root = length(im);
end
for w=1:root
tran(w) = re(1) + re(2)*w.^1 + re(3)*w.^2 + re(4)*w.^3 + re(5)*w.^4 +1i*(...
im(1) + im(2)*w.^1 + im(3)*w.^2 + im(4)*w.^3 +im(5)*w.^4);
end
%% Algorithm
switch root
case 0
exist('Write nonzero numbers', 'var')
case 1
for w=1:length(w)
if( real(tran(w)) > 0 && imag(tran(w)) > 0)
answear=1;
else
answear=0;
end
end
case 2
for w=1:length(w)
if( real(tran(w)) > 0 && imag(tran(w)) > 0)
if( real(tran(w)) < 0 && imag(tran(w)) > 0)
answear=1;
else
answear=0;
end
end
end
case 3
for w=1:length(w)
if( real(tran(w)) > 0 && imag(tran(w)) > 0)
if( real(tran(w)) < 0 && imag(tran(w)) > 0)
if( real(tran(w)) < 0 && imag(tran(w)) < 0)
answear=1;
else
answear=0;
end
end
end
end
case 4
for w=1:length(w)
if( real(tran(w)) > 0 && imag(tran(w)) > 0)
if( real(tran(w)) < 0 && imag(tran(w)) > 0)
if( real(tran(w)) < 0 && imag(tran(w)) < 0)
if( real(tran(w)) > 0 && imag(tran(w)) < 0)
answear=1;
else
answear=0;
end
end
end
end
end
end
%% Answear
if answear==1
disp('System unstable')
else
disp('System stable')
end
plot(real(tran),imag(tran))
grid on
end函数返回
未定义的函数或变量“穿衣”。 如果answear==1的话,稳定性方面的错误(第87行)
那么算法写得不好吗?
发布于 2013-09-23 12:37:11
您的代码可能需要大量清理:
real(tran(w))不能同时是正的和负的(除非它是您正在处理的向量,在这种情况下,您不应该使用运算符&&)。
此外,这可能是您的代码触发了有关变量answear的错误。访问它是不可能的,因为它没有被分配一个值(if-语句都没有被执行)。tran,w是什么?它们是全局变量吗?如果是,将它们作为输入参数传递。如果您的函数依赖于外部状态和变量,那么它的设计可能会很糟糕。实际上,我还没有运行您的代码,但是这些建议会使您更容易调试它。
P.S:
请修复恼人的拼写错误(它是“答案”,而不是“内裤”):
https://stackoverflow.com/questions/18959049
复制相似问题