【simulation笔记】建模和模拟过程

这个是讲整个宏观上的模拟的过程,先记录着,还没有清新明了!
【simulation笔记】建模和模拟过程_第1张图片
所以整个过程就是:
现实世界的问题理想化(大概是去掉一些条件),建立数学模型,对这个数学模型离散化变成数值方法,这个数值方法来验证这个数学模型,看这个数值方法适不适用于数值模型,如果适用看看这个结果看结果是否和现实世界的结果大致一致。

一般数学建模过程都是用物理定律(这个过程是理想化的),然后把这个模型离散化,再用一个数值方法在这个离散模型(discretization的过程),数值方法计算出模拟的结果(simulation),确保数值方法是和数学模型一致的(有没有计算出这个问题的结果(verification)),再看看是不是这个模拟的模型可以用在现实世界(也就是你的这个数学模型建的对不对了,有没有解决对的问题)。

总的来说有两种方法来simulation:
一个是Computational Meshes:

  • Mesh Free Methods (Particles) 无网格法(粒子化建模)?我猜
  • Regular Meshes (Uniform Regular Grids) 常规网格化(一致化常规网格)
  • Irregular Meshes (Tetrahedral Meshes) 非常规网格化(四面体网格)不懂

一个是Discretization Methods:

  • Mass Spring Systems/Smoothed Particle Hydrodynamics(好像是流体力学建模的)
  • Finite Difference Methods 有限差分方法
  • Finite Volume Methods 有限体积方法
  • Explicit/Implicit etc… (???)

Deformable Model(难道是在运行时允许改变的simulation)
一般处理方法是:

  • 预处理:
    • (数据获取)
    • 网格化
  • 实时运行
    • 计算改变的地方
    • 计算碰撞检测
    • 计算约束力
  • 后处理
    • 显示模拟结果

用程序表示这个loop就是:

#algorithm simulation loop
	while running:
		C_contacts_t = collision_detection(X_t)
		f_t = compute_contact_forces(C_contacts_t)
		v_{t+detaT} = velocity_update(f_t,v_t)
		x_{t+detaT} = position_update(x_t,v_{t+detaT})
		draw(x_{t+detaT})
		t = t + detaT
	end
#end algorithm

0-0 更新速度和位置的会用到半隐式欧拉方法

之后来填坑!

你可能感兴趣的:(simulation笔记)