zoukankan      html  css  js  c++  java
  • 概率算法Numerical和Monte Carlo

    Numerical

      随机性被最早用于求数字问题的近似解,例如PI值的计算。

    概率算法可以在较短时间内获得一个近似解, 但通常算法执行时间越长,结果精度就越高。

    Monte Carlo

    蒙特卡洛算法是J.Von Neumann在1945年进行核武器模拟提出的。它是以概率和随机统计的理论与方法为基础的一种数值计算方法,它是双重近似:一是用概率模型模拟近似的数值计算,二是用伪随机数模拟真正的随机变量的样本。

    很多定积分无法用数学进行求解,此时可以考虑使用MC方法进行求解。

     

         

      一种思路是利用微积分原理将定义域分成n-1个小区间,即梯形法。

    梯形法求积分
     1 #include <stdio.h>
    2 #include <time.h>
    3 #include <math.h>
    4 double jiecheng(int n)
    5 {
    6 double result=1;
    7 while (n>1)
    8 {
    9 result=result*n;
    10 n--;
    11 }
    12 return result;
    13 }
    14 double f(double x)
    15 {
    16 double result=sin(jiecheng(100)*3.1415926*x);
    17 return result*result;
    18 }
    19 double Trapezoid (double (*f)(double ),int a,int b,double c,double d,int n)
    20 {
    21 double delta=(double)(b-a)/n;
    22 double sum=(c+d)/2;
    23 double i;
    24 for(i=a+delta;i<b;i+=delta){
    25 sum=sum+f(i);
    26 }
    27 return sum*delta;
    28 }
    29 int main()
    30 {
    31
    32 printf("%lf\n",Trapezoid(f,0,1,0,0,101));
    33 return 0;
    34 }

    另一种是模拟向边长为1的正方形内随机投点,然后统计落入定积分面积内的点数。

    随机模拟法求积分
     1 #include <stdio.h>
    2 #include <time.h>
    3 #include <math.h>
    4 double jiecheng(int n)
    5 {
    6 double result=1;
    7 while (n>1)
    8 {
    9 result=result*n;
    10 n--;
    11 }
    12 return result;
    13 }
    14 double f(double x)
    15 {
    16 double result=cos(jiecheng(100)*3.1415926*x*2);
    17 return (1-result)/2;
    18 }
    19 double HitorMiss(double (*f)(double ),int a,int b,double c,double d,int n)
    20 {
    21 int k=0;
    22 int i;
    23 double x,y;
    24 srand( (unsigned)time( NULL ) );
    25 for(i=1;i<=n;i++){
    26 x=a+(b-a)*(rand())/32768.0;
    27 y=c+(d-c)*(rand())/32768.0;
    28 if (y<=f(x))
    29 k++;
    30 }
    31 return (double)k/n;
    32 }
    33 int main()
    34 {
    35
    36 printf("%lf\n",HitorMiss(f,0,1,0,1,101));
    37 return 0;
    38 }



     

     

  • 相关阅读:
    IOS -- 获取本地图片和网络图片的大小size
    xib中的label加边框
    iOS开发之Masonry框架源码深度解析
    10分钟搭建 App 主流框架
    卸载服务器GitLab
    linux安装git方法
    虚拟机安装centos7, 再安装gitlab 简单步骤
    collectionView 防止cell复用的方法
    UIButton 设置图片文字垂直居中排列
    button获取验证码60秒倒计时 直接用
  • 原文地址:https://www.cnblogs.com/2010Freeze/p/2167045.html
Copyright © 2011-2022 走看看