ということで,皆さんが常微分方程式を計算する必要が生じたときは,何はともあれ4次 のルンゲ・クッタで計算すべきである.普通の科学に携わる人にとって,4次のルンゲ・ クッタは常微分方程式の最初で最後の解法である.
4次のルンゲ・クッタの公式は,式(2)に示す通りである.そし て,これは図1のように表すことができる.
#include <stdio.h> #include <math.h> #define IMAX 100001 double func(double x, double y); /*================================================================*/ /* main function */ /*================================================================*/ int main(void){ double x[IMAX], y[IMAX]; double final_x, h; double k1, k2, k3, k4; int ncal, i; /*--- set initial condition and cal range ---*/ x[0]=0.0; y[0]=0.0; final_x=10.0; ncal=10000; /* --- size of calculation step --- */ h=(final_x-x[0])/ncal; /* --- 4th Runge Kutta Calculation --- */ for(i=0; i < ncal; i++){ k1=h*func(x[i],y[i]); k2=h*func(x[i]+h/2.0, y[i]+k1/2.0); k3=h*func(x[i]+h/2.0, y[i]+k2/2.0); k4=h*func(x[i]+h, y[i]+k3); x[i+1]=x[i]+h; y[i+1]=y[i]+1.0/6.0*(k1+2.0*k2+2.0*k3+k4); } return 0; } /*================================================================*/ /* define function */ /*================================================================*/ double func(double x, double y){ double dydx; dydx=sin(x)*cos(x)-y*cos(x); return(dydx); }