プログラミング実習 1,2 クラス 第 1 週目

プログラミング実習 1・2 クラス
第 1 週目
担当教員: 渡邊 直樹
課題 1
• 3×3型行列の行列式と逆行列を求める
プログラムを作成せよ。
– 行列の各要素はコマンド・プロンプトから入力
– 計算した結果もコマンド・プロンプトに表示
– 課題提出の際は授業中に指示された行列を
使うこと!(さもないと減点)
課題1の提出について
• 提出方法:以下の事項に留意して記述したメールを
[email protected] あてに送付。
1. プログラムの実行結果とソースコード(javaファイル)
をメールの本文に書く。順番は
実行結果、ソースコード
(どちらか一方だけでは提出とみなさない。)
2. メールの件名は 必ず課題番号:学籍番号:氏名。
例:課題1:2007xxxxx:山田太郎
• 締め切りは 12月14日 (金)、 10:00am
今日の実習
3×3 型行列の行列式と逆行列を計算するための
InvMatrix.javaという名前のプログラムを作成する。
1. 行列Aとその逆行列Bはdouble 型の二次元配列
として宣言
2. 行列Aの各要素aijはコマンド・プロンプトから入力

for 文を使い配列Aに値を代入
3. 行列Aをコマンド・プロンプトに出力。
4. 行列式サラスの公式により求め, 得られた値を
コマンド・プロンプトに出力
5. 計算した逆行列Bをコマンド・プロンプトに出力
sample1の実行結果の例(1)
画面に表示された行列の要素をコマンド・プロンプトから入力
>a11=
2
>a12=
3
…
>a33=
1
sample1の実行結果の例(2)
>A=
| 2.000 3.000 1.000 |
| 1.000 3.000 3.000 |
| 4.000 2.000 1.000 |
>Det(A)=17.0です。
>Inverse Matrix=…自分で書いたプログラムで計算しましょう
サラスの公式
逆行列の求め方
行列Aの逆行列A-1は余因子行列を用いて以下の手順によって求める。
1. det(A)=0であればA-1は存在しない。
2. det(A)≠0のとき
行列Aの(i, j)-余因子をとおく。行列Aの(i, j)-余因子とは、行列Aの
第i行と第j列を取り除いて得られる行列の行列式を倍したもの
である。例えば行列Aの(2,3)-余因子であれば、
この余因子を用いると行列Aの逆行列は(2行3列の下付添え字は32)
ヒント (1) :課題1の雛形
import java.io.*;
public class InvMatrix {
public static void main(String args[]) {
double a[][] = new double[3][3];
// [2][3]と書くと3行2列という意味
String line;
BufferedReader reader
= new BufferedReader(new InputStreamReader(System.in));
try {
System.out.println("a11=");
// 代入する成分を表示
line = reader.readLine();
a[0][0]= Double.parseDouble(line);
// この後にプログラムを書く
// for文を使うとかなりすっきりする(sample1参照)
} catch (IOException e) {
System.out.println(e);
} catch (NumberFormatException e) {
System.out.println("値が正しくありません");
}
}
}
ヒント (2)
if (det(A) = = 0.0) { // det(A)が0階中で分岐
System.out.println("逆行列は存在しません");
} else {
// この後に逆行列の成分を計算するプログラムを書く
}
2次元配列の定義と領域の確保
●
宣言には2つの形式(どちらでもよい)
int [][] a; (int a [][]) // 配列aの宣言
a=new int[2][3];
// 領域の確保(3行2列)
double [][] b=new double[5][2]
// 宣言と領域確保を同時に行うことも出来る
●
int [][] a = {{58, 19}, {34,73}, {9,29}}
// { {a[0][0], a[0][1]}, {a[1][0],a[1][1]}, {a[2][0],a[2][1]} }