目录
1.单粒子模拟(Single Particle Simulation)
1.3.2自适应步长(Adaptive Step Size)
1.3.3 隐式欧拉方法(Implicit Euler Method)
1.3.4 龙格库塔方法(Runge-Kutta Families)
1.3.5Position-Based/Verlet Intergation
4.欧拉和拉格朗日(Eulerian and Lagrangian)
1.单粒子模拟(Single Particle Simulation)
1.1速度矢量场
假设粒子的运动由速度矢量场决定,速度场是关于位置和时间的函数:v(x, t);
已知速度,建立方程,解常微分方程就可以得到位置量
1.2欧拉方法(Euler Method)
简单的迭代用上一时刻的信息推导这一时刻的信息;
缺点
(1)误差:如果采用较大的Δt,误差会很大,并且误差会积累,可以通过缩小Δt来控制误差;
(2)不稳定性:假设有一个圆形速度场,速度一直是垂直于直径的,粒子应该一直做圆周运动,但是用欧拉方法,不管选择多小的步长Δt,粒子都会飞出去;
稳定性定义
局部截断误差(local truncation error):每一步的误差;
全局累积误差(total accumulated error):总的累积误差;
但重要的是步长h 跟误差的关系,即对应的阶数关系,隐式的欧拉方法是1阶,阶数越高代表方法越好;
1.3解决欧拉方法不稳定性的方法
1.3.1中点法(Midpoint method)
欧拉方法计算质点 t 时刻经过Δt之后的位置a,弃用a点选择其中点位置b,得到中点处的速度矢量,用中点的速度,计算初始点经过Δt后的位置c;相当于用两次欧拉矫正偏移;
1.3.2自适应步长(Adaptive Step Size)
基于误差估计,自动选择步长Δt但可能会让步长变得特别小;
先用步长 T 做一次欧拉计算 XT,再用步长 T/2 做两次欧拉得到 XT/2,比较两次位置误差||XT - XT/2||,若误差大于阈值,则减少步长,重复以上步骤;
1.3.3 隐式欧拉方法(Implicit Euler Method)
跟欧拉方法的区别:用下一个时刻的速度和加速度来计算下一个时刻的位置和速度;
1.3.4 龙格库塔方法(Runge-Kutta Families)
常用的有RK4方法,是一种组合的更新方法;
1.3.5Position-Based/Verlet Intergation
弹簧弹性系数无限大,拉伸后立刻变回原形,虽然不符合物理,但效果很好;
2.刚体模拟(Rigid Body Simulation)
刚体不会发生形变,类似于粒子系统,刚体相当于内部所有粒子以相同方式运动;
3.流体模拟(Fluid Simulation)
通过形成一些小球,通过它们的位置来模拟水和浪花;基于位置的方法不是物理的,没有能量损失,但可以人为的加入能量衰减;
水是由一个个刚体小球组成的,水不能被压缩;
任何一个时刻,某个位置的密度发生变化,就必须通过移动小球的位置进行密度修正;
需要知道任何一个位置的密度梯度,即gradient descent梯度下降;
4.欧拉和拉格朗日(Eulerian and Lagrangian)
拉格朗日法(质点法):类似于模拟水,我们认为水是许多不同刚体水滴组成,模拟好每一个水滴,知道每一个在某个时刻应该在什么位置,即可很好的模拟水;
欧拉方法(网格法):不同于之前的解微分方程的欧拉方法,这里是指把空间分成一个个网格,考虑一个网格随着时间不同的变化;
Mterial Point Method(MPM)
把欧拉法和拉格朗日法混合在一起,粒子把属性传给网格,网格计算处理更新后返还给粒子;