Function 为什么倍频程不';你看不到这个物体吗?

Function 为什么倍频程不';你看不到这个物体吗?,function,matlab,octave,Function,Matlab,Octave,我想用倍频程编写函数,但在编写过程中发现了一些问题: N=700; T=900; lambda=N/T; x=randn(N,T); s=std(x(:)); r=x*x'/T; l=eig(r); lambda_plus=(s^2)*(1+sqrt(lambda))^2; lambda_minus=(s^2)*(1-sqrt(lambda))^2; # Define a function - value of this function depenends # on position of

我想用倍频程编写函数,但在编写过程中发现了一些问题:

N=700;
T=900;
lambda=N/T;

x=randn(N,T);
s=std(x(:));
r=x*x'/T;
l=eig(r);
lambda_plus=(s^2)*(1+sqrt(lambda))^2;
lambda_minus=(s^2)*(1-sqrt(lambda))^2;

# Define a function - value of this function depenends
# on position of x
function kiki = avg (x)
  if (x <= lambda_plus && x >= lambda_minus)
    (1/(2*pi*lambda*x*s^(2)))*sqrt((lambda_plus-x)*(x-lambda_minus));
  else 
      0
  endif
endfunction
但这不是真的<代码>lambda_plus在函数定义之前定义

我读到这个问题可能是,因为octave没有看到我们的函数,解决方案是:

(1) 用函数名保存文件-在我的例子中是avg.m

(2) 打开一个新文件,在新文件中运行您的函数


我完全按照他们说的做了,在新创建的文件中,我运行了
avg(2)
,但不幸的是结果完全相同。

不确定倍频程,但在MATLAB中,
lambda_plus
lambda_minus
的范围在本地脚本中,我相信不会扩展到函数
avg()
。我倾向于在函数中计算函数所需的任何内容,或者将其作为输入传递。函数有自己的作用域,并且看不到其他作用域中存在的变量,例如调用方的作用域。只有两个例外:匿名函数(lambda)捕获父作用域中变量的值,嵌套函数也可以访问父作用域。我建议你阅读关于这些概念的文档来了解更多。你是对的!非常感谢您抽出时间!此外,您的函数没有赋值给它表面上的返回值
error: 'lambda_plus' undefined near line 15, column 15