1. 行列とは
行列は、数字を表形式(縦と横に並べた形)で並べたものです。普段、数式や計算をする時に使う「数」を、便利に管理できる方法として行列があります。行列は、特に変換や連立方程式の解を扱うときに非常に役立ちます。
行列の使い道:
-
変換:物体や点を、回転させたり、拡大・縮小したり、移動させたりするために使われます。たとえば、2Dや3Dの座標を回転させたり、拡大したり、平行移動する時に行列が活躍します。
-
連立方程式の解:複数の方程式を同時に解くために行列を使うことができます。これによって、複雑な計算も簡単に解けるようになります。
行列の形:
行列は、数字を行(横)と列(縦)に並べた形です。例えば、次のような形です:
A = [ a b ]
[ c d ]
これは「2x2行列」と呼ばれるもので、2行(横の列)と2列(縦の行)が並んでいます。それぞれの位置に数字が入っています。これを「行列の要素」と呼びます。
- a, b, c, d は行列の要素です。
- 最初の数字(行列の左上)から順番に、行(横の列)と列(縦の行)がどこにあるかを表しています。
行列のサイズ:
-
行列は「行数 x 列数」でその大きさが決まります。
-
例えば、2x2行列は「2行2列」の行列です。
- 例:2行2列(2x2) →
[ a b ]と[ c d ] - 例:3行3列(3x3) →
[ a b c ]と[ d e f ]と[ g h i ]
- 例:2行2列(2x2) →
行列の要素は、特定の規則に従って計算や変換に使われます。
2. 行列の加法とスカラー倍
1. 行列の加法
行列の加法は、同じサイズの行列同士でのみ行うことができます。加算方法はとてもシンプルで、対応する位置にある要素同士を加算します。
例えば、2つの行列が次のようになっているとします:
A = [ 1 2 ]
[ 3 4 ]
B = [ 5 6 ]
[ 7 8 ]
行列Aと行列Bを加算する場合、それぞれ対応する要素を足し算します:
- (1行1列の要素) 1 + 5 = 6
- (1行2列の要素) 2 + 6 = 8
- (2行1列の要素) 3 + 7 = 10
- (2行2列の要素) 4 + 8 = 12
これを計算すると、結果は次のような行列になります:
A + B = [ 6 8 ]
[ 10 12 ]
2. スカラー倍
スカラー倍とは、行列全体に対して一つの数(スカラー)を掛け算する操作です。スカラー倍をすると、行列のすべての要素がその数で掛け算されます。
例えば、行列Aに2を掛けると、次のようになります:
A = [ 1 2 ]
[ 3 4 ]
スカラー倍(2倍)をすると:
A * 2 = [ 1*2 2*2 ]
[ 3*2 4*2 ]
= [ 2 4 ]
[ 6 8 ]
これにより、行列全体がスカラー(2)で倍されました。
コード例
ここでは、JavaScriptを使って行列の加法とスカラー倍を実際に計算してみます。
let A = [[1, 2], [3, 4]];
let B = [[5, 6], [7, 8]];
// 行列の加法
let add = A.map((row, i) => row.map((val, j) => val + B[i][j]));
console.log("行列の加法:", add);
// 行列のスカラー倍
let scalarMultiply = A.map(row => row.map(val => val * 2));
console.log("スカラー倍:", scalarMultiply);
出力例:
行列の加法: [[6, 8], [10, 12]]
スカラー倍: [[2, 4], [6, 8]]
解説:
A.map((row, i) => row.map((val, j) => val + B[i][j]))で、行列Aと行列Bの対応する要素を加算しています。A.map(row => row.map(val => val * 2))で、行列Aの各要素に2を掛けるスカラー倍を行っています。
3. 行列の乗算
行列の乗算は、2つの行列を掛け算する方法です。しかし、単純に対応する位置の要素同士を掛け算するわけではありません。代わりに、各行のベクトルと列のベクトルの内積を取ることで計算します。
行列の乗算の基本的なルール:
例えば、2つの行列AとBが次のようになっているとします:
A = [ a b ] B = [ e f ]
[ c d ] [ g h ]
行列AとBの乗算結果は、次のように計算されます:
A * B = [ ae + bg af + bh ]
[ ce + dg cf + dh ]
ここでは、行列Aの行と行列Bの列の内積を計算しています。
- (1行1列の要素):
ae + bg(行Aの1行目と列Bの1列目の内積) - (1行2列の要素):
af + bh(行Aの1行目と列Bの2列目の内積) - (2行1列の要素):
ce + dg(行Aの2行目と列Bの1列目の内積) - (2行2列の要素):
cf + dh(行Aの2行目と列Bの2列目の内積)
行列の乗算の実際の計算方法:
- 行列の乗算は、行列Aの行と行列Bの列を掛け合わせた結果を新しい行列に入れていく形になります。
コード例
let A = [[1, 2], [3, 4]];
let B = [[5, 6], [7, 8]];
// 行列の乗算
let multiply = A.map((row, i) =>
B[0].map((_, j) => row.reduce((sum, el, k) => sum + el * B[k][j], 0))
);
console.log("行列の乗算:", multiply);
解説:
A.map((row, i):行列Aの各行を取得します。B[0].map((_, j):行列Bの各列を取得します。B[0]は行列Bの1行目(列を取得するために必要)。row.reduce((sum, el, k):行Aの各要素を掛け合わせ、列Bの対応する要素と内積を計算しています。sum + el * B[k][j]:各要素を掛け算して合計を求めます。
出力例:
行列の乗算: [[19, 22], [43, 50]]
解説:
-
行列Aと行列Bを掛け算した結果、次の行列が得られます:
A * B = [ 19 22 ] [ 43 50 ]
4. 逆行列
逆行列とは、ある行列と掛け合わせたときに単位行列になる行列です。単位行列は、対角線上に1が並び、それ以外の要素がすべて0である特別な行列です。
逆行列の存在条件:
- 逆行列が存在するためには、その行列の行列式が0でない必要があります。
- 行列式が0の場合、逆行列は存在しません。
逆行列の計算方法(2x2行列の場合)
2x2の行列に対して逆行列を計算する方法を説明します。次のような2x2行列があるとします:
A = [ a b ]
[ c d ]
この行列の逆行列 ( A^{-1} ) は、次の式で求められます:
A^-1 = 1 / (ad - bc) * [ d -b ]
[ -c a ]
ここで、ad - bc は行列Aの行列式です。行列式が0でない場合にのみ逆行列が存在します。
- 行列式(determinant)は、
ad - bcで計算されます。 - 行列式が0でない場合、逆行列を上記の式で計算できます。
コード例
JavaScriptを使って、2x2行列の逆行列を計算する方法を見てみましょう。
function inverse2x2(matrix) {
const [a, b, c, d] = [matrix[0][0], matrix[0][1], matrix[1][0], matrix[1][1]];
const determinant = a * d - b * c; // 行列式の計算
if (determinant === 0) {
return null; // 逆行列が存在しない場合
}
// 逆行列の計算
const inv = [
[d / determinant, -b / determinant],
[-c / determinant, a / determinant]
];
return inv;
}
let A = [[4, 7], [2, 6]]; // 例:2x2行列
let invA = inverse2x2(A); // 逆行列を計算
console.log("逆行列:", invA);
出力例:
逆行列: [[0.6, -0.7], [-0.2, 0.4]]
解説:
- 行列 $$ A = \left[ \begin{matrix} 4 & 7 \\ 2 & 6 \end{matrix} \right] $$の逆行列を計算しています。
- 行列式は
ad - bcで計算され、determinant = 4 * 6 - 7 * 2 = 24 - 14 = 10です。 - 逆行列を求める式に従って計算した結果、逆行列は
[[0.6, -0.7], [-0.2, 0.4]]になります。
逆行列の重要性:
逆行列は、線形代数において非常に重要な役割を果たします。特に以下のような場面で使用されます:
- 連立方程式の解法:行列を使って、複数の方程式を同時に解くことができます。
- グラフィックス:3D変換(回転や平行移動)などの行列演算に逆行列を使うことで、変換を逆転させることができます。
最後に
行列演算は、3Dグラフィックスや機械学習、データ処理など、非常に多くの分野で活用されています。行列を使うことで、複雑な計算を効率よく行い、システム全体をうまく管理することが可能になります。
実際のゲーム開発や物理シミュレーション、さらにはAIのアルゴリズムにおいても、行列を使った演算が不可欠です。ゲーム内の変換や物理的な挙動、機械学習モデルのトレーニングなど、行列はその基盤となる重要な要素です。
次回の第3回では、線形方程式と行列の応用について学んでいきます。これでさらに実践的なスキルを身につけていきましょう!
関連リンク
- 行列式は
💬 コメント