Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab Nyquist准则-算法中未定义的变量_Matlab_Signal Processing_Nyquist - Fatal编程技术网

Matlab Nyquist准则-算法中未定义的变量

Matlab Nyquist准则-算法中未定义的变量,matlab,signal-processing,nyquist,Matlab,Signal Processing,Nyquist,我写了一个算法来检查奈奎斯特准则()封闭系统的稳定性 function answear=稳定性(re,im) %%功能检查系统的稳定性 %re是传递的真实部分 %im是传播的一部分 %%检查向量元素的数量 re(end+1:5)=0; im(end+1:5)=0; 如果(长度(re)>长度(im)) 根=长度(re); 其他的 根=长度(im); 结束 对于w=1:根 交易(w)=re(1)+re(2)*w.^1+re(3)*w.^2+re(4)*w.^3+re(5)*w.^4+1i*(。。。

我写了一个算法来检查奈奎斯特准则()封闭系统的稳定性

function answear=稳定性(re,im)
%%功能检查系统的稳定性
%re是传递的真实部分
%im是传播的一部分
%%检查向量元素的数量
re(end+1:5)=0;
im(end+1:5)=0;
如果(长度(re)>长度(im))
根=长度(re);
其他的
根=长度(im);
结束
对于w=1:根
交易(w)=re(1)+re(2)*w.^1+re(3)*w.^2+re(4)*w.^3+re(5)*w.^4+1i*(。。。
即时通讯(1)+即时通讯(2)*w.^1+im(3)*w.^2+im(4)*w.^3+im(5)*w.^4);
结束
%%算法
开关根
案例0
存在('写入非零数字','变量')
案例1
对于w=1:长度(w)
if(real(tran(w))>0&&imag(tran(w))>0
answear=1;
其他的
answear=0;
结束
结束
案例2
对于w=1:长度(w)
if(real(tran(w))>0&&imag(tran(w))>0
if(real(tran(w))<0&&imag(tran(w))>0
answear=1;
其他的
answear=0;
结束
结束
结束
案例3
对于w=1:长度(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;
其他的
answear=0;
结束
结束
结束
结束
案例4
对于w=1:长度(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)
如果(实(传输(w))>0&&imag(传输(w))<0)
answear=1;
其他的
answear=0;
结束
结束
结束
结束
结束
结束
%%安斯威尔
如果answear==1
disp(“系统不稳定”)
其他的
disp(“系统稳定”)
结束
地块(真实(交通)、图像(交通))
网格化
结束
函数返回

未定义的函数或变量“answear”

如果answear==1,则稳定性错误(第87行)


因此,算法编写得很糟糕?

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

  • 而不是像这样的if语句:

    if( real(tran(w)) > 0 && imag(tran(w)) > 0) 
        answear=1;
    else
        answear=0;
    end
    
    您可以编写布尔赋值:

    answear = real(tran(w)) > 0 & imag(tran(w)) > 0);
    
  • 为什么有三个(几乎)相同的嵌套if语句

    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)
    if(real(tran(w))<0&&imag(tran(w))>0
    if(real(tran(w))<0&&imag(tran(w))<0)
    
    首先,可以用一个if语句替换所有内容。但是你用这个测试什么呢?这些嵌套的if语句似乎从未执行过。例如,
    real(tran(w))
    不能同时为正和负(除非它是您正在处理的向量,在这种情况下,您不应该使用运算符
    &&

    此外,这可能是您的代码触发了有关变量
    answear
    的错误。访问它是不可能的,因为它并没有被赋值(if语句都并没有被执行)

  • 什么是
    tran
    ,什么是
    w
    ?它们是全局变量吗?如果是,则将其作为输入参数传递。如果函数依赖于外部状态和变量,那么它的设计可能很糟糕

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

    p.S

    请纠正令人恼火的拼写错误(它是“答案”而不是“answear”):

    2.要检查奈奎斯特标准的稳定性,图形必须经过坐标系的尽可能多的象限,这是一个行传递函数(方程)。例如,如果表达式为三度,则图形将依次通过I、II、III四分之一系统。这就是为什么我尝试在循环中检查每个字符表达式的实部和虚部。Tran是透射率,w是脉动(频率)。@Kulis再次,仔细阅读我的评论:
    Tran(w)>0
    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)