運算物理學
運算物理學(英文:computational physics)係指用科學運算方法(例如電腦模擬)解決物理學上撞到嘅問題嘅領域。
物理學通常都會用一大柞方程式(尤其係微分方程)表達某啲變數之間嘅關係,用呢啲變數組成嘅模型嚟描述研究緊嘅現象。做物理學相關工作嘅人成日都會用電腦模擬嚟解一啲冇得用解析解(簡單講即係齋靠操弄方程式)嚟解決嘅問題-呢啲問題往往係要做「想像 ,個答案係噉噉噉,想像 ,個答案係噉噉噉...」噉嘅運算方法嚟解(睇埋數值分析),而當個冇得用解析解嚟解嘅問題涉及複雜系統嗰陣,變數嘅數量多得好交關,難以靠人手計嚟解決個問題,於是研究者就會用電腦模擬嘅方法,叫部電腦(例如)「計 嗰陣嘅答案,計 嗰陣嘅答案... 再將呢啲答案畫一條線出嚟睇」[註 1][1]。
例子
編輯例如類似以下呢段 C 碼噉嘅碼可以攞嚟模擬喺牛頓力學(Newtonian mechanics)二維空間下郁動嘅粒子[註 2][2]:
...
while (currentTime < totalSimulationTime) { // 當 currentTime < totalSimulationTime,一路做...
for (int i = 0; i < NUM_PARTICLES; ++i) { // 家陣模擬若干粒粒子,foreach 粒子,做...
Particle *particle = &particles[i];
Vector2 force = ComputeForce(particle); // 有個子程序計吓呢粒粒子受緊幾多力。
Vector2 acceleration = (Vector2){force.x / particle->mass, force.y / particle->mass};
// 上面呢行碼係用牛頓第二定律計粒粒子跟住嘅加速度。
particle->velocity.x += acceleration.x * dt; // 用加速度 update X 軸速度...
particle->velocity.y += acceleration.y * dt; // 用加速度 update Y 軸速度...
particle->position.x += particle->velocity.x * dt; // 用速度 update X 軸位置...
particle->position.y += particle->velocity.y * dt; // 用速度 update Y 軸位置...
}
PrintParticles(); // 按啲粒子嘅位置,更新個畫面嘅樣。
currentTime += dt; // currentTime 上升 1。
}
...