首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >奈奎斯特准则-算法中的未定义变量

奈奎斯特准则-算法中的未定义变量
EN

Stack Overflow用户
提问于 2013-09-23 12:17:28
回答 1查看 210关注 0票数 0

我编写了一种算法,用于检查Nyquist准则(criterion)的闭系统的稳定性。

代码语言:javascript
复制
    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行)

那么算法写得不好吗?

EN

回答 1

Stack Overflow用户

发布于 2013-09-23 12:37:11

您的代码可能需要大量清理:

  1. 而不是像这个这样的if-语句: 如果(tran(tran(W))>0 && imag(tran(w)) > 0) answear=1;if answear=0;end 您可以编写布尔赋值: 磨损=实(tran(W))>0& imag(tran(w)) >0;
  2. 为什么有三个(几乎)相同的嵌套if-语句呢? 如果(tran(W))>0& imag(tran(w)) > 0) if( tran(W))<0& imag(tran(w)) >0如果(tran(W))<0& imag(tran(w)) <0&imag(tran(W))< 0) 首先,您可以用一个if-语句替换所有内容。但你到底在用这个测试什么?这些嵌套的if语句似乎从未被执行过。例如,real(tran(w))不能同时是正的和负的(除非它是您正在处理的向量,在这种情况下,您不应该使用运算符&&)。 此外,这可能是您的代码触发了有关变量answear的错误。访问它是不可能的,因为它没有被分配一个值(if-语句都没有被执行)。
  3. 什么是tranw是什么?它们是全局变量吗?如果是,将它们作为输入参数传递。如果您的函数依赖于外部状态和变量,那么它的设计可能会很糟糕。

实际上,我还没有运行您的代码,但是这些建议会使您更容易调试它。

P.S

请修复恼人的拼写错误(它是“答案”,而不是“内裤”):

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18959049

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档