/* これが最後の課題です. レポート提出率 60% 以上で合格です. 期限(おくれレポート提出も含む): 2月15日(金曜日) 返却: 各自のポスト */ def mtest(A,V,P) { A[0][0] = 1; V[0] = 1; P = 1; return P; } def mtest2() { A = newmat(2,2); V = newvect(2); print(A); print(V); P = 0; mtest(A,V,P); print(A); print(V); } /* 問題 1. mtest2() はどのような出力を表示するか? 理由も付けて説明せよ. */ /* Gauss消去(elimination) を Risa/Asir で書いたもの. 小さい Pivot 対策等はなし. */ def gaussE(A,Y) { N = size(A)[0]; for (K=1; K<=N-1; K++) { for (I=K+1; I<=N; I++) { P = A[I-1][K-1]/A[K-1][K-1]; for (J=K; J<=N; J++) { A[I-1][J-1] = A[I-1][J-1]-P*A[K-1][J-1]; } Y[I-1] = Y[I-1]-P*Y[K-1]; } print(A); print(Y); print("----------------"); } } def gtest1() { A=newmat(3,3,[[1,-1,2],[-1,2,-3],[3,1,1]]); Y=newvect(3,[5,-6,8]); print(A); print(Y); print("----------------"); gaussE(A,Y); } /* 問題 2. print(A) を gaussE の I の for loop の内側へいれると gtest1() の実行で何が表示されるか? 問題 3. 入力データを最低 5 とおり用意して, 上のプログラムで 上三角行列になることを確かめよ. */ /* 問題 4. 上の関数を用いて 連立方程式 A X = Y の解 X を求めるプログラムを書きなさい. ○ どのようなテストデータ達でプログラムの正しさを調べたか? ○ プログラムの解説. */ /* 問題 5. 拡散方程式を陰解法を用いて解くプログラムを作成せよ. 初期条件は各自適当に設定. 連立一次方程式を解くには LU 分解を用いるのが望ましいが (テキスト p.128, p.153 参照), とりあえずは, 上のガウス消去のプログラムを援用してもよい. 結果は図示するのが望ましい. (Risa/Asir ドリル, 5.3 章, 超入門 3章を参考に) */ end$