質問: ! n 個の質点からなる連成振動子の運動を 0 < t < tend の範囲で解く。長さ 2n の配列 w(1:n, 1:2) を定義して, ! j 番目の質点の変位を w(j, 1),速度を w(j, 2) に格納する。質点の質量の逆数に比例する無次元
回答: /* PROGRAM coupled_oscillators */ /* n 個の質点からなる連成振動子の運動を */ /* 0 < t < TEND の範囲で解く。 */ /* 長さ 2*N の配列 w[0~(N-1)][0~1] を定義して, */ /* j 番目の質点の変位を w[j][0], */ /* 速度を w[j][1] に格納する。 */ /* 質点の質量の逆数に比例する無次元パラメータは */ /* 配列 c[0~(N-1)] に格納する。 */ /* 初期条件は変位ゼロ, */ /* 速度は 1 番目の質点のみ VZERO とする。 */ #include #define N 10 #define VZERO 0.1 #define TEND 100.0 int main(void){ int j; double t,dt, c[N], w[N][2],p[N][2], k1[N][2], k2[N][2], k3[N][2], k4[N][2]; /* 時間ステップの刻み幅 dt を標準入力から読み込む。*/ scanf("%lf",&dt); /* 質量はみんな同じ。*/ for(j=0;j= TEND ) break; /* 4次ルンゲ・クッタ法。微分方程式を */ /* dw/dt = f(w) だと思って,機械的に */ /* アルゴリズムを適用する。*/ /* まず補助変数 k1 = f(p) を計算する。*/ for(j=0;j