数学建模——蒙特卡洛法

参加了大大小小很多场比赛了,但是都是混子,但还是打算记录一下吧,系统认真过一遍。后续功力深厚,会拓展写的文章,目前是干货,一些背景啥的还都未介绍。

1.介绍

随机抽样,求取近似解。
当无法求得精确解时,进行随机抽样,根据统计试验求近似解,
我的理解就是从一个样本抽取一些数据,进而估计整体的解,由于是抽取的样本数据,因此是近似解。
样本越大,越接近真实值,也就是数学统计值,

!!!注意:蒙特卡洛法是个思路,不是算法,具体问题具体分析。

2.可以做的题型

概率模型:蒙特卡洛算法可以用于模拟复杂的概率模型。例如,在金融领域中,可以使用蒙特卡洛方法来模拟股票价格的随机演化,并进行风险估计和投资组合优化。
最优化问题:蒙特卡洛算法可以用于求解最优化问题。例如,在运筹学中,可以使用蒙特卡洛方法来求解旅行商问题、装箱问题等。
数值计算:蒙特卡洛算法在数值计算中很有用。例如,在微分方程的数值求解中,可以使用蒙特卡洛方法来模拟随机扰动,从而获得系统的稳定解。
随机模型:蒙特卡洛算法可以用于研究随机模型的性质和行为。例如,在生物学中,可以使用蒙特卡洛方法来模拟基因演化和遗传算法。
不确定性分析:蒙特卡洛算法可以用于分析模型的不确定性。例如,在环境科学中,可以使用蒙特卡洛方法来进行不确定性分析和灾害模拟。
等等。

3.实战

3.1求pi的值

在这里插入图片描述

import random #导入random生成随机数

#d定义一个估计pi的函数,传入形参num_saamples
def estimate_pi(num_samples):
    # 定义变量
    inside_circle = 0  #园内点数
    total = 0  #总点数


    #定义for循环,下划线表示在循环中未使用这个变量的值
    #正常for应该是for 变量 in xxx(范围):
    for _ in range(num_samples):
        #定义xy坐标,正方形面积为2*2=4
        x = random.uniform(-1, 1) #random随机函数
        y = random.uniform(-1, 1)

        #求距离
        distance = x ** 2 + y ** 2

        #判断
        if distance <= 1: #园内点
            inside_circle += 1 #园内加一
        total += 1 #循环一次,总点数加一

    pi_estimate = 4 * inside_circle / total #pi的估计值
    return pi_estimate  #这个函数返回的是pi的估计值

num_samples = 100000 #定义循环次数
pi = estimate_pi(num_samples) #求pi的估计值
print("Estimated value of pi:", pi) #打印pi的估计值

3.2求定积分x^2 的值

在这里插入图片描述

import random #导入random

def monte_carlo_integration(func, a, b, num_samples): #定义求取定积分的函数,传入形参func,a,b,numsamples
    total = 0.0 #定义浮点型变量
    for _ in range(num_samples):
        # 定义一个循环,只需要循环,不需要值,用c的话相当于
        #for(int i=0;i<=inum_samples;i++;)

        x = random.uniform(a, b) #产生一个【0,1】的数
        total += func(x)  #算函数值累计求和
    average = total / num_samples #求平均
    integral = average * (b - a) #算面积(积分值)
    return integral #返回积分值

def f(x): #定义一个函数,返回x^2的值
    return x**2

a = 0
b = 1
num_samples = 100000

integral = monte_carlo_integration(f, a, b, num_samples) #形参传入函数的名字,a,b,num_samples
print("The integral of f(x) = x^2 from", a, "to", b, "is approximately:", integral)
  • 10
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ymchuangke

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值