• 締切済み

行列の連立方程式 (mathematica)

mathematica4.1を使用して,行列で表した連立方程式を計算したいと思っています.例えば A= a11 a12 a13 a21 a22 a23 a31 a32 a33 B=b11 b12 b13 b21 b22 b23 b31 b32 b33 C,Dも同様に定義して A .x+B .y=1 C .x+D .y=0 x=x1 y=y1 x2 y2 x3 y3 のような連立方程式のx,yについて解きたいのですが,どのようにmathematicaで表現すればよいかが分かりません. どなたか教えてください.お願いします. 当然ではありますが,A,B,C,Dはすべて既知としています.

みんなの回答

回答No.5

Mathematicaでの回答例 (* 以下の様に定義します *) (* 例えば、Aの(i,j)成分は、a[i,j]となります *) A = Array[a, {3, 3}]; B = Array[b, {3, 3}]; CC = Array[c, {3, 3}]; DD = Array[d, {3, 3}]; X = Array[x, {3}]; Y = Array[y, {3}]; (* このまま、 Solve[{A.X+B.Y={1,1,1},C.X+D.Y=={0,0,0}},Join[X,Y]] を実行したいところですが、結構時間がかかるようです。*) (* {{A,B},{C,D}}を結合した大きな行列を作ります。*) M = ArrayFlatten[{{A, B}, {CC, DD}}]; (* M.{x[1],x[2],x[3],y[1],y[2],y[3]}={1,1,1,0,0,0} を解けばよいのですが、これも時間がかかります *) (*そこで、LinearSolveを使います。これは短時間で処理が済みますが、出力 が膨大になるようです *) (* このような計算のとき、Det[M] !=0 という前提で、計算されるので、ご注意ください *) LinearSolve[M][{1,1,1,0,0,0}]

  • 178-tall
  • ベストアンサー率43% (762/1732)
回答No.4

Mathematica の使用経験はありませんが、たとえば、 (Linear Algebra パッケージ?) MatrixManipulation パッケージに BlockMatrix 関数があるようです。    

参考URL:
http://mathematica.stackexchange.com/questions/761/how-to-enter-matrices-in-block-matrix-format
krclight417
質問者

お礼

遅くなりまして申し訳ありません.回答有り難うございます. しかし,mathematicaの経験が浅いため,このBlockMatrix関数をどう適用すればよいのか… 勉強してみます.

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.3

行列を並べて作った行列を「ブロック行列」とか「区分行列」とか言うが、 ブロック行列の逆行列について、↓のような資料があった。 http://ja.wikipedia.org/wiki/%E5%8C%BA%E5%88%86%E8%A1%8C%E5%88%97#2_.C3.97_2_.E3.81.AE.E5.8C.BA.E5.88.86.E8.A1.8C.E5.88.97.E3.81.AE.E9.80.86.E8.A1.8C.E5.88.97 あるいは、スカラーの 2 元 2 連立方程式と同じように、 C x + D y = 0 を y = … の形に解いて A x + B y = 1 へ代入する などでもよいのかもしれない。 A, B, C, D の中にひとつでも正則な行列があれば、このやり方がスムースにいく。 たとえ四つとも非正則であっても、連立一次方程式の不能の場合、不定の場合を処理する 方法を知っていれば、det D = 0 の時に C x + D y = 0 を y = … と扱うことが できると思う。解の一意性を判定して不定解を正しく扱う部分を、プログラムで自動的に やらせるには、ゴタゴタした場合分けをコーディングしなければならないだろうけど。 # やっぱり、6 連立方程式に展開してしまったほうが # 楽なように見えるなあ。

krclight417
質問者

お礼

ありがとうございました.この方法で考えてみます. ただ,今回は6連立でしたが,今後はNxNの場合に拡張したかったので 展開する手法は取りたくなかったのです.

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.2

訂正: 単位行列の訳ないか。 右辺もベクトルでなきゃね。 =0 は零ベクトルと読めるとして、 =1 は意味不明。 ここを適切なベクトルで書いた問題は、 やはり、x1,x2,x3,y1,y2,y3 についての 6 元 6 連立一次方程式だから、 普通に解けばよいのだけれど。

krclight417
質問者

補足

すみません,質問の説明が足りませんでした. "=1"の部分は =1 1 1 です. ただ,mathematica上で式を一文ずつ並べて連立するのではなく,行列の形の状態で xやyを求める方法が知りたかったのです.

  • alice_44
  • ベストアンサー率44% (2109/4759)
回答No.1

=1 は、単位行列の意味でいいのかな? 6 元 6 連立の一次方程式だから、 普通に解けばいいんじゃないの? A,B,C,D とかに拘ることない。

関連するQ&A