C#产生正态分布、泊松分布、指数分布、负指数分布随机数(原创)
http://blog.sina.com.cn/s/blog_76c31b8e0100qskf.html
在编程过程中,由于数据仿真模拟的需要,我们经常需要产生一些随机数,在C#中,产生一般随机数用Random即可,但是,若要产生服从特定分布的随机数,就需要一定的算法来支持了,为了方便广大编程人员,我将我再做项目过程中用到的产生服从正态分布、泊松分布、指数分布以及负指数分布随机数的方法与大家共享,希望会有所帮助!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
namespace PZ
{
class Model
{
/// <summary>
/// 正态分布随机数
/// </summary>
const int N = 100;
const int MAX = 50;
const double MIN = 0.1;
const int MIU = 40;
const int SIGMA = 1;
static Random aa = new Random((int)(DateTime.Now.Ticks / 10000));
public double AverageRandom(double min, double max)//产生(min,max)之间均匀分布的随机数
{
int MINnteger = (int)(min * 10000);
int MAXnteger = (int)(max * 10000);
int resultInteger = aa.Next(MINnteger, MAXnteger);
return resultInteger / 10000.0;
}
public double Normal(double x, double miu, double sigma) //正态分布概率密度函数
{
return 1.0 / (x * Math.Sqrt(2 * Math.PI) * sigma) * Math.Exp(-1 * (Math.Log(x) - miu) * (Math.Log(x) - miu) / (2 * sigma * sigma));
}
public double Random_Normal(double miu, double sigma, double min, double max)//产生正态分布随机数
{
double x;
double dScope;
double y;
do
{
x = AverageRandom(min, max);
y = Normal(x, miu, sigma);
dScope = AverageRandom(0, Normal(miu, miu, sigma));
} while (dScope > y);
return x;
}
/// <summary>
/// 指数分布随机数
/// </summary>
/// <param name="const_a"></param>
/// <returns></returns>
public double RandExp(double const_a)//const_a是指数分布的参数λ
{
Random rand = new Random(Guid.NewGuid().GetHashCode());
double p;
double temp;
if (const_a != 0)
temp = 1 / const_a;
else
throw new System.InvalidOperationException("除数不能为零!不能产生参数为零的指数分布!");
double randres;
while (true) //用于产生随机的密度,保证比参数λ小
{
p = rand.NextDouble();
if (p < const_a)
break;
}
randres = -temp * Math.Log(temp * p, Math.E);
return randres;
}
/// <summary>
/// 负指数分布随机数产生
/// </summary>
/// <param name="lam">参数</param>
/// <returns></returns>
Random ran;
public Model()
{
ran = new Random();
}
public double ngtIndex(double lam)
{
double dec = ran.NextDouble();
while (dec == 0)
dec = ran.NextDouble();
return -Math.Log(dec) / lam;
}
/// <summary>
/// 泊松分布产生
/// </summary>
/// <param name="lam">参数</param>
/// <param name="time">时间</param>
/// <returns></returns>
public double poisson(double lam, double time)
{
int count = 0;
while (true)
{
time -= ngtIndex(lam);
if (time > 0)
count++;
else
break;
}
return count;
}
}
}
C#产生正态分布、泊松分布、指数分布、负指数分布随机数(原创)相关推荐
- python学习笔记:泊松分布和负指数分布随机数的python实现
不能算是纯原创吧,算半个转载好了,但保证一定能用! 首先导入模块 import math import random 泊松分布 def poisson(L):"""poi ...
- 统计学(1)二项分布 几何分布 泊松分布 指数分布 正态分布 gamma分布 beta分布
分布与分布关系 1.二项分布 2.几何分布 3.泊松分布 4.二项分布转化泊松分布,泊松转化正态分布 5.指数分布 6.gamma分布 7.泊松.指数.gamma三者关系 8.Beta分布 1.二项分 ...
- 概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布
概率特性仿真实验与程序-Matlab仿真-随机数生成-负指数分布-k阶爱尔兰分布-超指数分布 使用Java中的SecureRandom.nextDouble()生成一个0~1之间的随机浮点数,然后使用 ...
- java生成指数分布随机数_生成特定分布随机数的方法
生成随机数是程序设计里常见的需求.一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数.不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等.有些编程语言已经有比较完善的实 ...
- 【概率论与数理统计02】那些年,正态分布、指数分布、伽马分布、卡方分布之间的发生的那些事儿(下)
前记:书接上回,先来回顾一下四个分布之间的关系图. 图1 四个分布关系简图 3. 简洁的三哥--指数分布 指数分布及特性 形如其名,指数分布的概率密度函数应该是最简单的了,就是单纯的指数函数的形 ...
- 【概率论与数理统计01】那些年,正态分布、指数分布、伽马分布、卡方分布之间的发生的那些事儿(上)
前记:大多数通信领域的论文都用到了复杂的数学工具,而数学推导中其中很大一部分都涉及到了概率论的知识,痛恨当时自己没有好好学(大哭).所以今天又来开一个新坑,我一遍学一遍填,希望有朝一日能把这个坑筑成一 ...
- matlab逆变换法产生随机数_信号处理——生成给定分布随机数
作者:桂. 时间:2017-03-12 19:31:55 前言 本文是曲线拟合与分布拟合一文的插曲,进行分布拟合时,碰到一个问题是,如何指定分布的随机数呢?本文主要包括: 1)连续型随机数: 2)离 ...
- 生成特定分布随机数的方法
生成随机数是程序设计里常见的需求.一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数.不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等.有些编程语言已经有比较完善的实 ...
- 泊松分布 指数分布 及其数字特征
一.泊松分布 泊松分布的概率函数为: 泊松分布的参数λ是单位时间(或单位面积)内随机事件的平均发生率. 泊松分布适合于描述单位时间内随机事件发生的次数. 泊松分布的期望和方差均为 特征函数为 日常生活 ...
最新文章
- apt-get 命令介绍
- php网站首页点击更多时获取数据,jQuery+PHP实现点击按钮加载更多,不刷新页面加载更多数据!附:可用源码+demo...
- Android防止按钮连续点击
- 【转】谈谈三层架构中MODEL的作用
- 希捷发布世界最薄、最快2TB硬盘:7毫米
- 《庆余年》,腾讯视频、爱奇艺为“互联网黑产”背锅的一出戏
- Condition - Java多线程编程
- sqlmap安装_黑客神器系列篇章之“sqlmapquot;
- r语言做断轴_R语言用nls做非线性回归以及函数模型的参数估计
- 从戈君离开B站,聊聊技术人如何面对期权不踩坑
- font config 问题实践 001 - 如何获取font config的配置文件
- opensource项目_生日快乐,Opensource.com:9年
- php 二维数组根据键值合并二维数组_3分钟短文 | PHP 根据值移除数组元素,哪个方法最简单?...
- 计算机硬件格式,排版格式要求_计算机硬件及应用_IT/计算机_资料
- tomcat管理主机
- CarMaker支持导入的道路格式
- MYSQL下载及安装完整教程
- 一个五年Android开发者百度、阿里、聚美、映客的面试心经
- 【办公技巧】Excel技巧 点击单元格打对勾(宏)
- MySQL 表空间碎片