下不完全gamma函数的c++实现(精度可调)

      首先是下不完全伽马函数的定义:

       如果按照定义使用c++按照积分形式写,精度会受到积分的影响,并且影响较大,在gamma函数斜率较大的一些点结果误差会较大。

      本文按照百度百科提供的下不完全伽马函数的解析延拓的展开式进行c++程序编写。

      解析延拓展开式:

 

       根据此式得到的是精确地gamma函数值,但是c++无法进行无穷次的循环累加,因此只需根据自己所需精度设置k的累加次数即可。(一般情况下k=10精度就已足够)

附上c++代码:

#include "device_launch_parameters.h"
#include <math.h>
#include <stdio.h>
float gamma(double x, double s)
{
    double a = 0;
    float res = 0;
    for (int i = 0; i < 10; i++)//i为级数,i越大精度越高,用时越多。
    {
        a += pow(x, i) / tgamma(s + i + 1);
    }
    res = (pow(x, s) * tgamma(s) * a * exp(-x)) / tgamma(s);
    return res;
}

int main()
{
    float a = gamma(1.3, 1.5);
    printf("%f", a);
}

上面i=10时的输出与MATLAB中gammainc()函数输出完全一致。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值