学生向け
行列の計算をする簡単な方法を教えてください
と訊かれました。
低級言語で実装すれば数値計算の勉強になります。答えが欲しいだけなら、Mathematicaのような高級言語を使いましょう。
MathematicaでCayley‐Hamiltonの定理を確認する例:
In[1]:= n = 5; In[2]:= m = Table[Table[1 + n - Max[i, j], {j, 1, n}], {i, 1, n}]; In[3]:= m // MatrixForm Out[3]//MatrixForm= 5 4 3 2 1 4 4 3 2 1 3 3 3 2 1 2 2 2 2 1 1 1 1 1 1 In[4]:= f = Det[m - x IdentityMatrix@Length@m] (* or f = CharacteristicPolynomial[m, x] *) 2 3 4 5 Out[4]= 1 - 9 x + 28 x - 35 x + 15 x - x In[5]:= Sum[Coefficient[f, x, i] MatrixPower[m, i], {i, 0, Exponent[f, x]}] // MatrixForm (* or Replace[f, {c_. x^(n_.) :> c MatrixPower[m, n], ex_ :> ex IdentityMatrix@Length@m}, {1}] // MatrixForm *) Out[5]//MatrixForm= 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Excel で計算するのも簡単ですね。
和と差は1要素だけ入力してフィル。
積は MMULT() 関数で。(MPOWER()はない)
逆行列も MINVERSE() 関数で計算できます。
特性方程式の係数は計算してくれませんが、行列式は MDETERM() 関数で計算できます。
なるほど
でも、Excelじゃ{{a,b},{c,d}}の行列式さえも、
直接計算できませんからねえ
マクロがあるので「何でもできる」とも言えますが、
いずれにしても「簡単な方法」というわけにはいかないですよ