Chapter 6
行列と 1 次変換・ParametricPlot

ベクトルや行列がリスト（のリスト）の形で表現されることは 3 章でみた．ここではリストのベクトル・行列としての演算をまとめておく．
また，組込み関数 ParametricPlot と ParametricPlot3D を駆使して，行列が定める線形写像の作用を可視化する方法を紹介しよう．

6.1

行列とベクトルの演算[1] ベクトルを定義*1 ：In[1]:=

v1 = {x, y}; v2 = {z, w};[2] 行列を定義：
In[2]:=

m1 = {{a, b}, {c, d}};m2 = {{3, 2}, {1, 4}};[3] 行列として表示（3 章 3.3 節）：
In[3]:=

m1 //MatrixForm

Out[3]//MatrixForm=Ja bN
c d[4] ベクトルの内積：
In[4]:=

Out[4]=*1v1.v2wy+xz

v1//MatrixForm とすると，縦ベクトル`x´y（2 行 1 列の行列）であることがわかる．

666行列と 1 次変換・ParametricPlot[5] ベクトルと行列の積：
In[5]:=Out[5]=

m1.v1
8a x + b y, c x + d y<[6] 行列と行列の積（pr とおく）：
In[6]:=

Out[6]=

pr = m1.m2
883 a + b, 2 a + 4 b<, 83 c + d, 2 c + 4 d<<[7] 行列形で表現：
In[7]:=

pr //MatrixForm

Out[7]//MatrixForm=J

3a+b 2a+4bN
3c+d 2c+4d[8] MatrixPower で行列のべき乗 (power) を計算できる．たとえば m2 の 7 乗：In[8]:=MatrixPower[m2, 7] //MatrixForm

Out[8]//MatrixForm=J

26 127 51 998
N
25 999 52 126[9] Transpose で m1 の転置行列 (transposed matrix) を求める：
In[9]:=

Transpose[m1] //MatrixForm

Out[9]//MatrixForm=Ja cNb d[10] Inverse で逆行列 (inverse matrix) を求める：
In[10]:=

Inverse[m1] //MatrixForm

Out[10]//MatrixForm=d-b c+a dc- -b c+adb- -b c+ada-b c+a d[11] Det で行列式 (determinant) を求める：
In[11]:=

Out[11]=Det[m1]-b c + a d[12] Tr でトレース (trace) を求める：
In[12]:=

Tr[m1]

Out[12]=a+d[13] 2 次の単位行列 (identity matrix) を i2 とおく：
In[13]:=

i2 = IdentityMatrix[2]6.2

固有値・固有ベクトル67881, 0<, 80, 1<<

Out[13]=

同様に n 次の単位行列は IdentityMatrix[n] で得られる．
問題 6.1) [6][11][12][13] を用いて，任意の 2 次正方行列( (ケーリー・ハミルトンの等式)

M =ab

は等式 M 2 − tr(M )M + det(M )I2 = O をみたすことを示せ．ただc d
し I2 は 2 次の単位行列，O はゼロ行列とする．
【解答】 M =acbd!には [2] の m1 を，I2 には [13] の i2 を流用しよう．M 2 − tr(M )M +det(M )I2 に対応する式を入力し，Simplify を施してみる：
In[ ]:=

Out[ ]=

Simplify[m1.m1 - Tr[m1]*m1 + Det[m1]*i2]
880, 0<, 80, 0<<

これはゼロ行列 O である．

6.2¨

固有値・固有ベクトルn 次正方行列 M に対し，複素数 λ と n 次元ベクトル v が M v = λv をみたすと
き，λ を M の固有値 (eigenvalue)，v を（λ に関する）固有ベクトル (eigenvector)とよぶ．Mathematica にこれらを計算させるには，組込み関数 Eigensystem を用いるとよい．

()
3 2[14] [2] で定義した行列を m とおく：
1 4
In[14]:=

m = m2;[15] Eigensystem で 固有値・固有ベクトルを求める（es とおく）：
In[15]:=

Out[15]=es = Eigensystem[m]885, 2<, 881, 1<, 8-2, 1<<<[16] 一見わかりづらいが，MatrixForm でみると，対応する固有値・固有ベクトルが縦に並んでいることがわかる：
In[16]:=

es // MatrixForm

Out[16]//MatrixForm=J

52N
81, 1< 8-2, 1<

6.4

3 次元の 1 次変換と ParametricPlot3D7342

Out[ ]=-42-2

4-2-4¨問題 6.4 (単位円板の像) 関数 disk(r, t) = (r cos t, r sin t) （ただし 0 ≤ r ≤ 1, 0 ≤t ≤ 2π ）を定義し，単位円板とその f による像を ParametricPlot で図示せよ．
【解答】 [30][31][32] を参考にして，次のように入力する：
In[ ]:=

disk[r_, t_] = {r Cos[t], r Sin[t]};In[ ]:=

ParametricPlot[{disk[r, t], f[disk[r, t]]},{r, 0, 1}, {t, 0, 2 Pi}]
42Out[ ]=0-2-4-3

6.4-2-1

0

1

2

3

3 次元の 1 次変換と ParametricPlot3Dxyz 空間 R3 に対し，1 次変換 g : R3 → R3 を    x
1 0 2xx + 2zg y  = 0 2 0 y  =  2y z
2 0 1z2x + z¨746行列と 1 次変換・ParametricPlotで定義する．今度は組込み関数 ParametricPlot3D を用いてその作用を可視化しよう．考え方は平面のときとまったく同じである．
[33] 行列を定義：
In[33]:=

mm = {{1, 0, 2}, {0, 2, 0}, {2, 0, 1}};mm // MatrixForm
1 0 2Out[33]//MatrixForm=
0 2 02 0 1[34] 図示とは直接関係ないが，固有値・ベクトルを確認しておく：

Eigensystem[mm] // MatrixForm
32-1Out[34]//MatrixForm=JN
81, 0, 1< 80, 1, 0< 8-1, 0, 1<
In[34]:=[35] 1 次変換を定義：
In[35]:=

Out[35]=g[{x_, y_, z_}] = mm.{x, y, z}8x + 2 z, 2 y, 2 x + z<[36] 曲線 {(cos t,sin t, t/10) | 0 ≤ t ≤ 10π} を考えよう．これは螺旋 (spiral もしくは helix) の一部である．これと g による像を図示してみよう．まず螺旋を与える空間ベクトル値関数を定義：
In[36]:=

spi[t_] = {Cos[t], Sin[t], t/10};[37] ParametricPlot3D でその 3 次元グラフを描く：
In[37]:=

ParametricPlot3D[spi[t], {t, 0, 10 Pi}]
-1.0
1.0 -0.5
0.5
0.0
0.5
0.0
1.0-0.5-1.0
3

Out[37]=210

出力部分をマウスでドラッグすると回転などの操作ができる（4 章 4.5 節）．
[38] g による像：
In[38]:=

ParametricPlot3D[g[spi[t]], {t, 0, 10 Pi}]

6.4

3 次元の 1 次変換と ParametricPlot3D0-21752 024-1642Out[38]=0[39] 同一座標内で比較する：
In[39]:=

ParametricPlot3D[{spi[t], g[spi[t]]}, {t, 0, 10 Pi}]-2 -1 01 242Out[39]=00246[40] ParametricPlot3D も 2 つのパラメーターに対応している．単位球面（sphere）{(cos s sin t, sin s sin t, cos t) | 0 ≤ s ≤ 2π, 0 ≤ t ≤ π}とその像を描かせてみよう（いわば問題 6.4 の 3 次元版である）：
In[40]:=

sph[s_, t_] = {Cos[s] Sin[t], Sin[s] Sin[t], Cos[t]};ParametricPlot3D[ {sph[s, t], g[sph[s, t]]},{s, 0, 2 Pi}, {t, 0, Pi},PlotStyle ->{Opacity[0.9, Green], Opacity[0.4, Yellow]}]76

6

行列と 1 次変換・ParametricPlot

Out[40]=オ プ シ ョ ン で は ，2 つ の 曲 面 sph[s, t], g[sph[s, t]] そ れ ぞ れ に 別 々 のPlotStyle を指定している．Opacity とは不透明度のことで，sph[s, t] は不透明
度 0.9 で緑色，g[sph[s, t]] は不透明度 0.4 で黄色に設定した．
問題 6.5 (トーラス) 以下で定義されるトーラス (torus，円環面) について，そのグラフと g による像のグラフを描け．また，それらを同一空間に描画せよ．

{((3 + cos t) cos s, (3 + cos t) sin s, sin t) | 0 ≤ s ≤ 2π, 0 ≤ t ≤ 2π}【解答】 トーラスのパラメーター表示をたとえば

tor[s_, t_] = { Cos[s] (3 + Cos[t]),Sin[s] (3 + Cos[t]),Sin[t] }のように定義し t の変域を {t, 0, 2 Pi} とすれば，あとは [40] と同じである．右の絵は透明度などのオプションを指定せずに描いた．

¨

6.5

研究：1 次変換による「向きの変化」を表現する

1 次変換には「向きを保つ」ものと「向きを変える」ものがある．それは 1 次変換を定義する行列の行列式の値が正か負かに対応している．
たとえば上で定義した 1 次変換 g の場合，mm で Det[mm] を計算すると −6 となり「向きを変える」変換であることがわかる．一体どういうことなのか，その様子を観察してみよう．
[41] xy, yz, zx 平面に対応する関数を定義：
In[41]:=

xy[s_, t_] = {s, t, 0};

6.5

研究：1 次変換による「向きの変化」を表現する

In[41]:=

yz[s_, t_] = {0, s, t};

In[41]:=

zx[s_, t_] = {t, 0, s};77[42] xy, yz, zx 平面を部分的に切り取った 3 枚の板 (panels) を描く：
In[42]:=

pan = ParametricPlot3D[{xy[s, t], yz[s, t], zx[s, t]},{s, -1, 3}, {t, -1, 3},
PlotStyle -> {Red, Green, Blue}]Out[42]=s, t の範囲を原点対称にしないのがポイントで，これにより x, y, z 軸の「正の方向」が示唆される．
[43] 板の g による像を描く：
In[43]:=

pan2 = ParametricPlot3D[{g[xy[s, t]], g[yz[s, t]], g[zx[s, t]]},{s, -1, 3}, {t, -1, 3},
PlotStyle -> {Red, Green, Blue}]Out[43]=

この結果と [42] を見比べると，3 枚の板の位置関係が変化していることがわかる．gは板たちをただ斜めに引き伸ばすのではなく，いったん鏡像をとってから引き伸ばし78

6行列と 1 次変換・ParametricPlotているのである．「向きを変える・保つ」という属性はこの鏡像をとる操作が入るか入らないかに対応するのである．
[44] 両方の絵をまとめて表示：
In[44]:=

Show[pan2, pan, Boxed -> False, Axes -> False]Out[44]=Boxed -> False ，Axes -> False はそれぞれ枠線と軸を消すためのオプションである．ちなみに Show[pan, pan2, ...] という順序にすると，描画範囲が前者 panに調整されて，pan2 が部分的にしか描画されない．

6.6

研究

(1) ド キ ュ メ ン ト セ ン タ ー で 行 列 の 階 数 (rank) を 計 算 す る MatrixRank，行列 の 指 数 関 数 を 計 算 す る MatrixExp，行 列 の ジ ョ ル ダ ン 標 準 形 を 求 め る
JordanDecomposition について調べ，使い方を確認せよ．
(2) ParametricPlot3D を用いて，土星（っぽいもの）を描け．（Hint. オプショ
ン Mesh -> None を用いるとグラフの網目が消えてそれらしくなる．）(3) ParametricPlot3D を用いてメビウスの帯を描け．（Hint. 下の図をよく眺めると，円周にそって線分を回転させながら移動させた軌跡に見えるはず．）