後期中間試験問題 (5E 計算機応用)
山本昌志∗
2004 年 12 月 06 日
1
常微分方程式の数値計算法
1.1
基礎
常微分方程式、
dy
= f (x, y)
dx
の近似解を数値計算により求める方法についての問いである。
(1)
[問 1] 式 1 の解を y = y(x) とする。yi = y(xi ) として、xi の周りでのテイラー展開を書け。
[問 2] オイラー法の漸化式を示せ。
[問 3] オイラー法の場合、テイラー展開のどの項を無視 (計算に考慮していない) しているか
[問 4] ホイン法の漸化式








y
k1 = hf (xn , yn )
k2 = hf (xn + h, yn + k1 )
1
n+1 = yn + (k1 + k2 )
2
(2)
を導け
[問 5] 4 次のルンゲ・クッタ法の漸化式を書け
[問 6] 数値計算を行う場合、高階の微分方程式は 1 階の連立微分方程式に直す。次の、微分方程
式を 1 階の連立微分方程式に直せ。
5y 00 + y 0 + y = sin(ωx)
1.2
(3)
プログラム
4 次のルンゲ・クッタ法で常微分方程式の近似解を計算するプログラムを示す。プログラム中の
と
イ
に入れる適当な文を書け。
ただし 、プログラムの条件は次の通りとする。
∗ 国立秋田工業高等専門学校
電気工学科
1
ア
• 計算結果の xi の値は配列 x[i] に格納される。そのときの y の値、即ち、yi の値は、配列 y[i] に格
納される。
• 計算に必要な値は、プログラムの前半で、
– 初期値は、配列の x[0] と y[0] に格納される。
– 計算を止める x の最終の値は、変数 final x に格納される。
– 計算回数は、変数 ncal に格納される。
と与えられる。
•
ア
は、4 次のルンゲ・クッタの計算を行い、近似解を配列 x[] と y[] に格納している。
• 解くべき微分方程式は、
dy
= sin x cos x − y cos x
dx
である。そして、この右辺の値は、関数 func で計算するものとする。
#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 --- */
2
(4)
ア
return 0;
}
/*================================================================*/
/*
define function
*/
/*================================================================*/
double func(double x, double y){
double dydx;
イ
return(dydx);
}
2
常微分方程式の数値計算法
2.1
連立一次方程式の解法
連立一次方程式について、以下の問いに答えよ。
[問 1] 次の、連立一次方程式を行列とベクトルで表現せよ。


x + 2x2 + 3x3 = 2

 1
2x1 + 2x2 + 3x3 = 1



2x1 + 2x2 + x3 = −1
(5)
[問 2] 前問の方程式を、行列とベクトルの表示のままで、ガウス・ジョルダン法を用いて解け。
計算過程は、全て書くこと。行列とベクトルを用いない表示には点を与えない。また、こ
の方程式の解は (x1 , x2 , x3 ) = (−1, 0, 1) である。この解をよく考えながら、計算ミスに気
を付けて解答を記述すること。
2.2
プログラム
ガウス・ジョルダン法で連立一次方程式の解を計算する関数 (サブルーチン ) に関する問いである。プロ
グラム中の の部分の文を書け。
ただし 、条件は以下の通りとする。
• 対角成分には、決して 0 が現れないものとする。即ち、ピボット選択は不要である。
3
• 行列式が 0 となる係数行列は 、与えられないものとする。即ち、行列が特異な場合の処理は不要で
ある。
• 仮引数 n は、解くべき連立方程式の未知数の数である。
• 仮引数の配列 a と b は、係数行列 A と非同次項 b である。
– 係数行列は、配列 a[1][1]∼a[n][n] に格納されている。
– 非同次項は、配列 b[1]∼b[n] に格納されている。
• プログラム実行後、連立方程式の解 x は、配列 b[1]∼b[n] に格納される。
• このプログラムでの処理が終了すると、配列 a[1][1]∼a[n][n] は単位行列になる。
/* ========== ガウスジョルダン法の関数 =================*/
void gauss_jordan(int n, double a[][100], double b[]){
}
4
ダウンロード

後期中間試験問題(5E 計算機応用)