運算物理學英文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。
    }
...

註釋

編輯
  1. 會輸出一個列表,列嗮啲數值出嚟。
  2. 初始化嗰部份省略咗。

睇埋

編輯