box-muller公式很简单,而且非常强大!
不推导了,不证明了……

其中U1、U2是[0,1]的均匀分布的随机数,X是产生的符合N(0,1)正态分布的数。
想要得到符合任意期望和标准差的数,只需要
Y= E+D*X
就可以了。
就是按照box-muller这个算是产生数据就可以了。就是C++的一些特性要适应一下。
我下方这些代码是生成数据然后存在一个文件里的。
为什么要这么做?因为我总得验证一下我生成的到底是不是符合高斯分布吧?
#include <iostream>
#include <ctime>
#include <cmath>
#include <cstdlib>
#include <fstream>
#define PI 3.14159
using namespace std;
//mu期望  sigma 标准差 HowMany  产生多少个
//box-muller 
void GetNumberToFile(int mu,int sigma,int HowMany){
	srand((unsigned)time(NULL));  //随机数种子采用系统时钟
	ofstream outfile("Data.txt",ios::out);
	for(int i=0;i<HowMany;i++){
		double x0=double(abs(rand()%100))/100;//产生0-1的随机数
		double x1=double(abs(rand()%100))/100;//产生0-1的随机数
		double t=sqrt(-2*log(x0))*sin(2*PI*x1);
        //出现inf或者nan都不算数,重新来。
		if(isinf(t)||isnan(t)) {
			i--;
			continue;
		}
		cout<<t<<endl;
		outfile<<mu+t*sigma<<endl;	
	}
}
上面生成完之后,我想用python的可视化工具来看。
这里有个坑!
你python读文件之后,读进去的是字符串!
是的是的,这么低级的错误你都犯??
只能说matplotlib兼容性太好了……
它字符串列表作为data都可以呀!
如果你只是把C++生成的那些数用字符串读进去,你得到的图是这样的:

你看x轴竟然是一团浆糊有没有!-_-||
我竟然一直以为是我生成的数不对!
额……
好了,实际上你要用python做数字可视化,一定记得把数字转换成float型!
正确的、可用的python:
import matplotlib.pyplot as plt
import math
from random import random
def Generate(mu,sigma):
	data=[]
	for i in range(100):
		data.append(mu+sigma*(math.sqrt(-2*math.log(random()))*math.sin(2*math.pi*random())))
	return data
if __name__=='__main__':
	with open(r'C:\Users\Lenovo\Desktop\Code_prec\1.txt','r') as f:
		data=[]
		for line in f:
			data.append(float(line.strip()))#就是这里我跪了!!!!
		plt.figure()
		plt.hist(data,bins=50)
		plt.show()
	exit(0)	
	
正常的图:

 
                   
                   
                   
                   
                             本文介绍如何使用Box-Muller公式生成符合正态分布的数据,并通过C++代码实现这一过程,同时提供了使用Python进行数据可视化的方法,强调了在数据处理中将字符串转换为浮点数的重要性。
本文介绍如何使用Box-Muller公式生成符合正态分布的数据,并通过C++代码实现这一过程,同时提供了使用Python进行数据可视化的方法,强调了在数据处理中将字符串转换为浮点数的重要性。
           
       
           
                 
                 
                 
                 
                 
                
               
                 
                 
                 
                 
                
               
                 
                 扫一扫
扫一扫
                     
              
             
                   1万+
					1万+
					
 被折叠的  条评论
		 为什么被折叠?
被折叠的  条评论
		 为什么被折叠?
		 
		  到【灌水乐园】发言
到【灌水乐园】发言                                
		 
		 
    
   
    
   
             
            


 
            