收藏 分销(赏)

产生高斯随机数.docx

上传人:s4****5z 文档编号:8926949 上传时间:2025-03-08 格式:DOCX 页数:6 大小:99.28KB 下载积分:10 金币
下载 相关 举报
产生高斯随机数.docx_第1页
第1页 / 共6页
产生高斯随机数.docx_第2页
第2页 / 共6页


点击查看更多>>
资源描述
一、产生0-1均匀分布数 采用混合同余法,,,即为一个在0~1之间的随机数。通常情况下,选取,我们任意给定一个初始值,即可得到一个随机数,在程序中采用指针变量*s,使得每次产生的随机数都不一样,只要改变循环的次数,就可以得到任意多个0~1随机数。 程序实现代码如下: double x1(double a,double b, int *s) { double t; *s=2045*(*s)+1; *s=*s-(*s/1048576)*1048576; t=(*s)/1048576.0; return(t); } 二、产生标准高斯分布数 标准的高斯分布均值=0,方差=1;根据中心极限定理有,根据此式可以由12个0~1分布数产生一个高斯数。改变循环次数可以得到任意多个标准高斯分布数。 程序实现代码如下: int main() { double mean,sigma; double x[100]; int i,j; int s; mean=0.0; sigma=1.0; s=19444; cout<<"产生个高斯数:"<<endl; for(j=0;j<200;j++) { x[j]=0; for(i=0;i<12;i++) { x[j]=x[j]+x1(mean,sigma,&s); } x[j]=x[j]-6.0; printf("%13.7f",x[j]); if((j+1)%5==0) {cout<<endl;} } cout<<endl; 产生一百个高斯数: 三、由得到的高斯分布数绘制概率密度函数 采用API图形处理中的Rectangle矩阵绘制函数绘制图形,将得到的高斯数分成一个个小区间,计算每个区间内的高斯数的个数,用这些个数作为矩阵的高。 程序代码如下: #define NN 1000 #define PI 3.14159826 #include<math.h> #include<stdio.h> //#include<conio.h> #include<time.h> #include <windows.h> #include <stdlib.h> #include <string.h> #include <iostream> #include <math.h> long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam); BOOL InitWindowsClass(HINSTANCE hInstance); BOOL InitWindows(HINSTANCE hInstance,int nCmdShow); int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow) { MSG Message; if(!InitWindowsClass(hInstance)) return FALSE; if(!InitWindows(hInstance,nCmdShow)) return FALSE; while (GetMessage(&Message,0,0,0)) { TranslateMessage(&Message); DispatchMessage(&Message); } return Message.wParam; } long WINAPI WndProc(HWND hWnd,UINT iMessage,UINT wParam,LONG lParam) { HDC hDC; HBRUSH hBrush; HPEN hPen; PAINTSTRUCT PtStr; //////////////////////////// double x1(double a,double b, int *s); double mean=0,sigma=1.0; srand((unsigned)time(NULL)); double x[10000],b[10000]={0},temp; int i,j; int s1; int k; s1=19444; for(j=0;j<10000;j++) { x[j]=0; for(i=0;i<12;i++) { x[j]=x[j]+x1(mean,sigma,&s1); } x[j]=x[j]-6.0; } for(i=0;i<10000;i++) { temp=x[i]; // printf("%lf\t",temp); for(j=0;j<10000;j++) { if(-3+0.2*j<temp&&-3+0.2*(j+1)>temp) b[j]=b[j]+1; }} ///////////////////////////////// switch(iMessage){ case WM_PAINT: hDC=BeginPaint(hWnd,&PtStr); SetMapMode(hDC,MM_ANISOTROPIC); hPen=(HPEN)GetStockObject(BLACK_PEN); hBrush=(HBRUSH)GetStockObject(DKGRAY_BRUSH); SelectObject(hDC,hBrush); SelectObject(hDC,hPen); /////////////////////// //////////////////////////////////////////// for(k=0;k<100;k++){ Rectangle(hDC,20+10*k,400-0.3*b[k],30+10*k,400); } EndPaint(hWnd,&PtStr); return 0; case WM_DESTROY: PostQuitMessage(0); return 0; default: return(DefWindowProc(hWnd,iMessage,wParam,lParam)); } } BOOL InitWindows(HINSTANCE hInstance,int nCmdShow) { HWND hWnd; hWnd=CreateWindow("WinFill", "高斯分布", WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL); if(!hWnd) return FALSE; ShowWindow(hWnd,nCmdShow); UpdateWindow(hWnd); return TRUE; } BOOL InitWindowsClass(HINSTANCE hInstance) { WNDCLASS WndClass; WndClass.cbClsExtra=0; WndClass.cbWndExtra=0; WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH)); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW); WndClass.hIcon=LoadIcon(NULL,"END"); WndClass.hInstance=hInstance; WndClass.lpfnWndProc=WndProc; WndClass.lpszClassName="WinFill"; WndClass.lpszMenuName=NULL; WndClass.style=CS_HREDRAW|CS_VREDRAW; return RegisterClass(&WndClass); } double x1(double a,double b, int *s) { double t; *s=2045*(*s)+1; *s=*s-(*s/1048576)*1048576; t=(*s)/1048576.0; return(t); } 得到结果图如下:
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服