• ベストアンサー

行列のn乗について

javaで複素行列のアルゴリズムを実装していて疑問に思ったのですが、 行列のn乗に関して、 (1) n = 0 (2) n は負の整数 (3) n は実数 (4) n は複素数 のそれぞれの場合に定義されていますでしょうか? 定義されている場合には、その概略を示していただくか 参考になるサイトをご紹介いただければ非常に幸いです。 以上、よろしくお願い申し上げます。

質問者が選んだベストアンサー

  • ベストアンサー
  • masudaya
  • ベストアンサー率47% (250/524)
回答No.1

回答が無いようですのでとりあえず.. 正則行列であれば,とりあえず,実数までは定義可能です.Aが対象の行列で,これには逆行列が存在してA'が逆行列とします. (1) A^0=A*A'=E:単位行列 (2)A^(-m)=(A')^m (3) これを有理数に展開する.そのためには行列の乗式に対して結合法則や分配法則が必要となります. (*1)A^(n(m))=A^nm (*2)A^(n(m+k))=A^(nm+nk) こうすると,A^(1/n)は(B)^n=Aとなる行列Bとなります.これから,A^(m/n)は結合法則(*1)からもとまります.これで,有理数に対してA^αを定義できました.これを実数にするには,有理数から実数を構成する方法(デテキントの切断やカントールの区間収縮法など)を用いることで,A^αのαを実数にまで拡張できます. (4)については私の知識では分かりません.

HarukaV49
質問者

お礼

とりあえずjavaでの実装は、実用面を考慮して 行列の自然数乗以外はエラーを送出する仕様にしました。 ありがとうございました。

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

まあ, 全部定義できないことはないんですが.... 意味があるかどうかは別. 定義の方法は普通の数に対するものとほぼ同じ. まず, 普通の数のときを思い出すと 指数関数 exp x, 対数関数 log x を使って x^y = exp (y * log x) と定義したわけですが, 同様に行列でも 「指数関数」 exp A, 「対数関数」 log A を使って A^x = exp (x * log A) と定義します. ここで, 指数関数や対数関数は普通の数に対してマクローリン展開 exp x = 1 + x/1! + x^2/2! + ..., log (1 + x) = x - x^2/2 + x^3/3 - ... と定義できることを利用し, これをそのまま行列にも拡張します. つまり行列 A に対し exp A = E + A/1! + A^2/2! + ..., log (E + A) = A - A^2/2 + A^3/3 - ... です. もちろん普通の数のときと同様, log が収束するかどうかは別途考える必要があります. このままだと計算がすごく大変なんだけど, スペクトル分解ってのが使えるかもしれません. ちょっと書いたんだけどなんか結果が怪しいので消しちゃいました. 指数関数についてはスペクトル分解で簡単に計算できそうなんだけど, 対数関数が怪しかった. ちなみに行列の指数関数は, 制御の方では普通に出てくる概念です. まあ, あっちだと exp (At) のような形で時間 t を含むんですが.

HarukaV49
質問者

お礼

指数行列と行列のべき乗がつながっていることに、 ご指摘頂まで気づきませんでした。 とりあえずjavaでの実装は、実用面を考慮して 行列の自然数乗以外はエラーを送出する仕様にしました。 ありがとうございました。