Runge Kutta C/C++ 範例
Runge Kutta C/C++ 範例
資料來源: Bard/ChatGPT35
線上編譯器: https://www.tutorialspoint.com/compile_c_online.php
https://www.onlinegdb.com/
應用場景&原理介紹:
Runge-Kutta(龍格-庫塔)是一種數值求解常微分方程(ODEs)的方法。它是由德國數學家卡爾·龍格(Carl Runge)和馬丁·庫塔(Martin Kutta)在1900年左右獨立發表的。這種方法通常用於求解無法通過解析方法簡單求解的微分方程。 Runge-Kutta方法的基本思想是通過在每個小步驟中進行多次評估,以更準確地估計微分方程的解。最常見的是四階Runge-Kutta方法,它在每個步驟中進行四次評估。這種方法在數值模擬和科學計算中廣泛應用,因為它提供了一種相對簡單而有效的方式來處理複雜的微分方程。
範例題目:
在這個範例中,我們使用了以下微分方程: dy/dt = y^2 這個微分方程的解是 y = e^t。
範例程式碼:
#include <stdio.h> // 右端函數 double f(double t, double y) { return y * y; } // 四階龍格-庫塔算法 void rk4(double t, double y, double h, double f(double t, double y), double *y_new) { // k1 double k1 = h * f(t, y); // k2 double k2 = h * f(t + h / 2, y + k1 / 2); // k3 double k3 = h * f(t + h / 2, y + k2 / 2); // k4 double k4 = h * f(t + h, y + k3); // 更新 y *y_new = y + (k1 + 2 * k2 + 2 * k3 + k4) / 6; } // 演示 int main() { // 初始條件 double t0 = 0.0; double y0 = 1.0; double h = 0.01; // 求解 double y_new; for (double t = t0; t <= 2.0; t += h) { rk4(t, y0, h, f, &y_new); printf("t = %.2f, y = %f\n", t, y_new); y0 = y_new; } return 0; }