行列の計算、それが目的ではないとき(Mathematica版)


学生向け

行列の計算をする簡単な方法を教えてください

と訊かれました。

低級言語で実装すれば数値計算の勉強になります。答えが欲しいだけなら、Mathematicaのような高級言語を使いましょう。

MathematicaでCayley‐Hamiltonの定理を確認する例(UMMでも動きます):

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

参考:行列の計算、それが目的ではないとき(Maxima版)

行列の計算、それが目的ではないとき(Mathematica版)” への2件のコメント

  1. Excel で計算するのも簡単ですね。
    和と差は1要素だけ入力してフィル。
    積は MMULT() 関数で。(MPOWER()はない)
    逆行列も MINVERSE() 関数で計算できます。
    特性方程式の係数は計算してくれませんが、行列式は MDETERM() 関数で計算できます。

  2. なるほど
    でも、Excelじゃ{{a,b},{c,d}}の行列式さえも、
    直接計算できませんからねえ
    マクロがあるので「何でもできる」とも言えますが、
    いずれにしても「簡単な方法」というわけにはいかないですよ

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です