猫史档案馆


无穷个数的平均值和积分的近似计算

用户:橘生淮北则为枳橘生淮北则为枳查看:11 回复:5 评论:11 创建时间:2023-01-06T17:41:21


  通过扎实的九年义务教育我们得知,平均值的公式为:(x1+x2+x3+...+xn)/n。那么,如果当 lim n→∞,平均值又应该如何求呢?为了解决这个问题,在这里,我们引入函数来推导。

  设已知函数f(x),它在区间【a,b】上连续,现在我们来求f(x)在【a,b】上的所有点的平均高度。在正式开始解题之前,我们先来看一条引理(积分第一中值定理):center_image

此题较为容易,(今天我也来装个a_c(bushi))读者不妨自证之。

  积分第一中值定理有着鲜明的几何意义,它告诉我们对任意区间上的连续函数积分所形成的曲边梯形的面积都可以表示为一个以b-a为底,函数上的某一点ε的y坐标为高的长方形的面积。进一步思考可以发现,f(ε)就是f(x)在【a,b】上的所有点的平均高度。而对积分第一中值定理变形易得f(ε)等于积分值÷(b-a)。

  上文是从几何意义来解释,我们再来用代数意义陈述一遍,我们知道积分(严谨的说是黎曼积分)的定义为黎曼和趋于无穷时的极限,公式表示如下(图片来自网络,侵删):center_image

这个时候我们对右边的式子除以(b-a),式子就变为:center_image

等价于:(y1+y2+y3+...+yn)/n(lim n→∞)

  聊完理论,我们来聊聊应用,也就是标题中的“积分的近似计算”。既然连续函数的积分值可以被表示为函数在区间【a,b】上的函数值的平均数与b-a的乘积,那么我们是不是可以在区间【a,b】上采样,尽可能的逼近区间【a,b】上的函数值的平均数?(这从某种意义上可以看作蒙特卡罗算法)我们用python验证之。

import random

def sfc(m,a,b):
    n = 0
    for i in range(m):
        x = random.randint(a,b)
        y = x*x
        n += y
    print(n/m 

以x^2在【0,1】上的定积分为例,当采样点为2000时,得出的值在0.5左右上下浮动(实际上的结果为1/3),理论上来说,点越多越高,越准确。


回复

上一页1 页 / 共 1下一页
中二的LittleBoy中二的LittleBoy

喵d

点赞1


评论


橘生淮北则为枳橘生淮北则为枳

貌似代码最后一行少些了一个括号

点赞0


评论


JUST_workshop官方JUST_workshop官方

。。。这

点赞1


评论


橘生淮北则为枳橘生淮北则为枳

啊这,代码写错了,第五行代码应该是x = random.uniform(a,b),不然的话只会随机生成整数。结果就...,,ԾㅂԾ,,

点赞0


评论


橘生淮北则为枳橘生淮北则为枳

正确代码如下:

import random
def sfc(m, a, b):
    n = 0
    for i in range(m):
        x = round(random.uniform(a, b),2)
        y = x*x
        n += y
    print(n/m)

点赞1


评论