ということで,皆さんが常微分方程式を計算する必要が生じたときは,何はともあれ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);
}