Runge Kutta C/C++ 範例

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;
}


發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *