|
3.7.6 逆行列

逆行列
簡単な の行列を入力する.
In[1]:= m = {{a, b}, {c, d}}
Out[1]= 
mの逆行列を求める.公式が生成される際に,行列式 a d - b cがゼロではないと仮定される.
In[2]:= Inverse[ m ]
Out[2]= 
逆行列ともとの行列の積を取ると単位行列が得られるはずである.
In[3]:= % . m
Out[3]= 
Togetherを使い分母を約さなければ,もとの標準形単位行列が得られない.
In[4]:= Together[ % ]
Out[4]= 
有理数からなる行列を構成しておく.
In[5]:= hb = Table[1/(i + j), {i, 4}, {j, 4}]
Out[5]= 
厳密な逆行列が求まる.
In[6]:= Inverse[hb]
Out[6]= 
もとの行列と掛け合わせると単位行列が得られる.
In[7]:= % . hb
Out[7]= 
特異行列の逆行列を求めようとすると,警告メッセージが表示され,入力したリストがそのまま返される.
In[8]:= Inverse[ {{1, 2}, {1, 2}} ]

Out[8]= 
文字成分からなる行列,および,厳密な数値成分からなる行列なら, Mathematicaで厳密に逆行列を求めることが可能である.一方,行列成分の1つでも実数近似値のときは,逆行列も近似値になる.
近似実数を持つ行列を例にする.
In[9]:= m = {{1.2, 5.7}, {4.2, 5.6}}
Out[9]= 
数値計算的な逆行列を見付ける.
In[10]:= Inverse[ % ]
Out[10]= 
答をもとの行列に掛け合わせると近似的な単位行列が得られる.非常に小さいが誤差を持っている.
In[11]:= % . m
Out[11]= 
Chopを使えば,対角から外れた微小成分を削除できる.
In[12]:= Chop[ % ]
Out[12]= 
Mathematicaで逆行列を求めるとき,行列の成分が数値であっても厳密でありさえすれば,行列が特異かどうかが必ず判明する.一方,近似数値の行列から逆行列を求めるときは,行列が特異かどうかを確実に判明させることは困難である.判明するのは,行列式がもとの行列の成分に比べて極めて小さい,というくらいである.数値行列の逆行列を取ろうとし,それが特異であるという疑いがあるときは, Mathematicaから警告が発せられる.
特異性の疑いがあるため,警告メッセージが表示される.
In[13]:= Inverse[ {{1., 2.}, {1., 2.}} ]

Out[13]= 
もとの行列で高精度の近似を使っているとき, Mathematicaはその行列の逆行列を求めるときもその精度をなるべく保とうとする.
20桁精度の成分で の行列を構成する.
In[14]:= m = N [ Table[ GCD[i, j] + 1, {i, 6}, {j, 6} ], 20 ] ;
もとの行列に逆行列を掛け合わせ,得られる積の第1行を表示する.
In[15]:= (m . Inverse[m]) [[1]]
Out[15]= 
20桁精度で のヒルベルト(Hilbert)行列を作る.ヒルベルト行列は,数値計算的に逆にするのが難しいことで有名である.
In[16]:= m = N[Table[1/(i + j - 1), {i, 6}, {j, 6}], 20] ;
求まる数値は正確である.ただし,精度は落ちる.
In[17]:= (m . Inverse[m]) [[1]]
Out[17]= 
Inverseは正方行列に対してのみ機能する. 3.7.10で関数 PseudoInverseを使った正方でない行列の逆行列の取り方を説明する.
|