Octave:“'ncx2cdf'未定义'错误

时间:2017-05-15 15:15:26

标签: octave

我正在尝试从八度音程运行一个M文件,但是我收到了这个错误:

Octave evaluation error: 'ncx2cdf' undefined     

3 个答案:

答案 0 :(得分:1)

显然,非中心卡方分布为simply defined as 1 minus the Marcum Q function。 octave-forge的signal package为此函数提供an implementation(看似与matlab兼容)。

因此,您可以简单地编写自己的ncx2cdf函数,如下所示:

function Out = myncx2cdf (X, V, Delta)
  Out = 1 - marcumq (sqrt (Delta), sqrt (X), V/2);
end

在matlab中确认:

>> X = randi(100, [1,20]); V = 4; Delta = 10;
>> ncx2cdf(X, V, Delta)                          
ans =
    1.0000    0.9410    0.9999    1.0000    1.0000    1.0000    1.0000    0.5549    0.6093    0.9410    1.0000    0.9410    1.0000    0.9279    1.0000    0.9920    0.8183    0.9410    1.0000    0.9997
>> 1 - marcumq(sqrt(Delta), sqrt(X), V/2)
ans =
    1.0000    0.9410    0.9999    1.0000    1.0000    1.0000    1.0000    0.5549    0.6093    0.9410    1.0000    0.9410    1.0000    0.9279    1.0000    0.9920    0.8183    0.9410    1.0000    0.9997

相同X,V和Delta的八度会话:

octave:34> pkg load signal
octave:35> 1 - marcumq(sqrt(Delta), sqrt(X), V/2)
ans =
   1.00000   0.94105   0.99988   1.00000   1.00000   1.00000   0.99996   0.55492   0.60929   0.94105   1.00000   0.94105   1.00000   0.92793   1.00000   0.99203   0.81831   0.94105   1.00000   0.99972

注意,使用此实现,参数V的自由度被限制为偶数值;如果你也想使用奇怪的自由度,例如5,这可以从V = 4和V = 6的结果中插值(这在实践中似乎很有效)。

答案 1 :(得分:0)

运行pkg load statistics后,我查找了ncx2cdf,但它给了我以下警告:

  

' ncx2cdf' function属于Octave的统计包   Forge但尚未实施请阅读http://www.octave.org/missing.html以了解具体方法   缺少功能。

嗯...

答案 2 :(得分:0)

这是非中心卡方分布的简单实现:

example: a[]=0b1011,0b1111 to 10111111 and 10010101 to b[]=0b1001,0b0101

here is the function file,将其放在八度音程中。