数值积分(欧拉积分、Velet积分与蛙跳积分)

  • 数值积分
    • 级数展开与积分
    • Velet积分
    • 蛙跳积分

数值积分

我们使用的各种数值积分方法都是对积分做近似,近似的本质类似于泰勒级数展开式。在实际模拟中,不可能使用泰勒级数展开中的无穷项,所以积分方法只用级数的截断类似。更健壮的积分方法是使用级数中的更多项。积分方法对模拟的精度有非常大的影响。最简单的积分有欧拉积分,其次有Velet积分(类似蛙跳积分)、蛙跳积分。理解这些概念首先需了解级数展开与积分。

级数展开与积分

泰勒级数展开
s(t+h)=s(t)+s˙(t)h+12s¨(t)h2+⋯\mathbf{s}(t+h)=\mathbf{s}(t)+\dot{\mathbf{s}}(t) h+\frac{1}{2} \ddot{\mathbf{s}}(t) h^{2}+\cdots s(t+h)=s(t)+s˙(t)h+21​s¨(t)h2+⋯
欧拉积分只用到了前两项:s(t+h)≈s(t)+s˙(t)h\mathbf{s}(t+h) \approx \mathbf{s}(t)+\dot{\mathbf{s}}(t) hs(t+h)≈s(t)+s˙(t)h。因为只用到了一阶导数,所以欧拉积分是一阶方法。
常见的二阶方法有
梯形法s(t+h)=s(t)+s˙(t)+s˙(t+h)2h\mathbf{s}(t+h)=\mathbf{s}(t)+\frac{\dot{\mathbf{s}}(t)+\dot{\mathbf{s}}(t+h)}{2} hs(t+h)=s(t)+2s˙(t)+s˙(t+h)​h
中点法s(t+h)=s(t)+s˙(t+0.5h)h\mathbf{s}(t+h)=\mathbf{s}(t)+\dot{\mathbf{s}}(t+0.5 h) hs(t+h)=s(t)+s˙(t+0.5h)h

Velet积分

Velet积分假设加速度仅由位置决定,即a=1mf(x)a=\frac{1}{m} f(x)a=m1​f(x),利用加速度和速度是独立的这一事实,把计算速度和计算位置分离开来,得到更高的计算精度。
假设我们知道某个时刻的位置x[i]x^{[i]}x[i]和速度v[i]v^{[i]}v[i],我们想要知道一个时步h后的位置x[i+1]x^{[i+1]}x[i+1]和速度v[i+1]v^{[i+1]}v[i+1]。我们用欧拉积分计算速度:v[i+1]=v[i]+a[i]hv^{[i+1]}=v^{[i]}+a^{[i]}hv[i+1]=v[i]+a[i]h,使用梯形法计算位置x[i+1]x^{[i+1]}x[i+1]:
x[i+1]=x[i]+v[i]+v[i+1]2h=x[i]+v[i]+v[i]+a[i]h2h=x[i]+v[i]h+12a[i]h2\begin{aligned} \mathbf{x}^{[i+1]} &=\mathbf{x}^{[i]}+\frac{\mathbf{v}^{[i]}+\mathbf{v}^{[i+1]}}{2} h \\ &=\mathbf{x}^{[i]}+\frac{\mathbf{v}^{[i]}+\mathbf{v}^{[i]}+\mathbf{a}^{[i]} h}{2} h \\ &=\mathbf{x}^{[i]}+\mathbf{v}^{[i]} h+\frac{1}{2} \mathbf{a}^{[i]} h^{2} \end{aligned}x[i+1]​=x[i]+2v[i]+v[i+1]​h=x[i]+2v[i]+v[i]+a[i]h​h=x[i]+v[i]h+21​a[i]h2​
用这个方法得到位置的最高阶估计后,由于加速度是位置的函数,可以计算新位置处的加速度。为了得到速度的更高阶估计,我们对新速度使用梯度法计算速度。如下:
x[i+1]=x[i]+v[i]h+12a[i]h2a[i+1]=1mf(x[i+1])v[i+1]=v[i]+a[i]+a[i+1]2h\begin{aligned} \mathbf{x}^{[i+1]} &=\mathbf{x}^{[i]}+\mathbf{v}^{[i]} h+\frac{1}{2} \mathbf{a}^{[i]} h^{2} \\ \mathbf{a}^{[i+1]} &=\frac{1}{m} \mathbf{f}\left(\mathbf{x}^{[i+1]}\right) \\ \mathbf{v}^{[i+1]} &=\mathbf{v}^{[i]}+\frac{\mathbf{a}^{[i]}+\mathbf{a}^{[i+1]}}{2} h \end{aligned}x[i+1]a[i+1]v[i+1]​=x[i]+v[i]h+21​a[i]h2=m1​f(x[i+1])=v[i]+2a[i]+a[i+1]​h​
Velet积分中使用了梯形法,所以Velet积分是二阶积分。

蛙跳积分

蛙跳积分是Velet积分的小修正。蛙跳积分中计算的是半时间步长时的速度,而不是和位置、加速度同时刻的速度。如果要计算t、t+h、t+2h时刻的位置,那么就需要计算t+0.5h、t+1.5h、t+2.5h时刻的速度。“蛙跳”指的是随着时间推进,位置和速度的计算相互“跳跃”过对方。
运行蛙跳积分,我们假设x[i]x^{[i]}x[i]、a[i]a^{[i]}a[i]和v[i+0.5]v^{[i+0.5]}v[i+0.5]已知,需要计算x[i+1]x^{[i+1]}x[i+1]和v[i+1.5]v^{[i+1.5]}v[i+1.5]。计算方法如下:
x[i+1]=x[i]+v[i+0.5]ha[i+1]=1mf(x[i+1])v[i+1.5]=v[i+0.5]+a[i+1]h\begin{aligned} \mathbf{x}^{[i+1]} &=\mathbf{x}^{[i]}+\mathbf{v}^{[i+0.5]} h \\ \mathbf{a}^{[i+1]} &=\frac{1}{m} \mathbf{f}\left(\mathbf{x}^{[i+1]}\right) \\ \mathbf{v}^{[i+1.5]} &=\mathbf{v}^{[i+0.5]}+\mathbf{a}^{[i+1]} h \end{aligned}x[i+1]a[i+1]v[i+1.5]​=x[i]+v[i+0.5]h=m1​f(x[i+1])=v[i+0.5]+a[i+1]h​
如果不知道v[0.5]v^{[0.5]}v[0.5],但是知道x[0]x^{[0]}x[0](即a[0]a^{[0]}a[0])、v[0]v^{[0]}v[0],可以使用半步长的欧拉法估计初始速度。这些计算位置和速度的方法都等效于中点法。意味着蛙跳积分是一个二阶方法。

  • 参考《基于物理的建模与动画》

【数值积分(欧拉积分、Velet积分与蛙跳积分)】相关推荐

  1. 常见的数值积分方法_欧拉积分/中值积分/龙格-库塔积分

    参考:常见的数值积分方法 (欧拉.中值.龙格-库塔,[常用于IMU中]) 1. 积分基本概念 设F(x)为函数f(x)的一个原函数,我们把函数f(x)的所有原函数F(x)+C(C为任意常数)叫做函数f ...

  2. 数值积分方法:欧拉积分、中点积分和龙格-库塔法积分

    目录 写在前面 原理 代码 CMakeLists.txt euler.cpp midpoint.cpp rk4.cpp compile&run 参考 完 写在前面 1.本文内容 数值积分方法: ...

  3. VIO-SLAM中的欧拉积分、中点积分与龙格-库塔积分

    在 SLAM 系统中经常用到各种不同的数值积分方法,工程上最常见的有三种:欧拉积分(Euler method).中点积分(Midpoint method)和龙格-库塔法积分(Runge–Kutta m ...

  4. 考研数二第十七讲 反常积分与反常积分之欧拉-泊松(Euler-Poisson)积分

    反常积分 反常积分又叫广义积分,是对普通定积分的推广,指含有无穷上限/下限,或者被积函数含有瑕点的积分,前者称为无穷限广义积分,后者称为瑕积分(又称无界函数的反常积分). 含有无穷上限/下限的反常积分 ...

  5. Unity 布料仿真笔记2 欧拉积分 Verlet积分分析

    前言 An object at rest remains at rest, unless acted upon by an exterior force. An object in motion re ...

  6. 常用的积分方法讨论(数学表达与代码整理)(龙格-库塔、中值积分、欧拉积分)

    积分方法讨论(数学表达与代码整理) 数学原理 1.1 四元数与角速度的关系 在无人机或无人车的导航系统中常常采用四元数代替欧拉角来表示机体的旋转,因为欧拉角在计算过程中容易产生奇异,这与欧拉角的计算需 ...

  7. 欧拉积分、中点积分与龙格-库塔积分(转)

    http://www.liuxiao.org/2018/05/%E6%AC%A7%E6%8B%89%E7%A7%AF%E5%88%86%E3%80%81%E4%B8%AD%E7%82%B9%E7%A7 ...

  8. #欧拉第二积分(伽马函数)

    伽玛函数,也叫欧拉第二积分,是阶乘函数在实数与复数上扩展的一类函数. 伽玛函数作为阶乘函数的延拓,是定义在复数范围内的亚纯函数,通常写成,负整数和0是它的一阶极点. 实数域: 复数域: 在解题中,伽马 ...

  9. 隐形Euler方法的java程序_常微分方程的解法 (二): 欧拉(Euler)方法

    上一节讲了 常微分方程的三种离散化 方法:差商近似导数.数值积分.Taylor 多项式近似. 目录 §2 欧拉(Euler)方法 2.1 向前 Euler 公式.向后 Euler 公式        ...

最新文章

  1. smobiler介绍(二)
  2. 转录组测序和RNA-seq
  3. Mac下安装PIL库
  4. PHP函数处理方法总结
  5. nginx訪問php配置,thinkphp5配置nginx访问
  6. NAB 2019见闻:CAE视频编码与QoE
  7. 前端学习(2847):css鼠标样式
  8. mybatis学习(2):基本设置和核心配置
  9. 世界经典反编译工具reflector下载
  10. 《统计学》第八版贾俊平第二章课后习题及答案总结
  11. 文件后缀bat是什么?(批处理文件)
  12. CASIE: Extracting Cybersecurity Event Information from Text阅读总结
  13. 生成android 证书
  14. python 素数最快_列出N以下所有素数的最快方法
  15. 欧姆龙气压传感器 2SMPB-02E程序编写
  16. sql查询电话号敏感数据加* 的写法
  17. ubuntu安装pinta(图片编辑器)
  18. 香港理工大学计算机科学教授,香港理工大学邵子立副教授学术报告
  19. 如何有效的做好线上引流?如何自己做引流推广?
  20. 你真的理解函数式编程吗?

热门文章

  1. 解密最接近人脑的智能学习机器——深度学习及并行化实现,最全的Deep Learning解析
  2. 移动端适配 viewport
  3. 从外包踏进字节跳动那一刻,我泪目了,鬼知道我这416天经历了些什么?
  4. 沉痛悼念恩师程开甲院士“改革子先锋”
  5. CSDN产品周报第24期|CSDN APP发布富文本、MarkDown编辑器;社区动态支持快转……
  6. CNRDS科研结构专利数据
  7. web前端开发职业培训,前端应届生如何做一个职业规划
  8. 如何监测高价值货物在物流运输过程中受到的振动和冲击?全面保障货物安全
  9. 三维视频游戏中的高氏着色和纹理贴图是什么
  10. VUEX 报错:Do not mutate vuex store state outside mutation handlers.