線形変換と基底
行列が空間をどう歪めるか──基底ベクトルの行き先がすべてを決める
- 1
- 線形変換とは「原点を動かさず、直線を直線のまま保つ」写像であり、2次元では 2×2 行列 1つで完全に表現できる
- 2
- 変換の結果は、基底ベクトル と がそれぞれどこへ移るかだけで決まる。行列の列ベクトルがまさにその行き先である
- 3
- 3DCGのモデル変換行列(回転・拡大・せん断)やニューラルネットワークの重み行列は、いずれも「入力空間を出力空間へ線形に写す」という同じ数学的操作である
なぜこれを学ぶのか? — 現実社会とテクノロジーでの価値
なぜ生まれたのか?
線形変換とは「原点を動かさず、直線を直線のまま保つ」写像であり、2次元では 2×2 行列 1つで完全に表現できる
身につく武器・思考力
変換の結果は、基底ベクトル $\mathbf{e}_1=(1,0)$ と $\mathbf{e}_2=(0,1)$ がそれぞれどこへ移るかだけで決まる。行列の列ベクトルがまさにその行き先である
実社会・ITでの活躍現場
- •3DCGのモデル変換行列とニューラルネットワークの全結合層
- •ITシステム・アルゴリズム実装における論理設計
- •データ分析やシミュレーションにおける数理モデリング
Layer 1 — 直感・シミュレーター
行列 の4つの成分をスライダーで動かしてみよう。グリッド線と基底ベクトル(赤・青の矢印)がリアルタイムに変形し、単位正方形がどんな平行四辺形に潰れたり伸びたりするかが一目でわかる。ドラッグ可能な点を動かせば、変換前の位置と変換後の位置が同時に表示される。
↑ 赤い矢印は e1=(1,0) の行き先、緑の矢印は e2=(0,1) の行き先(=行列の列ベクトル)。青い点をドラッグすると、対応する変換後の点(オレンジ)が連動して動く。グリッド線が平行四辺形に歪む様子から、線形変換が空間全体をどう写すかが分かる。
行列 による線形変換は、平面上の点に対してどのような操作か?
Layer 2 — 定義・受験・証明
定義
写像 が「線形」であるとは、任意のベクトル とスカラー について次の2条件を満たすことをいう。
この性質から、線形変換は原点を固定し、直線を直線(または原点)に、平行な直線を平行な直線に写す。2次元における任意の線形変換は、基底 の行き先 を列に並べた行列 を用いて と一意に表現できる。
公式・数理モデル
証明・導出
任意の行列表現の一意性の証明: 平面上の任意のベクトル は基底を用いて と一意に分解できる。 が線形であるという性質(加法性・斉次性)をそのまま適用すると、
ここで 、 とおけば、
つまり基底ベクトルの行き先を列に並べた行列 が、変換全体を完全に決定する。逆に、任意の 行列は上記の形で線形写像を定めるため、「線形変換 ⟺ 行列」の対応は一対一である。また、変換後の単位正方形(面積1)の面積は に等しく、 のときは向き(表裏)が反転する。
押さえておきたいポイント
- 基底ベクトルの行き先(行列の列)だけを覚えれば、空間全体の変換が完全に再現できる
- 行列式 は、変換によって面積が何倍になるかを表す拡大率(符号は向きの反転を示す)
- のとき、変換は2次元平面を1次元の直線(またはさらに0次元の原点)に潰す退化変換になる
- 2つの線形変換 を連続して適用することは、行列の積 を1回適用することと完全に等価である(合成 = 積)
本トピックの内容・数理モデルは、文部科学省学習指導要領(算数・数学・情報)および国際標準カリキュラムに準拠し、エンジニアリング現場の実装事例と照らし合わせてMath World Lab編集部により検証・作成されています。
Layer 3 — 工学応用・現場実装
3DCGのモデル変換行列とニューラルネットワークの全結合層
3DCGでは物体の回転・拡大縮小・せん断を2×2(や3×3、4×4)の行列として表現し、頂点座標に掛けることで描画位置を決定する。ニューラルネットワークの全結合層もまた、入力ベクトルを重み行列で線形変換してから活性化関数を通す、という同じ「基底の行き先を指定する」操作である。
1type Vec2 = { x: number; y: number };2type Mat2 = { a: number; b: number; c: number; d: number }; // [[a,b],[c,d]]34// 線形変換の適用: v' = A v5function applyLinearTransform(m: Mat2, v: Vec2): Vec2 {6 return {7 x: m.a * v.x + m.b * v.y,8 y: m.c * v.x + m.d * v.y,9 };10}1112// 回転行列(3DCGのモデル回転に相当)13function rotationMatrix(thetaRad: number): Mat2 {14 return {15 a: Math.cos(thetaRad), b: -Math.sin(thetaRad),16 c: Math.sin(thetaRad), d: Math.cos(thetaRad),17 };18}1920// 拡大縮小行列(スケーリング)21function scaleMatrix(sx: number, sy: number): Mat2 {22 return { a: sx, b: 0, c: 0, d: sy };23}2425// 行列の合成(連続変換 = 行列の積)26function multiplyMat2(m1: Mat2, m2: Mat2): Mat2 {27 return {28 a: m1.a * m2.a + m1.b * m2.c,29 b: m1.a * m2.b + m1.b * m2.d,30 c: m1.c * m2.a + m1.d * m2.c,31 d: m1.c * m2.b + m1.d * m2.d,32 };33}3435// ニューラルネットワークの全結合層(重み行列 = 線形変換)36function denseLayer(weights: number[][], input: number[]): number[] {37 return weights.map((row) =>38 row.reduce((sum, w, i) => sum + w * input[i], 0)39 );40}4142// 例: 45度回転してから2倍に拡大43const rotate45 = rotationMatrix(Math.PI / 4);44const scale2x = scaleMatrix(2, 2);45const combined = multiplyMat2(scale2x, rotate45);46console.log(applyLinearTransform(combined, { x: 1, y: 0 }));
次に学ぶならコレ!おすすめトピック
この単元と深い繋がりを持つ、あわせて学ぶと理解が深まるおすすめ単元