• ベストアンサー

行列の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での実装は、実用面を考慮して 行列の自然数乗以外はエラーを送出する仕様にしました。 ありがとうございました。

関連するQ&A

  • n行n列の行列の2乗

    javaでn行n列の行列の2乗を求めたいのですが、どうすればよいでしょうか?3行3列の2乗はできたのですがn行n列への拡張の仕方がわかりません。

    • ベストアンサー
    • Java
  • 0の0乗は1、にしたい(続き)

    http://oshiete1.goo.ne.jp/qa4347011.html の続きです。 0の0乗の値について、不定だとか未定義だとかの意見があります。 でも、1と定義しても無矛盾だし、1以外では矛盾が生じます。 そこで、べき乗(累乗)の定義を  x^0=1  x^n=x^(n-1)×x (nは自然数) としてしまえば、0^0は当然1になります。 #負の整数乗、有理数乗、実数乗などへの拡張は、従来のような方法で行われるとします。 この定義の仕方には、問題があるのでしょうか? なお、常識的には…という話は、遠慮願います。 #Wikipediaも変わりますので。 これまでの議論で主張したこと: (1) 従来のべき乗の定義は、1から始まるので不自然。加法や乗法は0から始まる。 (2) 従来のべき乗の定義との違いは、0^0の値についてだけである。 (3) 0及び正の整数乗は、すべての実数に対して計算できる。負の整数乗は正の整数乗の逆数として計算できる。(0のべき乗以外) (4) 0^y=0という式はy<0で成立しない。それをy=0まで拡張するのは不自然。 (5) 0^0=0は、関数0^yについて、y=0で連続性が破綻しないから不適当。 (6) lim[x→0,y→0]x^yは不定であるが、0^0=1と矛盾しない。 (7) x^y形式の連続な式で、x=0、y=0の時、その値が1以外に定まる式は存在しない。 (8) 1である根拠は、0^0=0^(-0)=1/0^0。 たぶん、このどれかが成立しなければ、最初の定義は怪しくなります。 #(7)は、表現に不備がある可能性があります。

  • 複素正方行列の対数

    複素正方行列の指数関数は、実数域でのマクローリン展開を単純に拡張して xが実数のとき、   exp(x) = 1 + x + x^2/2 + x^3/6 + x^4/24 + ... より、Aが複素正方行列のとき (Eは単位行列)   exp(A) = E + A + A^2/2 + A^3/6 + A^4/24 + ... と、できることがわかりました。 一方、対数関数に関しても同様に、 xが実数のとき、   log(1+x) = x - x^2/2 + x^3/3 - x^4/4 + x^5/5 - x^6/6 + ... より、Aが複素正方行列のとき (Eは単位行列)   log(E+A) = E - A^2/2 + A^3/3 - A^4/4 + A^5/5 - A^6/6 + ... で、単純に可能かと思ったのですが違いました。 例えば、具体的に、実数正方行列  { 2, 3 }  { 4, 5 } の対数は、  { -0.304+2.195i, 1.302-1.248i }  { 1.736-1.664i, 0.997+0.947i } となりますが、前記のように単純にマクローリン展開を拡張した方法では、 実数係数の行列から複素係数が出てくることはありえないことからも、 簡単に間違っていることがわかります。 ということで、複素正方行列のマクローリン展開の方法または、 具体的な計算方法(アルゴリズム)をご存知の方がおられましたら ご教示ください。

  • 数学教えて下さい

    どなたか教えて下さい。 (1)2つ複素数a+biと2-3iの和が純虚数、積が実数となるような実数a、bを求めよ。 (2)2乗して、-5-12iとなるような複素数z=a+bi(a,bは整数)を求めよ。 よろしくお願いします。

  • C言語で

    C言語で複素行列の和と積を計算するプログラムを作りたいのですが、 よくわからないので教えてほしいです。複素数を構造体で定義して、配列を使えば いいと思うのですが・・・。 ちなみに実数の行列の和と積を求めるプログラムはわかっています。

  • 行列の二項定理を使った問題です。

    数Cの問題です。 わからなかったので、誰か教えてください。 二項定理の応用です。 (1)二次の正方行列Aが実数αに対し(A-αE)の二乗=0(零行列)を満たすとき、 任意の自然数nに対して Aのn+1乗=(n+1)αのn乗A-nαのn+1乗E が成り立つことを示せ。 ただし、Eは単位行列、0は零行列である。 (2)A=( 3 2 -2 -1)←二次の正方行列 のとき自然数nに対してAのn乗を求めよ。 ( 3 2 ) ↑ (-2 -1 ) 協力よろしくお願いします。

  • 行列のベキ乗

    最小多項式が重解をもったり、固有値が虚数になる場合などの対角化不可能な整数の行列(たとえば2×2)のベキ乗の一般項を、手計算で求める方法はあるのでしょうか? 数値によっては、ケイリーハミルトンなどで次数を下げたときに、等差数列などに帰着できれば可能かと思いますが、、、。

  • 対称行列とその対角化行列

    対称行列とその対角化行列 行列要素が複素数である行列Aが(A^T)=A(Tは転置)を満たすなら,Aは対称行列といいますか?(ネットで見る限りではA^T=Aなどという場合,行列要素は実数である場合が多いようなのですが.) 実対称行列は直交行列で対角化できて,正規行列はユニタリ行列で対角化できますが,行列要素が複素数でA^T=Aを満たすような行列はどのような行列で対角化可能なのでしょうか?普通にユニタリ行列でしょうか?それとも,要素が複素数で(U^T)U=I(単位行列)なる行列Uによってできるのでしょうか? 要素が複素数で(U^T)U=Iなる行列Uに名前はついているのでしょうか? よろしくおねがいします.

  • Mathematicaでの行列計算

    MathematicaでN×Nの複素行列   ┌               ┐   | a_11+i*b_11 … a_1N+i*b_1N | A= |                |   | a_N1+i*b_N1 … a_NN+i*b_NN |   └               ┘ などでa_ij、b_ijを実数として Conjugate[A]などを計算するためにはどうしたらよいでしょうか? Assumptions->{Im[a_11]==0,Im[a_12]==0,Im[a_13]・・・・・}のように単純に一つ一つ定義していくのではなく、a_ij、b_ijをいっぺんに定義する方法があればお願いします。

  • 現在線形代数を勉強しているものです。

    現在線形代数を勉強しているものです。 わからないことが出てきましたので質問させていただきました。 xを変数とするベクトル方程式Ax=bについて、 Aはm*nの複素行列、xはn次元、bはm次元複素ベクトルとすると この方程式が解をもつためのAが満たすべき必要十分条件は何でしょうか。 Aやbが実数行列や実数ベクトルであれば rankA = rank(A,b) が必要十分条件ですがこれは複素数の場合でも成立することなのでしょうか。 よろしくおねがいします。