关闭

几种满足特定数学分布数据产生函数

131人阅读 评论(0) 收藏 举报
分类:

均匀分布数据

 /* ********************************************
 Function Description
 *产生均匀分布数据
 *输入参数:均匀分布的最小值min,最大值max
 *返回值:满足要求的一个double型满足在(min,max)均匀分布的数据
 *********************************************/ 
double AverageRandom(double min,double max)       
{       
  int minInteger = (int)(min*10000);      
  int maxInteger = (int)(max*10000);        
  int randInteger = rand()*rand();        
  int diffInteger = maxInteger - minInteger;        
  int resultInteger = randInteger % diffInteger + minInteger;        
  return resultInteger/10000.0;        
}

概率密度函数

/**************
*概率密度函数
*miu 是期望
*sigma是方差
*************/ 
double Normal(double x,double miu,double sigma)   
{      
   return 1.0/sqrt(2*PI*sigma) * exp(-1*(x-miu)*(x-miu)/(2*sigma*sigma));     
}  

正太分布随机数

 /***********************************************
 *产生正态分布随机数
 *miu是期望,sigma是方差,min是正正态分布的最小值,max是最大值
 *返回值:满足要求的随机数
 ***********************************************/
double NormalRandom(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;     
}

线性拟合

/*void spir(int n,int m,double x[],double y[],double a[], double dt[])

     int n               给定数据点的个数
     int m               拟合多项式的项数,即拟合多项式的次数为m-1。要求m<=n且m<=20
     double x[n]         存放给定n个数据点的x坐标
     double y[n]         存放给定n个数据点的y坐标
     double a[m]         返回m-1次拟合多项式的m个系数。拟合多项式形式为
                         Pm-1(x)=a(0)+a(1)*x+a(2)*x2+-----a(m-1)*x(m-1)
     double dt[3]        其中dt[0]返回拟合多项式与数据点误差的平方和;dt[1]返回拟合拟合多项式与数据点
                         误差的绝对值之和;dt[2]返回拟合拟合多项式与数据点误差绝对值的最大值
     void spir()         过程
*/
void spir(int n,int m,double x[],double y[],double a[], double dt[])
  {
      int i,j,k;
      double alpha,p,q,g,w,beta,d1,d2,s[20],t[20],b[20];
      for (i=0; i<=m-1;i++) a[i]=0.0;
      if (m>n) m=n;
      if (m>20) m=20;
      b[0]=1.0;d1=n; alpha=0.0;q=0.0;
      for (i=0;i<=n-1;i++)  {alpha=alpha+x[i];q=q+y[i];}
      q=q/d1;                                          //q0
      alpha=alpha/d1;                                  //alpha(0)
      a[0]=q*b[0];
      if (m>1)
      {
          t[1]=1.0;t[0]=-alpha;
          d2=0.0;q=0.0;g=0.0;
          for (i=0;i<=n-1;i++)    //计算q1,alpha(1)与d1
          {
               w=x[i]-alpha;
               d2=d2+w*w;
               q=q+y[i]*w;
               g=g+x[i]*w*w;
           }
           q=q/d2;                                     //q1
           alpha=g/d2;                                 //alpha(1)
           beta=d2/d1;                                 //计算beta(1)
           d1=d2;
           a[1]=q*t[1];
           a[0]=q*t[0]+a[0];
      }
     for (j=2;j<=m-1;j++)                              //递推计算Qj(x)
     {
          s[j]=t[j-1];
          s[j-1]=-alpha*t[j-1]+t[j-2];
          if (j>=3)
          for (k=j-2;k>=1;k--) s[k]=-alpha*t[k]+t[k-1]-beta*b[k];
          s[0]=-alpha*t[0]-beta*b[0];
          d2=0.0; q=0.0; g=0.0;
          for (i=0; i<=n-1;i++)                       //计算qj,alpha(j)与dj,
          { 
             w=s[j];
             for (k=j-1;k>=0;k--)  w=w*x[i]+s[k];
             d2=d2+w*w; q=q+y[i]*w;
             g=g+x[i]*w*w;
          }
          q=q/d2;                                    //qj
          alpha=g/d2;                               //alpha(j)
          beta=d2/d1;                               //计算beta(j)
          d1=d2;
          a[j]=q*s[j];t[j]=s[j];
          for (k=j-1;k>=0;k--)
          {
               a[k]=q*s[k]+a[k];
               b[k]=t[k];t[k]=s[k];
          }
      }
          dt[0]=0.0; dt[1]=0.0;dt[2]=0.0;
          for (i=0;i<=n-1;i++)
          {    
              w=a[m-1];
              for (k=m-2;k>=0;k--) w=a[k]+w*x[i];
              p=w-y[i];
              if (fabs(p)>dt[2]) dt[2]=fabs(p);
              dt[0]=dt[0]+p*p;
              dt[1]=dt[1]+fabs(p);
          }
    
   }



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

满足特定分布的互相相关系数为给定值的随机数

事隔两天再看这里写的东西,发现自己的理解偏差太多,这里尤其那些不是转帖来的自己草率写来的内容,仅凭当时一知半解聊作学习笔记自娱自乐而已;如果有人要参考,请务必慎重斟酌,这里的问题和错误我一般不修改. ...
  • stereohomology
  • stereohomology
  • 2016-05-23 15:17
  • 1442

几个简单数学分布

1. 概率密度函数 假如我们要预测明天的下雨量,x表示下雨的量,f(x)就表示为概率密度,我们随便画一个概率密度,他们的关系如下: 其中概率密度函数f(x)并不代表概率,只是代表当前x点的概...
  • sunmenggmail
  • sunmenggmail
  • 2013-12-05 11:32
  • 39844

概率论与数理统计---分布函数

前言前言部分讲了为什么使用CSDN记录数学笔记和为什么要学《概率论与数理统计》的原因,和实际学习内容没有关系。 之前学线性代数的时候写的笔记都在纸质的笔记本上,只在纸质上面想查询比较麻烦,只能一页一...
  • rosetta
  • rosetta
  • 2017-07-15 17:57
  • 647

生成特定分布随机数的方法

生成随机数是程序设计里常见的需求。一般的编程语言都会自带一个随机数生成函数,用于生成服从均匀分布的随机数。不过有时需要生成服从其它分布的随机数,例如高斯分布或指数分布等。有些编程语言已经有比较完善的实...
  • pizi0475
  • pizi0475
  • 2015-09-23 22:01
  • 3229

使用均匀分布随机数产生器构造任意分布的随机数产生器

使用均匀分布随机数产生器构造任意分布的随机数产生器
  • shengno1
  • shengno1
  • 2015-08-16 12:46
  • 2309

R语言︱分布函数与概率密度+随机数产生

1、常见概率分布 ##正态分布 pnorm(1.96) #P(x1.96)注意与pnorm的区别 qnorm(0.975) #已知分布概率...
  • sinat_26917383
  • sinat_26917383
  • 2016-04-19 17:29
  • 2859

常见的几种概率分布

常见的几种概率分布
  • u013146882
  • u013146882
  • 2017-06-10 18:02
  • 843

分布式机器学习的故事(四):Rephil和MapReduce——描述长尾数据的数学模型

Google Rephil是Google AdSense背后广告相关性计算的头号秘密武器。但是这个系统没有发表过论文。只是其作者(博士Uri Lerner和工程师Mike Yar)在2002年在湾区举...
  • overstack
  • overstack
  • 2014-02-21 12:54
  • 6367

根据概率密度函数生成随机数的代码

我这里并不是要讲“伪随机”、“真随机”这样的问题,而是关于如何生成服从某个概率分布的随机数(或者说 sample)的问题。比如,你想要从一个服从正态分布的随机变量得到 100 个样本,那么肯定抽到接近...
  • sinat_26054031
  • sinat_26054031
  • 2015-08-17 16:43
  • 3890

幂律分布检验

幂律分布检验 1.公式推导 2.可视化 从图形上来说,幂律分布及其拟合效果: 对X轴与Y轴取以10为底的对数。效果上就是X轴上1与10,与10与100的...
  • huozi07
  • huozi07
  • 2015-12-31 18:13
  • 2325
    个人资料
    • 访问:48693次
    • 积分:1442
    • 等级:
    • 排名:千里之外
    • 原创:89篇
    • 转载:1篇
    • 译文:3篇
    • 评论:2条
    最新评论