蒙特卡罗方法近似求解定积分-Go语言

蒙特卡罗方法

蒙特卡洛方法是一种用大数统计频率来模拟概率的方法。也就是说,当样本越多,越有可能获得及接近最优解。

定积分的几何意义

定积分的几何意义实际上就是求函数的图像与横坐标轴所围的面积。
如:y=x2y=x^2y=x2
∫01x2dx\int_0^1 x^2 dx∫01​x2dx的值就是图中紫色的面积

求定积分的思路与步骤

以∫01x2dx\int_0^1 x^2 dx∫01​x2dx为例
1.先计算积分上下限区域内的函数最值(最大值和最小值)。
2.计算由积分上下限的区间与函数最值所得的矩形面积S(图中的正方形ABCD)。
3.在这个矩形内随机产生足够多N个点,统计在定积分内的点数目M。
4.按照比例关系用频率近似模拟概率,定积分约等于S*M/N.

Go语言的实现代码

package mainimport ("fmt""math/rand""math"
)//定义被积函数
func function(x float64) float64{return math.Pow(x,float64(2))
}//利用大数统计的思想近似求解函数最大值
func getMax(function func(float64) float64,x1 float64,x2 float64) float64{max := function(x1)d := x2 - x1for i:=0;i<10000;i++{x := x1 + d * rand.Float64()if function(x)>max{max = function(x)}}return max
}//利用大数统计的思想近似求解函数最小值
func getMin(function func(float64) float64,x1 float64,x2 float64) float64{min := function(x1)d := x2 - x1for i:=0;i<10000;i++{x := x1 + d * rand.Float64()if function(x)<min{min = function(x)}}return min
}//利用蒙特卡罗方法,通过面积比例关系近似求解函数定积分
func DeIntCalc(function func(float64) float64,x1 float64,x2 float64) float64{var num float64 = 0d1 := x2-x1d2 := getMax(function,x1,x2) - getMin(function,x1,x2)for i:=0;i<10000;i++{x := x1 + d1 * rand.Float64()y := getMin(function,x1,x2) + d2 * rand.Float64()if function(x)>0{if y<function(x) && y>0{num++}}else{if y>function(x) && y<0{num--}}}s := d1 * d2return s * (num/10000)
}func main(){fmt.Println(DeIntCalc(function,0,1))//0.332323442141
}

蒙特卡罗方法近似求解定积分-Go语言相关推荐

  1. 【视频】马尔可夫链蒙特卡罗方法MCMC原理与R语言实现|数据分享

    原文链接:http://tecdat.cn/?p=2687 在贝叶斯方法中,马尔可夫链蒙特卡罗方法尤其神秘(点击文末"阅读原文"获取完整代码数据). 它们肯定是数学繁重且计算量大的 ...

  2. 用矩形积分近似求解定积分的动画示意图

    解答过程中的发现: imwrite的帮助文档说明了如何保存gif,很详细 开始定义的syms函数,将被积函数传入作图的函数中,但有些运算不支持syms类型,于是就再转成double型,发现这个过程还挺 ...

  3. python三重积分_蒙特卡罗方法。三重积分。Python。“+”的操作数父级不受支持...

    我尝试用蒙特卡罗方法近似三重积分∫∫∫∫xyzdV,其中S=[0,1]×[0,1]×0,1]. 我有这个代码:from numpy import * import time from scipy.in ...

  4. 蒙特卡罗方法在金融领域中的应用:从风险管理到投资组合优化

    作者:禅与计算机程序设计艺术 "蒙特卡罗方法"这个词已经存在很久了,它最早由英国数学家罗素提出,是指用随机数模拟的方法解决复杂问题的一个数学方法.由于其随机性质,蒙特卡罗方法在数值 ...

  5. C语言求解定积分(蒙特卡罗方法)

    求解区间 [2,3][2, 3][2,3] 上的定积分: ∫23(x2+4xsin(x))dx\int_{2}^{3}(x^2 + 4xsin(x)) dx ∫23​(x2+4xsin(x))dx 代 ...

  6. 蒙特卡洛python求解派_Python实现蒙特卡罗方法

    一.蒙特卡罗方法简介 蒙特卡罗(Monte Carlo)方法:简单来说,蒙特卡洛的基本原理简单描述是先大量模拟,然后计算一个事件发生的次数,再通过这个发生次数除以总模拟次数,得到想要的结果,精髓就是: ...

  7. 用C语言编码定积分,C语言__用六种方法求定积分C语言__用六种方法求定积分.doc...

    C语言__用六种方法求定积分C语言__用六种方法求定积分 描述问题 利用①左矩形公式,②中矩形公式,③右矩形公式 ,④梯形公式,⑤simpson公式,⑥Gauss积分公式求解定积分. 分析问题 2.1 ...

  8. c语言分母多项乘积怎么算,C++编程 用梯形求积公式求解定积分∫3lnxdx积分区间为(1,2, C语言,用梯形法编程求定积分x^3+x/2+1的值...

    问题标题 C++编程 用梯形求积公式求解定积分∫3lnxdx积分区间为(1,2, C语言,用梯形法编程求定积分x^3+x/2+1的值 2019-8-16来自ip:15.179.13.64的网友咨询 浏 ...

  9. 采用蒙特卡罗方法求解π值

    采用蒙特卡罗方法求解π值. Python 3.8.8版本. #----计算pi的值---- from random import random from math import sqrt from t ...

最新文章

  1. 17 个方面,综合对比 Kafka、RabbitMQ、RocketMQ、ActiveMQ 四个分布式消息队列
  2. SSM-SpringMVC-16:SpringMVC中小论注解式开发之访问方式篇
  3. c语言rtu crc16,Modbus-RTU-crc16校验方法C语言实现
  4. 电子书链接的集合 (不断更新)
  5. 电动汽车告急?特斯拉、蔚来之后 一辆比亚迪新能源车突然自燃...
  6. Twisted入门教程(9)
  7. Asp.net通过Gmail发送邮件
  8. win10同时安装jdk8和jdk11
  9. 魔兽世界怀旧服哪个服务器金价稳定,魔兽世界怀旧服 金价到底会跌到多少的分析...
  10. 平板电脑android 管理软件,应用宝HD下载V5.2.0.142 安卓版-Android平板电脑(aPad)专用西西软件下载...
  11. 多智能体(MARL)强化学习与博弈论
  12. 私钥、证书、USBKey
  13. 高红梅 第一章 海明威自我身份意识的形成 第一节 文化氛围与自我身份意识的生成
  14. P1757 通天之分组背包
  15. 腾讯技术分享:微信小程序音视频与WebRTC互通的技术思路和实践
  16. 自动读取短信中心号码
  17. Android Studio创建虚拟机选定指定位置
  18. archmanjaro添加black arch及cn源
  19. 计算机四级初级程序员考试试卷
  20. 阅读 《图解密码技术 第三版》的归纳和总结

热门文章

  1. 【博主推荐】html好看的拼图小游戏(附源码)
  2. 《流浪地球》里的引力弹弓人类真的实现过!张朝阳在线手推旅行者号木星之旅...
  3. 3D Scanning with a Camera 如何使用相机进行3D扫描 Lynda课程中文字幕
  4. 谈谈自己对offer的选择
  5. android11.0去掉锁屏和设置里充电剩余时间
  6. 当你在浏览器中输入一个地址(一)——浏览器检查地址
  7. oracle processes修改,修改oracle processes参数过大导致oracle启动不了解决方法
  8. 全志a33 编译器 linux,全志A33-ARM编译并安装net-tools
  9. 阿里内网精选:Java微服务实战笔记,共140个案例
  10. HHM(forward法求观察序列的概率)