使用VPA评估微小概率

问题描述 投票:0回答:1

对于统计应用程序,我需要评估微小的卡方概率。但是当它小于 matlab 的双精度限制

realmin
(大约 1e-308)时,它返回 0。

x=50;
p=chi2cdf(x^2,4,'upper')
>> 0

我所需要的只是存储数字的数量级和一些前导数字。我知道使用

vpa
您可以将小于
realmin
的微小数字存储为任意精度:

y = vpa('1e-5000')
>> 1.0e-5000
log10(y)
>> -5000.0

但这似乎不适用于

chi2cdf

x = vpa('50');
chi2cdf(x^2,4,'upper')

抛出错误。

这是否意味着某些 Matlab 函数(例如

chi2cdf
)根本不适合处理可变精度输入?还有其他办法吗?

matlab statistics precision probability arbitrary-precision
1个回答
0
投票

看起来

chi2cdf
不支持符号输入。卡方 CDF 可以用正则化不完全伽马函数表示,在 Matlab 中为
gammainc
,但也不支持符号输入。

因此,您可能必须通过

int
手动将 CDF 定义为符号积分,仅使用具有符号版本的函数:

x = 2500; % input value
k = 2; % input value
d = 30; % number of digits
syms ks xs
result = int(xs^(ks/2-1)*exp(-xs/2)/2^(ks/2)/gamma(ks/2), x, inf);
result = vpa(subs(subs(result, xs, x), ks, k), d)

给予

result =
1.35486998238286942020782923322e-543
© www.soinside.com 2019 - 2024. All rights reserved.