Matlab 高斯 Chi方 右尾函数 Q函数

function [P]=Qchipr2(nu,lambda,x,epsilon)
%
% This program computes the right-tail probability
% of a central or noncentral chi-squared PDF.
%
% Input Parameters:
%
% nu       = Degrees of freedom (1,2,3,etc.)
%
% lambda   = Noncentrality parameter (must be positive),
% set = 0 for central chi-squared PDF
% x        Real vector value of random variable
% epsilon  = maximum allowable error (should be a small
% number such as 1e-5) due to truncation of the
% infinite sum
%
% Output Parameters:
%
% P       = right-tail probability or probability that
% the random variable exceeds the given value
% (1 - CDF)
%
% Verification Test Case:
%
% The inputs nu=1, lambda=2, x=0.5, epsilon=0.0001
% should produce P=0.7772
% The inputs nu=5, lambda=6, x=10, epsilon=0.0001
% should produce P=0.5063
% The inputs nu=8, lambda=10, x=15, epsilon=0.0001
% should produce P=0.6161
%
% Determin how many terms in sum to be used (find M)
t=exp(lambda/2)*(1-epsilon);
sum=1;
M=0;
while sum<t
    M=M+1;
    sum=sum+((lambda/2)^M)/prod(1:M);
end
% Use different algorithm for nu even or odd.
if (nu/2-floor(nu/2)) == 0  % nu is even.
    % Compute k=0 term of sum.
    % compute Qchi2_nu((x).
    % Start recursion with Qchi2_2(x).
    Q2=exp(-x/2);g=Q2;
    for m=4:2:nu   % If nu=2 , loop will be omitted.
        g=g.*x/(m-2);
        Q2=Q2+g;
    end
    % Finish computation of k=0 term.
    
    P=exp(-lambda/2)*Q2;
    % Compute remaining terms of sum.
    for k=1:M
        m=nu+2*k;
        g=g.*x/(m-2);Q2=Q2+g;
        arg=(exp(-lambda/2)*(lambda/2)^k)/prod(1:k);
        P=P+arg*Q2;
    end
else % nu is odd
    % Compute k=0 term of sum.
    P=2*Q(sqrt(x));
    % Start recursion with Qchi2p_3(x).
    Q2p=sqrt(2*x/pi).*exp(-x/2);g=Q2p;
    if nu >1
        for m=5:2:nu  % If nu=3 , loop will be omitted
            g=g.*x/(m-2);
            Q2p=Q2p+g;
        end
        P=exp(-lambda/2)*Q2p;
        
        % Compute remaining terms of sum.
        for k=1:M
            m=nu+2*k;
            g=g.*x/(m-2);Q2p=Q2p+g;
            arg=(exp(-lambda/2)*(lambda/2)^k)/prod(1:k);
            P=P+arg*Q2p;
        end
    else
        % If nu=1, the k=0 term is just Qchi2_1(x)=2Q(sqrt(x)).
        % Add the k=0 and k=1 terms.
        P=P+exp(-lambda/2)*(lambda/2)*Q2p;
        % Compute remaining terms.
        for k=2:M
            m=nu+2*k;
            g=g.*x/(m-2);Q2p=Q2p+g;
            arg=(exp(-lambda/2)*(lambda/2)^k)/prod(1:k);
            P=P+arg*Q2p;
        end
    end
end
end


function y=Q(x)
y=0.5*erfc(x/sqrt(2));
end


function y=Qinv(x)
y=sqrt(2)*erfinv(1-2*x);
end


normcdf
norminv
chi2cdf
chi2inv
ncx2cdf
ncx2inv


  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 适合毕业设计、课程设计作业。这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。 所有源码均经过严格测试,可以直接运行,可以放心下载使用。有任何使用问题欢迎随时与博主沟通,第一时间进行解答!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值