110,571
社区成员
发帖
与我相关
我的任务
分享
/****************************************************
产生N=100个在(0,50)区间内满足对数正态分布的随机数
/*****************************************************/
#include <stdlib.h>
#include <stdio.h>
#include <math.h>
#include <time.h>
#define N 100
#define MAX 50
#define MIN 0.1
#define MIU 2
#define SIGMA 1
#define PI 3.14159
double AverageRandom(double min,double max)//产生(min,max)之间均匀分布的随机数
{
int MINnteger = (int)(min*10000);
int MAXnteger = (int)(max*10000);
int randInteger = rand()*rand();
int diffInteger = MAXnteger - MINnteger;
int resultInteger = randInteger % diffInteger + MINnteger;
return resultInteger/10000.0;
}
double LogNormal(double x,double miu,double sigma) //对数正态分布概率密度函数
{
return 1.0/(x*sqrt(2*PI)*sigma) * exp(-1*(log(x)-miu)*(log(x)-miu)/(2*sigma*sigma));
}
double Random_LogNormal(double miu,double sigma,double min,double max)//产生对数正态分布随机数
{
double x;
double dScope;
double y;
do
{
x = AverageRandom(min,max);
y = LogNormal(x, miu, sigma);
dScope = AverageRandom(0, LogNormal(miu,miu,sigma));
}while( dScope > y);
return x;
}
void main(void)
{
srand(time(NULL));
int i,j;
for(i=0,j=0;i<N;i++)
{
printf("%14f", Random_LogNormal(MIU,SIGMA,MIN,MAX));
j++;
if(j==5)
{
printf("\n"); //每行显示5个数
j=0;
}
}
}
using System;
using System.Collections.Generic;
using System.IO;
class Program
{
///****************************************************
/// 产生N=100个在(0,50)区间内满足对数正态分布的随机数
///*****************************************************/
const int N = 100;
const int MAX = 50;
const double MIN = 0.1;
const int MIU = 2;
const int SIGMA = 1;
static double AverageRandom(double min, double max)//产生(min,max)之间均匀分布的随机数
{
int MINnteger = (int)(min * 10000);
int MAXnteger = (int)(max * 10000);
//Random aa = new Random(unchecked((int)DateTime.Now.Ticks));
//Random bb = new Random(~unchecked((int)DateTime.Now.Ticks));
// Random rdm1 = new Random(unchecked((int)DateTime.Now.Ticks));
// Random rdm2 = new Random(~unchecked((int)DateTime.Now.Ticks));
//int randInteger = aa.Next(0, 2147483647) * bb.Next(0, 2147483647);
//int diffInteger = MAXnteger - MINnteger;
//int resultInteger = randInteger % diffInteger + MINnteger;
Random aa = new Random(unchecked((int)DateTime.Now.Ticks));
int resultInteger = aa.Next(MINnteger, MAXnteger);
return resultInteger / 10000.0;
}
static double LogNormal(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));
}
static double Random_LogNormal(double miu, double sigma, double min, double max)//产生对数正态分布随机数
{
double x;
double dScope;
double y;
do
{
x = AverageRandom(min, max);
y = LogNormal(x, miu, sigma);
dScope = AverageRandom(0, LogNormal(miu, miu, sigma));
} while (dScope > y);
return x;
}
static void Main()
{
int i, j;
for (i = 0, j = 0; i < N; i++)
{
double x = Random_LogNormal(MIU, SIGMA, MIN, MAX);
Console.Write(x);
// System.Threading.Thread.Sleep(1000);
j++;
if (j == 5)
{
Console.Write("\n"); //每行显示5个数
j = 0;
}
}
Console.ReadLine();
}
}
using System;
using System.Collections.Generic;
using System.IO;
class Program
{
///****************************************************
/// 产生N=100个在(0,50)区间内满足对数正态分布的随机数
///*****************************************************/
const int N = 100;
const int MAX = 50;
const double MIN = 0.1;
const int MIU = 2;
const int SIGMA = 1;
static Random aa = new Random((int)(DateTime.Now.Ticks / 10000));
static double AverageRandom(double min, double max)//产生(min,max)之间均匀分布的随机数
{
int MINnteger = (int)(min * 10000);
int MAXnteger = (int)(max * 10000);
//Random aa = new Random(unchecked((int)DateTime.Now.Ticks));
//Random bb = new Random(~unchecked((int)DateTime.Now.Ticks));
// Random rdm1 = new Random(unchecked((int)DateTime.Now.Ticks));
// Random rdm2 = new Random(~unchecked((int)DateTime.Now.Ticks));
//int randInteger = aa.Next(0, 2147483647) * bb.Next(0, 2147483647);
//int diffInteger = MAXnteger - MINnteger;
//int resultInteger = randInteger % diffInteger + MINnteger;
int resultInteger = aa.Next(MINnteger, MAXnteger);
return resultInteger / 10000.0;
}
static double LogNormal(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));
}
static double Random_LogNormal(double miu, double sigma, double min, double max)//产生对数正态分布随机数
{
double x;
double dScope;
double y;
do
{
x = AverageRandom(min, max);
y = LogNormal(x, miu, sigma);
dScope = AverageRandom(0, LogNormal(miu, miu, sigma));
} while (dScope > y);
return x;
}
static void Main()
{
int i, j;
for (i = 0, j = 0; i < N; i++)
{
double x = Random_LogNormal(MIU, SIGMA, MIN, MAX);
Console.Write(x);
// System.Threading.Thread.Sleep(1000);
j++;
if (j == 5)
{
Console.Write("\n"); //每行显示5个数
j = 0;
}
}
Console.ReadLine();
}
}
//简单看了一下,其实很简单
//你把下面这句话写成全局静态属性
static Random aa = new Random((int)(DateTime.Now.Ticks/10000));