首页/文章/ 详情

概率的本质

6月前浏览1424

概率论本质上是一种简化为计算的常识。这就是拉普拉斯的“常识演算化”观点。

日常生活中经常听到这样的描述,投掷一枚(均匀的)硬币,落地时正面朝上的概率是50%。但这究竟意味着什么呢?实际上,对概率存在两种不同的解释。一种被称为频率学派(frequentist)解释。在频率学派的观点中,概率表示可能多次发生的事件的长期频率。例如,上面的说法意味着,如果多次投掷硬币,那么预计硬币落地时大约有一半机会正面朝上。另一种被称为概率的贝叶斯学派(Bayesian)解释。在贝叶斯学派的观点中,概率被用来量化我们对某事的不确定性(uncertainty)或未知性(ignorance)。因此,概率从根本上与信息有关,而与重复试验关系不大。在贝叶斯学派的观点中,上述说法意味着我们相信硬币在下一次投掷时正面向上落地或反面向上落地的概率相同。

在基于频率的解释中,    被认为是无限次重复试验时事件    发生的频率,例如,当我们说随机抛硬币出现正面的概率为    ,是指当重复抛硬币足够多次时,出现正面的频率趋近于    。这种解释在一些重复试验困难的问题中面临挑战,例如,假如我们要预测明天下雨的概率,频率的解释就无能为力了--显然,明天的天气是不可重复的。而基于信度的解释认为    是观察者认为事件    发生的可信程度。这两种解释实际上分别对应了频率学派和贝叶斯学派。

贝叶斯学派解释的一大优势在于,对于不存在长期频率的一次性事件,这种解释可以用来对其不确定性进行建模。例如,我们可能想预测某桥梁在地震作用下垮塌的概率。该事件将发生0次或1次,但不可能重复发生。

下面用python模拟抛硬币实验

import matplotlib.pyplot as plt
import numpy as np

def coin_flip(size):
    flips = np.random.randint(0, 2, size=size)
    return flips.mean()

vec_coin_flip = np.frompyfunc(coin_flip, 1, 1)

x = np.arange(10, 100001, 20) #x中每一个值都表示一次随机试验,比如10就代表抛掷硬币10次

y = vec_coin_flip(x) #x中一次随机试验,正面朝上的频率


plt.rcParams['font.sans-serif'] = ['Microsoft YaHei'] 
fig, ax = plt.subplots()
ax.plot(x, y)
ax.axhline(y = 0.5, color = 'r', linestyle = '--', linewidth = 2)
ax.set_xscale('log')

ax.set( title = '抛硬币模拟图')
ax.set_xlabel('实验次数')
ax.set_ylabel('频率变化')


fig.savefig("z216.png",dpi = 300)
plt.show()

上述代码中,coin_flip函数接受一个参数size,表示抛掷硬币的次数。它使用np.random.randint(0, 2, size=size)生成size个0或1的随机整数,其中0表示反面,1表示正面。然后返回这些随机数的平均值,即正面朝上的频率。使用np.frompyfunc将coin_flip函数转换为一个NumPy的通用函数vec_coin_flip,使之向量化,具体见文末附录。np.arange(10, 10000, 50)生成一个从10到100000的整数数组,表示抛掷硬币的次数。 最后分别调用vec_coin_flip通用函数两次,计算不同抛掷次数下正面朝上的频率,得到y。

▲图1

一个常见的误解是,如果你抛一枚公平的硬币10或20次,正面的比例接近一半.记住这只有在大样本才能实现,如图1所示。

附录

python自定义函数并调用:

def func_x(a):
    y = a + 1
    return y

# 调用
print( func_x(1) )   
#结果:2

但是如果a不是一个数,而是一个向量/数组呢?这时候就需要借助Numpy中的通用函数np.frompyfunc(func, 1, 1)这里的参数func指的是你要使用的函数,第二个参数为func中的参数个数,第三个参数为func中的返回值的个数。假设A=[0,1,2]

def func_x(a):
    y = a + 1
    return y

A = [0, 1, 2]
vec_func = np.frompyfunc(func_x, 1, 1)
y = vec_func(A)
print(y)
#结果:  [1,2,3]


来源:数值分析与有限元编程
通用pythonUM试验
著作权归作者所有,欢迎分享,未经许可,不得转载
首次发布时间:2026-04-14
最近编辑:6月前
译码当先
本科 慢慢来
获赞 14粉丝 32文章 400课程 0
点赞
收藏
作者推荐

程序员思维的力学分析--分治法

顾名思义,分治的基本思想就是将一个原本困难的问题,分解成为易于处理的子问题的集合,然后分别对子问题进行处理,并最终将子问题的处理结果汇总,得到原问题的解。举个最简单的例子:假设我们有一包花生米,需要数出一共有多少粒,而一个人从头到尾数下去自然比较困难。这时,可以将花生米分成几份,每一份都分给一个人数,当所有人数完后,只需将每个人得出来的结果相加即可。通过这种方式,每个人处理的问题都是比较简单的。分治法就是类似这样的思路,通过分析问题的结构,化繁为简,递归求解。分治法其实远不止是一种计算机领域的算法,它本质上是一种思维方式,小到日常生活,大到治理国家,都可将其作为一种处理问题的策略。比如将南阳盆地分属几个不同的省就是分而治之的思想。那么分治法在力学中有哪些应用呢。在结构分析中,经常要对一些十分复杂的结构进行总体动力分析,如超高层建筑。这种结构的有限元模型可能含有上千万计的自由度。如果直接计算,往往为计算机条件所不能允许,这时可以通过划分子结构以实现特征方程的降阶。同时,考虑到大型复杂结构的制造或者是施工过程,有的分部件制造,有的分区域施工,然后组成一个大系统。这个过程正好符合模态综合法“先修改后复原”的思想,先将结构划分为彼此独立自由度较少的子结构,使其容易分析,然后将各子结构装配恢复成原先的结构,最终获得总体动力特性参数。动态子结构法的一个突出特点是子结构的模态特性既可以从计算中得到,也可以通过试验获取,从而灵活地把试验与计算结合起来,也方便了模型验证或模型修正。子结构法的思想是于20世纪60年代提出的,之后经进一步的改进和发展已经成为大型复杂结构系统的有效计算方法。模态综合法的全称为动态子结构的模态综合法,又称为子结构法,模态(Mode)也称为振型。其基本思想为通过将结构划分为若干个相对小的子结构(部件),分析子结构的振动特性,仅保留其少数几阶低阶模态,将各子结构的低阶保留模态通过交界面的位移协调条件合成为总体结构的模态,然后进行分析计算。这样通过对子结构的模态缩减从而减少了总体结构模态的自由度。在计算子结构的固有模态时,可以令交界面完全固定,也可以完全自由,前者称为固定界面法,而后者称为约束界面法。子结构的模态综合法通过子结构模态的截断达到缩减总体结构动力自由度的目的。界面位移综合法通过另一种途径,即把子结构的内部自由度直接向其交界面凝聚,从而有效地缩减结构系统动力分析的自由度。由于界面位移综合法不涉及子结构模态坐标的概念,不进行子结构主模态分析,因而原理简明、方法简单。不同的子结构凝聚方法形成不同的界面位移综合法,Guyan静力凝聚和Kuhar动力凝聚是对结构的次要自由度(副自由度)进行约化降阶的两种方法。来源:数值分析与有限元编程

未登录
还没有评论
课程
培训
服务
行家
VIP会员 学习计划 福利任务
下载APP
联系我们
帮助与反馈