情報科学概論
2001.6.5の復習課題に関するヒント
(2001.6.25更新)
2行2列の行列の積を求めるスクリプトを作成せよ。なお、スクリプトは行列の次元が上がった場合にも対応できることが望ましいので、きちんと計算を抽象化して実行すること。ここで言う「抽象化」とは、積を求める式は一つだけ、ということを意味する。また、行列の例として以下のようなものをあらかじめ提示しておく。別にその数値にこだわる必要はないので、自分で別の値を持つ行列を試すのも可能であるが、はじめにまずこの行列により計算してみること。
c = []
のように空の配列を用意すればよいが、多重配列なので、
c = [[], []]
とする必要がある。
c[i][j] = ‥
というような計算をループの中で行うことになる。
このときにどのようなijを使うとc[i][j]が表現できるかを考える。以下は簡単化
のため、通常の行列表記により説明する。まず、c行列の要素cijは以下のように表現
される。
c11=a11b11+a12b21
この順番のままではijの規則性がわかりづらいので二つの式について順番を変える
と、
c11=a11b11+a12b21
そうすると一番始めにあるaの添え字は明らかな特徴を持っているし、それとかけ
あわせてあるbの添え字も規則性が明確である。問題は2項目の積であり、ここには
cにおけるjが1ならば2、2ならば1になるような規則性を持った添え字が現れる。そ
の表現方法を見いださなければならない。
0 -> 1 -> 2 -> 0
というようの限られた数の中で順番に回っていくような数である。この実現は単純には別の配列、
junkan = [1, 2, 0]
を用意することによっても実現できるが、剰余(ある数で割ったあまり)というメ
ソッドでも実現できるし、その方がスマートになる。剰余メソッドの説明は教科書
p.80にある。具体的には添え字は0か1かのどちらかなので、2で割った余りで対応
できそうである。(2行2列の場合の特殊なケースとしては剰余を使わないもっと簡
単な式も可能である。)
課題
ヒント
c12=a11b12+a12b22
c21=a21b11+a22b21
c22=a21b12+a22b22
c12=a12b22+a11b12
c21=a21b11+a22b21
c22=a22b22+a21b12
課題ページに戻る