189 8069 5689

randn函数C语言 C语言中的rand函数

如何将matlab中的randn函数转变为C语言形式的

有些不同,randn是正态分布的随机数,c里面的srand其实跟matlab里的randomize作用一样,是随机种子!

在革吉等地区,都构建了全面的区域性战略布局,加强发展的系统性、市场前瞻性、产品创新能力,以专注、极致的服务理念,为客户提供成都网站设计、网站制作、外贸营销网站建设 网站设计制作定制设计,公司网站建设,企业网站建设,高端网站设计,成都全网营销推广,外贸营销网站建设,革吉网站建设费用合理。

用C语言实现瑞利分布,莱斯分布,高斯分布的分布函数

下面共有两个程序,程序2 加入了图形显示

程序1

这个程序就是你要的。

# include "stdio.h"

# include "math.h"

# include "stdlib.h"

# include "math.h"

# include "dos.h"

# define MAX_N 3000 /*这个值为N可以定义的最大长度*/

# define N 100 /*产生随机序列的点数,注意不要大于MAX_N*/

/*产生均匀分布的随机变量*/

void randa(float *x,int num);

/*产生瑞利分布的随机变量*/

void randr(float *x,int num);

/*产生标准高斯分布的随机变量*/

void randn(float *x,int num);

/*产生莱斯分布的随机变量*/

void randl(float *x, float a, float b, int num);

void fshow(char *name,float *x,int num);

main()

{

float x[N];

int i;

/*

randa(x,N);

randr(x,N);

randl(x,10,10,N);

*/

randn(x,N);

/*此时x[N]就是所需要的高斯分布的序列*/

/*显示该序列*/

fshow("x",x,N);

getch();

}

void randa(float *x,int num)

{

int i;

struct time stime;

unsigned seed;

gettime(stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

for(i=0;inum;i++)

{

x[i]=rand();

x[i]=x[i]/32768;

}

}

void randr(float *x,int num)

{

float x1[MAX_N];

int i;

struct time stime;

unsigned seed;

gettime(stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

for(i=0;inum;i++)

{

x1[i]=rand();

x[i]=x1[i]/32768;

x[i]=sqrt(-2*log(x[i]));

}

}

void randn(float *x,int num)

{

float x1[MAX_N],x2[MAX_N];

int i;

struct time stime;

unsigned seed;

gettime(stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

for(i=0;inum;i++)

{

x1[i]=rand();

x2[i]=rand();

x1[i]=x1[i]/32768;

x2[i]=x2[i]/32768;

x[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);

}

}

void randl(float *x, float a, float b, int num)

{

float x1[MAX_N],x2[MAX_N];

float temp[MAX_N];

int i;

struct time stime;

unsigned seed;

gettime(stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

for(i=0;inum;i++)

{

x1[i]=rand();

x2[i]=rand();

x1[i]=x1[i]/32768;

x2[i]=x2[i]/32768;

temp[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);

x2[i]=sqrt(-2*log(x1[i]))*sin(x2[i]*M_PI);

x1[i]=temp[i];

x[i]=sqrt((a+x1[i])*(a+x1[i])+(b+x2[i])*(b+x2[i]));

}

}

void fshow(char *name,float *x,int num)

{

int i,sign,L;

float temp;

printf("\n");

printf(name);

printf(" = ");

L=6;

/*按照每行6个数据的格式显示*/

for(i=0;inum;i++)

{

temp=i/L;

sign=temp;

if((i-sign*L)==0) printf("\n");

if(x[i]0) printf(" %f ",x[i]);

else printf("%f ",x[i]);

}

}

程序 2

以下程序加入了图形显示的效果,因此更加直观,你可以参考一下。

/* 作者 Leo_nanjing

时间 2008.5.10

功能 生成各种分布的随机变量,并显示

*/

# include "stdio.h"

# include "math.h"

# include "graphics.h"

# include "math.h"

# include "dos.h"

# define MAX_N 3000

# define N 1000

void randa(float *x,int num);

void randr(float *x,int num);

void randn(float *x,int num);

void randl(float *x, float a, float b, int num);

void fshow(char *name,float *x,int num);

/*用于图形显示的部分*/

void init_graphic(unsigned color);

void plotxy(float *x, float *y, int num,int mode);

void plot(float *y,int num, int mode);

float max(float *x, int num);

float min(float *x, int num);

/*画出该随机序列的分布函数曲线*/

void plotpdf(float *x,int num,int part,int mode);

main()

{

float x[N];

int i;

randn(x,N);

fshow("x",x,N);

getch();

/*以下为图形显示部分*/

init_graphic(0);

/*显示随机序列*/

plot(x,N,1);

getch();

/*显示其分布函数*/

plotpdf(x,N,20,0);

getch();

}

void randa(float *x,int num)

{

int i;

struct time stime;

unsigned seed;

gettime(stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

for(i=0;inum;i++)

{

x[i]=rand();

x[i]=x[i]/32768;

}

}

void randr(float *x,int num)

{

float x1[MAX_N];

int i;

struct time stime;

unsigned seed;

gettime(stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

for(i=0;inum;i++)

{

x1[i]=rand();

x[i]=x1[i]/32768;

x[i]=sqrt(-2*log(x[i]));

}

}

void randn(float *x,int num)

{

float x1[MAX_N],x2[MAX_N];

int i;

struct time stime;

unsigned seed;

gettime(stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

for(i=0;inum;i++)

{

x1[i]=rand();

x2[i]=rand();

x1[i]=x1[i]/32768;

x2[i]=x2[i]/32768;

x[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);

}

}

void randl(float *x, float a, float b, int num)

{

float x1[MAX_N],x2[MAX_N];

float temp[MAX_N];

int i;

struct time stime;

unsigned seed;

gettime(stime);

seed=stime.ti_hund*stime.ti_min*stime.ti_hour;

srand(seed);

for(i=0;inum;i++)

{

x1[i]=rand();

x2[i]=rand();

x1[i]=x1[i]/32768;

x2[i]=x2[i]/32768;

temp[i]=sqrt(-2*log(x1[i]))*cos(x2[i]*M_PI);

x2[i]=sqrt(-2*log(x1[i]))*sin(x2[i]*M_PI);

x1[i]=temp[i];

x[i]=sqrt((a+x1[i])*(a+x1[i])+(b+x2[i])*(b+x2[i]));

}

}

void fshow(char *name,float *x,int num)

{

int i,sign,L;

float temp;

printf("\n");

printf(name);

printf(" = ");

L=6;

for(i=0;inum;i++)

{

temp=i/L;

sign=temp;

if((i-sign*L)==0) printf("\n");

if(x[i]0) printf(" %f ",x[i]);

else printf("%f ",x[i]);

}

}

/*以下为图形显示的函数*/

void init_graphic(unsigned color)

{

int graphicdriver,graphicmode;

graphicdriver=DETECT;

graphicmode=1;

initgraph(graphicdriver,graphicmode,"E:\\turboc2\\");

setbkcolor(color);

}

void plotxy(float *x, float*y, int num,int mode)

{

int i;

float max_x,max_y,min_x,min_y;

float x0,y0,x1,y1;

clrscr(0);

cleardevice();

setbkcolor(0);

max_x=max(x,num);

max_y=max(y,num);

min_x=min(x,num);

min_y=min(y,num);

setlinestyle(0,2,1);

line(65,35,65,445);

line(65,445,575,445);

setlinestyle(3,0,1);

line(65,35,575,35);

line(575,35,575,445);

setlinestyle(0,2,1);

if(max_x==min_x)

x0=320;

else

x0=(x[0]-min_x)*500/(max_x-min_x)+70;

if(max_y==min_y)

y0=240;

else

y0=480-((y[0]-min_y)*400/(max_y-min_y)+40);

if(mode==0) circle(x0,y0,2);

for(i=1;inum;i++)

{

if(max_x==min_x)

x1=320;

else

x1=(x[i]-min_x)*500/(max_x-min_x)+70;

if(max_y==min_y)

y1=240;

else

y1=480-((y[i]-min_y)*400/(max_y-min_y)+40);

if(mode==0) circle(x1,y1,2);

line(x0,y0,x1,y1);

x0=x1;y0=y1;

}

printf("\n\n");

printf("%f",max_y);

printf("\n\n\n\n\n\n\n\n\n\n");

printf("\n\n\n");

printf("%f",(max_y+min_y)/2);

printf("\n\n\n\n\n\n\n\n\n\n");

printf("\n\n");

printf("%f",min_y);

printf("\n %f",min_x);

printf(" ");

printf("%f",(max_x+min_x)/2);

printf(" ");

printf("%f",max_x);

}

void plot(float*y, int num,int mode)

{

int i;

float max_x,max_y,min_x,min_y;

float x0,y0,x1,y1;

float x[MAX_N];

clrscr(0);

cleardevice();

setbkcolor(0);

for(i=0;inum;i++) x[i]=i+1;

max_x=max(x,num);

max_y=max(y,num);

min_x=min(x,num);

min_y=min(y,num);

setlinestyle(0,2,1);

line(65,35,65,445);

line(65,445,575,445);

setlinestyle(3,0,1);

line(65,35,575,35);

line(575,35,575,445);

setlinestyle(0,2,1);

if(max_x==min_x)

x0=320;

else

x0=(x[0]-min_x)*500/(max_x-min_x)+70;

if(max_y==min_y)

y0=240;

else

y0=480-((y[0]-min_y)*400/(max_y-min_y)+40);

if(mode==0) circle(x0,y0,2);

for(i=1;inum;i++)

{

if(max_x==min_x)

x1=320;

else

x1=(x[i]-min_x)*500/(max_x-min_x)+70;

if(max_y==min_y)

y1=240;

else

y1=480-((y[i]-min_y)*400/(max_y-min_y)+40);

if(mode==0) circle(x1,y1,2);

line(x0,y0,x1,y1);

x0=x1;y0=y1;

}

printf("\n\n");

printf("%f",max_y);

printf("\n\n\n\n\n\n\n\n\n\n");

printf("\n\n\n");

printf("%f",(max_y+min_y)/2);

printf("\n\n\n\n\n\n\n\n\n\n");

printf("\n\n");

printf("%f",min_y);

printf("\n %f",min_x);

printf(" ");

printf("%f",(max_x+min_x)/2);

printf(" ");

printf("%f",max_x);

}

void plotpdf(float *x,int num,int part,int mode)

{

int i,j;

float max_x,min_x,round,deltax,up,down,sum;

float xl[MAX_N],yl[MAX_N];

sum=0;

max_x=max(x,num);

min_x=min(x,num);

round=max_x-min_x;

deltax=round/part;

xl[0]=min_x;

for(i=1;i=part;i++)

{

xl[i]=min_x+deltax*i;

yl[i-1]=0;

up=xl[i];

down=xl[i-1];

for(j=0;jnum;j++)

{

if((x[j]up) (x[j]=down)) yl[i-1]=yl[i-1]+1;

}

yl[i-1]=yl[i-1]/num/deltax;

}

for(i=0;ipart;i++) sum=sum+yl[i];

plotxy(xl,yl,part,mode);

}

float max(float *x, int num)

{

int i;

float max;

max=x[0];

for(i=1;inum;i++)

{

if(x[i]max) max=x[i];

}

return max;

}

float min(float *x, int num)

{

int i;

float min;

min=x[0];

for(i=1;inum;i++)

{

if(x[i]min) min=x[i];

}

return min;

}

C语言或者matlab怎么样生成方差固定的N个数

(1)

假设X的均值μ,方差σ^2

那么y=ax+b的均值则为a*μ+b, 方差为:a^2*σ^2

Matlab的randn函数可以产生均值为0,方差为1的正态分布,

那么如果我们要生成一个均值为500,方差为25的1000个随机数,

a=5;

b=500;

y=a*randn(1000,1)+b;

验证

stats = [mean(y) std(y) var(y)]

stats = 1×3

499.8368    4.9948   24.9483

(2)

Matlab还有一个函数是random('name',A,B)

通过设置‘name’参数和A,B参数来生成一系列随机数

比如要想生成均值为0,方差为25的正态分布的数组, 那么

y=random('norm', 0, 5)

如何将matlab中的randn函数转变为C语言形式的啊

有些不同,randn是正态分布的随机数,c里面的srand其实跟matlab里的randomize作用一样,是随机种子


分享名称:randn函数C语言 C语言中的rand函数
分享URL:http://cdxtjz.cn/article/hidejs.html

其他资讯