我正在尝试从八度音程运行一个M文件,但是我收到了这个错误:
Octave evaluation error: 'ncx2cdf' undefined
答案 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,将其放在八度音程中。