python计算离散积分

前言

  1. 本文是傅立叶及其python应用系列的第一篇文章
  2. 对应的仓库地址为https://github.com/yuanzhoulvpi2017/tiny_python/tree/main/Fourier_Series

介绍

  1. 本篇文章将要介绍一个非常小众的scipy函数:simpson. 这个函数的一大功能就是可以对离散数据积分
  2. 之所以要介绍这个函数,是因为要开始写关于傅立叶主题的文章了,因为离散数据积分在傅立叶计算中非常重要,而在python中能做离散数据积分的、现成的函数,也就是只有这个函数了。
  3. 傅立叶变换和离散数据积分有什么关系?本篇先不解释他们的关系,后面我会渐近的介绍所有相关的内容。暂时还不需要知道他们是什么关系。
  4. 从一个简单的物理小知识入手,逐步的带你走进傅立叶的世界~

例子

有一天,小胡骑车,在0秒的时候,他的速度是0m/s,在1秒的时候,他的速度是0.45m/s,,,,依次类推,小胡把他每一秒的自行车速度都记下来了。还画了一个图:

上面的图应该都很熟悉,这就是高中物理里面学习的时间-速度变化曲线图。

  1. 虽然我们是每隔一秒记录了一次速度,但是我们这个时间依然是不连续的,而且也不可能连续,有办法把0.00001s、0.00002s、0.00003s等每一个瞬间速度都记下来么?不可能!
  2. 我们只能大概的记录下每一秒的速度,然后做等效:每一秒的、最开始的、速度 默认为这个秒时间段内的平均速度。
  3. 既然时间-速度变化曲线图都给我们了,其实,我们基于物理意义也就知道了:曲线下和x轴组成的面积其实就是行驶的路程。而求这个面积其实就是一个积分过程。


上方的阴影面积就是行驶的路程了。

到这里应该就大概了解了什么叫离散数据积分

  1. 现实世界是连续的,但是我们没有办法把每一刻的速度都记录下来,因此记录的都是离散的点
  2. 基于离散的点,求积分,就是离散数据积分,比如上面的基于时间-速度变化曲线图求总路程等。

代码

认识了离散数据求积分,那么怎么求是重点了。其实使用scipy.integrate.simpson就可以非常简单的计算出来。

simpson需要起码需要两个参数:

  1. y:也就是因变量,比如上面的速度,对应的就是y;
  2. x:也就是自变量,比如上面的时间,对应的就是x;

需要注意的是,一定不要搞反了!simpson需要的第一个参数是yy在前和x在后!!!血的教训,因为我搞反了,导致傅立叶计算的都不对😭,找了半天bug,才发现这个错误

# 导入包
from scipy.integrate import simpson
import numpy as np
import pandas as pd 
import matplotlib.pyplot as plt 

# 数据部分
# 数据来自于matlab doc
vel = np.array([0, 0.45, 1.79, 4.02, 7.15, 11.18, 16.09, 21.90, 29.05, 29.05,
29.05, 29.05, 29.05, 22.42, 17.9, 17.9, 17.9, 17.9, 14.34, 11.01,
8.9, 6.54, 2.03, 0.55, 0])
time = np.arange(vel.shape[0])

# 求积分部分
simpson(vel, time)
# > 344.7933333333334

  1. 上面的数据是来自matlab的doc文档。
  2. 求积分就那个一个函数,把对应的yx按照顺序传递进去就行了。
  3. 最终我们大概行驶了约344.7米。

参考资料

  1. 本文用到的几个截图,包括数据,是来自于matlab官方文档,参考链接为: https://ww2.mathworks.cn/help/matlab/math/integration-of-numeric-data.html
  2. scipy.integrate.simpson链接为:https://docs.scipy.org/doc/scipy/reference/generated/scipy.integrate.simpson.html#scipy.integrate.simpson

代码

傅立叶及其python应用所有的代码和数据全部都免费共享!

  1. 代码所在文件夹为:https://github.com/yuanzhoulvpi2017/tiny_python/tree/main/Fourier_Series
  2. 代码文件为01开头的ipynb格式文件
  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

yuanzhoulvpi

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

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

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

打赏作者

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

抵扣说明:

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

余额充值