目录

介绍

背景

使用代码


  • 下载源8.7 KB

介绍

用Ramanujan的阶乘近似值计算C#中的泊松分布

背景

如果需要用于很大型Lambda的泊松累积分布函数,则可以使用此代码。

使用代码

泊松概率质量函数的公式为:

在C#中,可以将其计算为:

public double Cdf(long k)
{var e = Math.Pow(Math.E, -_lambda);long i = 0;var sum = 0.0;while (i <= k){sum += e * Math.Pow(_lambda, i) / Factorial(i);i++;}return sum;
}

问题在于,随着k和_lambda(_lambda = λ)增加,分母都变得非常大,并且程序崩溃。这可以通过使用对数来解决。为简单起见,自然对数是用于:。计算中使用以下规则:

计算使用对数和Ramanujan的阶乘近似表示:

请在此处详细了解。

设置Math.Pow(_lambda, i) / Factorial(i)= (A) = (\frac{\lambda ^{i}}{i!})给出了

通过使用Ramanujan的阶乘近似,我们得到:

使用C#表示法并利用,我们得到:

A = Math.Pow(e, i*ln(ℷ) -i*ln(i) + i - ln(i*(1 + 4*i*(1 + 2*i)))/6 - ln(π)/2))

可以在C#计算中使用此表达式,如以下代码所示:

var log6ThTail = Math.Log(i * (1 + 4 * i * (1 + 2 * i)))/6;
var lnN = i * Math.Log(_lambda) - (i * Math.Log(i) - i + log6ThTail + logPiDivTwo);
n = Math.Pow(Math.E, lnN - _lambda);

这是代码:

using System;namespace PoissonEvaluator
{public class PoissonDistribution{private readonly double _lambda;public PoissonDistribution(double lambda = 1.0){_lambda = lambda;}public double Pmf(long k){if (k > 170 || double.IsInfinity(Math.Pow(_lambda, k))){var logLambda = k * Math.Log(_lambda) - _lambda - (k * Math.Log(k) - k +Math.Log(k * (1 + 4 * k * (1 + 2 * k))) / 6 + Math.Log(Math.PI) / 2);return Math.Pow(Math.E, logLambda);}return Math.Pow(Math.E, -_lambda) * Math.Pow(_lambda, k) / Factorial(k);}public double Cdf(long k){long i = 0;var sum = 0.0;var infinityIsFound = false;var eLambda = Math.Pow(Math.E, -_lambda);var logPiDivTwo = Math.Log(Math.PI) / 2;while (i <= k){double n;if (infinityIsFound){var log6ThTail = Math.Log(i * (1 + 4 * i * (1 + 2 * i))) / 6;var lnN = i * Math.Log(_lambda) - (i * Math.Log(i) - i +log6ThTail + logPiDivTwo);n = Math.Pow(Math.E, lnN - _lambda);}else{if (i > 170 || double.IsInfinity(Math.Pow(_lambda, i))){infinityIsFound = true;var log6ThTail = Math.Log(i * (1 + 4 * i * (1 + 2 * i))) / 6;var lnN = i * Math.Log(_lambda) - (i * Math.Log(i) - i +log6ThTail + logPiDivTwo);n = Math.Pow(Math.E, lnN - _lambda);}else{n = eLambda * Math.Pow(_lambda, i) / Factorial(i);}}sum += n;i++;}return (sum > 1) ? 1.0 : sum;}public double Factorial(long k){long count = k;double factorial = 1;while (count >= 1){factorial = factorial * count;count--;}return factorial;}}

大型Lambda的C# 泊松累积分布相关推荐

  1. 程序实现泊松随机分布

    泊松分布适合于描述单位时间(或空间)内随机事件发生的次数.如某一服务设施在一定时间内到达的人数,电话交换机接到呼叫的次数,汽车站台的候客人数,机器出现的故障数,自然灾害发生的次数,一块产品上的缺陷数, ...

  2. matlab分布函数逆函数,MATLAB如何使用icdf函数计算指定分布的逆累积分布

    MATLAB如何使用icdf函数计算指定分布的逆累积分布 [语法说明] Y=icdf('name',X,A) Y=icdf('name',X,A,B) Y=icdf('name',X,A,B,C) 字 ...

  3. 概率密度直方图(可看作PDF的在步长较大时的近似)与累积分布直方图(可看作CDF的在步长较大时的近似)

    在概率密度直方图中,取到任一bin中的一个样本的平均概率,等于该箱的高度(纵坐标y值) × 宽度(横坐标间距δx) ÷ 该箱中样本个数(n_samples),而不是等于纵坐标y值:即此时面积表示概率之 ...

  4. python panda 库 累积分布,Python Pandas:使用滚动回溯窗口计算累计总和

    我正在计算(下表)中的"总获胜(2天)"列的值-逗号分隔值也请参见下文. 总胜利数(2天)是该运动员在该天(例如第5天)或前一天(例如第4天)获胜的比赛次数的累积计数-因此,它是2 ...

  5. java实现正态分布累积分布_标准正态分布变量的累积概率分布函数

    最近有个期权项目,计算理论价时需要使用标准正态分布变量的累积概率分布函数,excel中可以通过normsdist函数得到该结果,但是项目不考虑调用excel公式,于是只能用java来实现这个公式. 先 ...

  6. matlab求莱斯分布pdf,Matlab累积分布函数cdf与概率密度函数pdf

    累积分布函数cdf (Cumulative Distribution Function) 背景知识:http://www.lifelaf.com/blog/?p=746 语法 y = cdf('nam ...

  7. matlab逆变换法产生随机数_信号处理——生成给定分布随机数

    作者:桂. 时间:2017-03-12  19:31:55 前言 本文是曲线拟合与分布拟合一文的插曲,进行分布拟合时,碰到一个问题是,如何指定分布的随机数呢?本文主要包括: 1)连续型随机数: 2)离 ...

  8. 《概率论与数理统计》-第二章 随机变量及其分布-第一节 离散型随机变量及其分布-笔记

    目录 第一节 离散型随机变量及其分布 随机变量 定义 概率分布律 常用离散型随机变量及其分布律 分布函数 定义 性质 第一节 离散型随机变量及其分布 随机变量 定义 设 E E E是随机试验,它的样本 ...

  9. matlab累积概率分布,[转载]Matlab累积分布函数cdf与概率密度函数pdf

    累积分布函数cdf (Cumulative Distribution Function) 背景知识:http://www.lifelaf.com/blog/?p=746 语法 y = cdf('nam ...

最新文章

  1. 【转载】Real6410 Linux 常见问题总结(截至2010/07/26)
  2. 用java异常完成丢色子功能,java自动投掷骰子设计报告(含源码)
  3. 上海计算机应用基础自考上机,上海2010年自考计算机应用基础上机大纲
  4. centos7下载地址
  5. 在Java 8中使用Stream API列出ZIP文件的内容
  6. php 上传apk包到cdn_网站cdn加速,cdn防御系统
  7. sql server2008如果表中已经有很多条记录,再添加一个非空字段
  8. 决策单调性Ⅰ:四边形不等式(bzoj 1563: [NOI2009]诗人小G)
  9. mysql和oracle的索引类型
  10. 计算机替换的快捷键,Autointo Hotkey Changer电脑快捷键替换工具
  11. 酷狗计算机自动续费,怎么取消酷狗自动续费-APP自动续费关不了?可在微信支付宝这样操作!...
  12. Silvaco TCAD仿真5——process simulation(Athena)
  13. 【第5篇】人工智能(AI)语音测试原理和实践
  14. SCAPE、BlendSCAPE、SMPL、SMPL-H、SMPL-X、STAR等都是什么?请分别仔细介绍一下
  15. poj 2942 Knights of the Round Table(双连通分量+tarjan+二分图判定)
  16. 国家网络安全宣传周开幕 志翔科技护航核心数据与业务安全
  17. 国密SM3加密算法工具类(非对称)
  18. FPGA基础入门【1】Vivado官方免费版安装
  19. DecimalFormat 保留小数格式化
  20. 使用Email Receive端口上传文件至EDI系统

热门文章

  1. 倒N字形排列java_Java实现n位数字的全排列
  2. sql 日期加1天_SQL基础知识——BETWEEN
  3. python按照日期筛选数据_python – 按时间戳列筛选/选择pandas dataframe行
  4. linux noprobe参数,find 命令的参数详解
  5. UI设计师,作品集该怎么做?场景展示样机更具专业性
  6. 超简单炫彩抽象线条感海报PSD分层素材,一切变得简单!
  7. chrome 使用gpu 加速_DLI每周一课|用CUDA C的GPU加速库加速应用程序(新人有礼)
  8. 云原生时代的 YAML 教程
  9. Linux系统实现ICMP ping功能,并计算时延
  10. 一周文章导读:架构图;服务器;CPU