Skip to content

Instantly share code, notes, and snippets.

@TonyMooori
Created March 9, 2016 07:01
Show Gist options
  • Save TonyMooori/c0f69b742de1a338ce92 to your computer and use it in GitHub Desktop.
Save TonyMooori/c0f69b742de1a338ce92 to your computer and use it in GitHub Desktop.
修正Euler法による1階微分方程式の実装例です
/* 修正Euler法による微分方程式 f' - 2f = x の計算 */
#include <stdio.h>
#include <math.h>
double g(double x,double fx){
return x + 2.0 * fx;
}
int main(void){
int k; // ループカウンタ
int N = 10000; // 繰り返し数
double dx = 1e-3; // 刻み幅Δx
double f = 1.0; // 関数f(x)の値(初期値)
double f_bar; // f(x_k+1)を矩形積分でとりあえず求めた値
double x_0 = 0.0; // 初期値の時のxの値
double x_k; // x_kの値
for( k = 1 ; k <= N ; k++ ){
x_k = x_0 + k * dx; // x_kの値を求める
// まず矩形積分でf_k+1を見積もって
f_bar = f + g(x_k,f) * dx;
// 台形公式で積分する
f = f + (g(x_k,f) + g(x_k + dx, f_bar)) * dx /2.0;
// 値の表示
printf("%lf,%e\n",x_k,f);
}
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment