示例

已知积分公式如下

求[0.5,5]上积分,即求下图阴影部分面积

根据积分公式求源函数等于:

则确切解等与F(5)-F(0.5)=3.9002072872864524

当不知道源函数时使用以下方法可以求得积分面积

首先定义函数

def func(x):

return np.cos(np.pi) * np.exp(-x) + 1

1、通过迭代计算每个步长矩形面积求和

x = np.linspace(0.5, 5, 1000)

dx = (5-0.5)/1000

y = func(x)

area = np.sum(y * dx)

结果等于:3.8994262124710404

2、通过scipy模块quad直接求积分

area, error = quad(func, 0.5, 5)

quad的结果是 3.9002072872864515

3、使用蒙特卡洛模拟估算积分面积

原理是已知区间【0.5,5】上矩形面积,在矩形范围内随机打点,统计在阴影部分点的占比,从而估算出阴影部分面积。

k = 0

for i in range(N):

r_x = np.random.uniform(low=0.5, high=5, size=1)

r_y = np.random.uniform(low=0, high=1, size=1)

c_v = func(r_x)

if r_y <= c_v:

k += 1

area = k / N * 4.5

蒙特卡洛的结果是 3.9393

所有代码如下

# @Time : 2020/8/26

# @Author : 大太阳小白

# @Software: PyCharm

# @blog:https://blog.csdn.net/weixin_41579863

import numpy as np

from scipy.integrate import quad

from matplotlib import pyplot as plt

def func(x):

return np.cos(np.pi) * np.exp(-x) + 1

def drawing_question(fig):

x = np.linspace(0, 6, 1000)

y = func(x)

fig = plt.figure()

ax1 = fig.add_subplot()

ax1.axis([np.min(x), np.max(x), 0, np.max(y)]) # 坐标范围

ax1.plot(x, y, label="$cos(π)e^{-x}+1$") # 画曲线,带图示

ax1.fill_between(x, y1=y, y2=0, where=(x >= 0.5) & (x <= 5), # 填充积分区域

facecolor='blue', alpha=0.2)

ax1.text(0.5 * (0.7 + 4), 0.4, r"$\int_{0.5}^5(cos(π)e^{-x}+1)\mathrm{d}x$",

horizontalalignment='center', fontsize=14) # 增加说明文本

ax1.legend() # 显示图示

plt.show()

def area_sum():

x = np.linspace(0.5, 5, 1000)

dx = (5-0.5)/1000

y = func(x)

area = np.sum(y * dx)

return area

def area_quad():

area, error = quad(func, 0.5, 5)

return area

def montecarlo(N=5000):

k = 0

for i in range(N):

r_x = np.random.uniform(low=0.5, high=5, size=1)

r_y = np.random.uniform(low=0, high=1, size=1)

c_v = func(r_x)

if r_y <= c_v:

k += 1

area = k / N * 4.5

return area

def montecarlo_show(N=5000):

k = 0

x0 = []

x1 = []

for i in range(N):

r_x = np.random.uniform(low=0.5, high=5, size=1)

r_y = np.random.uniform(low=0, high=1, size=1)

c_v = func(r_x)

if r_y <= c_v:

k += 1

x0.append([r_x, r_y])

else:

x1.append([r_x, r_y])

x = np.linspace(0, 6, 1000)

y = func(x)

x0 = np.array(x0)

x1 = np.array(x1)

fig = plt.figure()

ax1 = fig.add_subplot()

ax1.axis([np.min(x), np.max(x), 0, np.max(y)])

ax1.plot(x, y, label="$cos(π)e^{-x}+1$")

ax1.scatter(x0[:, 0], x0[:, 1])

ax1.scatter(x1[:, 0], x1[:, 1])

ax1.fill_between(x, y1=y, y2=0, where=(x >= 0.5) & (x <= 5),

facecolor='blue', alpha=0.2)

ax1.text(0.5 * (0.7 + 4), 0.4, r"$\int_{0.5}^5(cos(π)e^{-x}+1)\mathrm{d}x$",

horizontalalignment='center', fontsize=14) # 增加说明文本

ax1.legend() # 显示图示

plt.show()

if __name__ == '__main__':

# drawing_question()

original = lambda x: np.exp(-x) + x

print('期望值是:', original(5)-original(0.5))

print('基于矩形面积求和的结果是', area_sum())

print('quad的结果是', area_quad())

print('蒙特卡洛的结果是', montecarlo())

montecarlo_show(N=500)

本文地址:https://blog.csdn.net/weixin_41579863/article/details/108239755

希望与广大网友互动??

点此进行留言吧!

python定义函数求面积公式_python求积分面积的几个方法相关推荐

  1. python定义函数的组成部分有_Python文档学习笔记(4)--定义函数

    定义函数 关键字 def 引入函数的定义.其后必须跟有函数名和以括号标明的形式参数列表.组成函数体的语句从下一行开始,且必须缩进. 执行 一个函数会引入一个用于函数的局部变量的新符号表. 因此,在函数 ...

  2. python定义函数的关键字是_python 函数定义

    python 函数 ---------------- ---------------- ---------------- ---------------- def test(x): print(x) ...

  3. python定义函数的组成部分有_Python学习笔记之函数的定义和作用域实例详解

    本文实例讲述了Python函数的定义和作用域.分享给大家供大家参考,具体如下: 定义函数 默认参数: 可以向函数中添加默认参数,以便为在函数调用中未指定的参数提供默认值 # 如果调用 cylinder ...

  4. python定义函数后怎么输出_python中如何定义函数返回值

    返回值简介: 简单介绍print和return的区别,print仅仅是打印在控制台,而return则是将return后面的部分作为返回值作为函数的输出,可以用变量接走,继续使用该返回值做其它事. 函数 ...

  5. python定义函数的组成部分有_Python基础11- 函数之自定义函数

    自定义函数语法结构: def fun1([x],[y],....): 语句1 语句2 使用def语句来定义函数,在def后依次写出函数名.小括号.参数(可无).冒号,然后缩进写函数体 1.无参函数: ...

  6. python定义函数以什么开头_python中下划线开头函数是什么

    python用下划线作为变量前缀和后缀指定特殊变量 _xxx 不能用'from module import *'导入 __xxx__ 系统定义名字 __xxx 类中的私有变量名 核心风格:避免用下划线 ...

  7. python求导函数公式_python怎么实现函数求导

    python实现函数求导的方法是:1.利用sympy库中的symbols方法传入x和y变量:2.利用sympy库中的diff函数传入需要求导的函数即可返回求导之后的结果. python利用sympy库 ...

  8. python如何调用函数计算出成绩的不及格率_(求excle公式:95分以上为优、94分-85分为良、84分-75分为中、74分-60分为合格、60分以下为不合格)excel成绩及格率...

    Excle中怎么找出指定行 ①excel中的数据筛选功能.可以操作,选择表头的任意一个单元格,单击菜单栏"数据"--->"筛选"--->" ...

  9. python定义函数

    python 定义函数 def functionName(list of parameters):#函数定义时并不会执行,调用时才执行functionBodyreturn value 有参数有返回值 ...

最新文章

  1. 百度运营专家:互联网运营必读书目(实用推荐)
  2. 福利 | 全网疯传免费领,一整套算法课程,拿走不谢!
  3. 2021年春季学期期末统一考试 成本管理 试题
  4. Web前后端笔记-vue封装http请求添加signature及后端(Java)解析并验证
  5. weblogic 调优参数
  6. 架构实战项目心得(一):技术和工具
  7. Tech-Ed2004的收获
  8. 记录自己在厦门两年来的面试经历--完结篇
  9. AndroidStudio:设计一个能在图片上涂鸦的程序
  10. Latch up 闩锁效应
  11. 网络通信基础——网络协议
  12. java调用百度语音接口
  13. 什么是STM32的ISP?
  14. Windows下装MySQL
  15. mysql经典sql语句大全_经典SQL语句大全(sql查询语句大全集锦)
  16. 哲理故事300篇(上)
  17. 面试笔记@MySQL
  18. 【面经】今天又一名读者斩获蚂蚁金服Offer,就是这么简单!!
  19. vue3 动态传值给子组件
  20. 安卓APP安装兼容性[应用是非正式发布版本, 当前设备不支持安装。]

热门文章

  1. 围城书评_书评:移动优先
  2. 正规的实用新型专利如何查询
  3. 如何快速搭建属于自己的个性网站?
  4. 安装 K8S, Bigip, Gateway API 测试环境 (2)
  5. 5.8GHz 和 10.525GHz 微波雷达的典型差异点
  6. 绝对经典:最幽默的小笑话
  7. surf绘制表面图应用
  8. 歌词时间php,熊梓崴《时间》歌词-时间Mp3歌词下载_爱歌词网
  9. 【高等数学】定积分2
  10. 游戏设计模式阅读笔记4——重访设计模式(原型模式)