- 締切済み
マトリックスの積と行列式の積
X=ABCでX,A,B,Cはすべてマトリックスとします。サフィックスで表示するならば、 X(i,j)=A(i,m)B(m,n)C(n,j) ということかと思いますが。 この場合、 det(X)=det(A)det(B)det(C)になるとのことですが、簡単に証明できるでしょうか。線形代数の教科書を見れば必ず載っていると思うのですが、これは何も見ないで出来なくちゃと思って考え込んでいます。 X=ABの場合だけ証明できたらあとは何回積があっても同じかとは思いますが。行列式なので小行列などを用いて考えるのだろうと思いますが、パッと思いつきません。よろしくお願いします。
- skmsk19410
- お礼率54% (276/507)
- 数学・算数
- 回答数2
- ありがとう数4
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- kabaokaba
- ベストアンサー率51% (724/1416)
>det(X)=det(A)det(B)det(C)になるとのことですが、簡単に証明できるでしょうか。線形代数の教科書を見れば必ず載っていると思うのですが、これは何も見ないで出来なくちゃと思って考え込んでいます。 簡単だと思いますか? 行列式の計算は,2次・3次のときだけが「例外的に」簡単なだけで, 一般の場合はきわめて煩雑なものです. 行列式の定義の煩雑さを見れば納得できるかと. #数値計算の分野だと行列式の計算だけで #軽く一冊の本くらいのネタはあるものです. けど,ほかの「強い定理」を流用できれば それほどは困難ではないかもしれません. たとえば,「任意の行列は基本行列の積で表せる」 (ランクの計算で使われる定理ですな)から 基本行列に対してだけ,行列式の積と行列の積の行列式の 一致を証明できればいいわけです. 「任意の行列は基本行列の積で表せる」 のは線型変換ってものの意味からすれば, 厳密な証明はともかく,内容は自明だと思うので 納得はしやすいと思う.
- info22
- ベストアンサー率55% (2225/4034)
最初から一般論を扱わないで二行二列の行列でやってみては如何ですか? A= [a1 b1] [c1 d1] B= [a2 b2] [c2 d2] とおいて X=A・B を計算しておいて det(X) と det(A)det(B) を計算して 同じになることを確認してみて下さい。
お礼
回答、有難うございます。実験ということですね。 実験の結果、正しいということで、帰納的にそう推察できるということにはなると思います。2×2、3×3ぐらいまでだったらやれそうです。 逆に演繹的に納得できれば最も強力なのだろうと思いますが。
関連するQ&A
- 数学の線形代数の問題なのですが、n×nの2つのマトリックスA,Bがあり
数学の線形代数の問題なのですが、n×nの2つのマトリックスA,Bがあります。AとBの積の行列式はAの行列式とBの行列式の積となるようです。 すなわち、det(AB)=det(A)det(B) です。これは任意のn(1以上の整数)で成り立つのでしょうか。 テキストを見たのですが、省略されているようです。n=2の場合は、計算が簡単なので確かめられますが、高次だったらどうなるでしょうか。 よろしくお願いします。
- ベストアンサー
- 数学・算数
- 転置行列 証明 行列の積
転置行列の証明について疑問点があるので 質問させて頂きます。 t(AB)=t(B)t(A) の証明について。以下に示します。 行列 A の (i,j) 成分を A[i,j] と書くことにします。 行列Bも同様。 (t(AB))[i,j] = (AB)[j,i] = Σ A[j,k] B[k,i] = Σ (tA)[k,j] (tB)[i,k] …(1) = Σ (tB)[i,k] (tA)[k,j] …(2) = ((tB)(tA))[i,j] よって、 t(AB) = (tB)(tA) (1)についてよくわかりません。 行列の積は、 (l,m)行列と(m,n)行列の積は(l,n)行列と定義されますが (1)は(m,l)行列と(n,m)行列の積を計算することに ならないのでしょうか? (m,l)行列と(n,m)行列の積は定義されないので等式でつないでは いけないのでは?と考えた次第です。 以上、ご指摘、ご回答よろしくお願い致します。
- ベストアンサー
- 数学・算数
- 行列 積 定義
行列 積 定義 A=(a_ij) を (l,m) 行列,B=(b_ij) を (m,n) 型の行列とする.このとき C = AB の (i, j) 成分 cij は、 m c_ij = Σ a_ik*b_kj=(a_i1*b_1j)+(a_i2*b_2j)・・・(a_im*b_mk)で与えられる. k=1 と有るのですが・・・・ 式の意味がさっぱり分かりません・・・ kってなんでしょうか? なぜ、 a_ik*b_kjの総和を考えているのでしょうか? 2×2行列を具体的に考えて良く分からなかったので、ご教示頂けるとありがたいです。 ご回答よろしくお願い致します。
- ベストアンサー
- 数学・算数
- 逆行列の公式 証明お願いします
逆行列の公式 証明お願いします n*n A Aは正則 n*m B m*n C m*m D (A+BC)^-1 = A^-1 - A^-1*B(I+CA^-1*B)^-1*CA^-1 A=Iなら I - B(I+CB)^-1*C = I - BC(I+BC)^-1 = I - (I+BC)^-1*BC 上記のものと S = D - CA^-1*Bとおき det(A)≠0 det(S)≠0のとき |A B|^-1 = |A^-1 + A^-1*BS^-1*CA^-1 -A^-1*BS^-1| |C D| | -S^-1*CA^-1 S^-1 | ||でくくったのは行列式ではなく 行列の行列です こうなるらしいのですが 証明など書かれておらず頭も悪いのでどうすればいいかもわかりません ヒントでもいいので教えていただけませんか?
- ベストアンサー
- 数学・算数
- 行列の積について
3行3列の行列AとB、およびその和と積を表示するものです #include <stdio.h> int main (void) { int i,j,k; double a[3][3] = {{2.4, 5.5, -8.5},{0.8, 3.7, 1.1},{3.5, -9.1, 2.6}}; double b[3][3] = {{-5.1, 9.8, 2.3},{-4.1, 0.2, -0.3},{3.3, 6.1, -1.3}}; double c[3][3] = {0}; printf(" 行列A\n"); for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++) printf("%5.1f", a[i][j]); printf("\n"); } printf("\n 行列B\n"); for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++) printf("%5.1f", b[i][j]); printf("\n"); } printf("\n 行列A+B\n"); for (i = 0; i < 3; i++){ for (j = 0; j < 3; j++) c[i][j] = a[i][j] + b[i][j]; } for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) printf("%5.1f", c[i][j]); printf("\n"); } for (i=0; i<3 ; i++){ for (j=0; j<3; j++) for (k=0; k<3; k++) c[i][j] =c[i][j]+ a[i][k]* b[k][j]; } printf("\n 行列AB\n"); for (i = 0; i < 3; i++) { for (j = 0; j < 3; j++) printf("%7.2f", c[i][j]); printf("\n"); } return 0; } これだと積だけが異なった値が出てしまいます。 試しに、積の部分だけで組んでみると正しい答えが出ました。 for文のブロックの組み方がまずいのかなと思っていますが、これ以外だと、行列のレイアウトが崩れてしまいます どのように直したらいいのか、ご教示お願いします
- ベストアンサー
- C・C++・C#
- 行列の計算
#include<stdio.h> #define N 2 #define M 3 void hyoji(float[][M]); int main(){ int i,j,k; float a[N][M] = {{2.0,2.0,2.0},{2.0,2.0,2.0}}; float b[M][M] = {{1.0,1.0,1.0},{2.0,2.0,2.0},{1.0,1.0,1.0}}; float c[N][N]; for(i=0; i<N; i++){ for(j=0; j<M; j++){ c[i][j] = 0; for(k=0; k<M; k++){ c[i][j] += a[i][k] * b[k][j]; } } } hyoji(c); return(0); } void hyoji(float x[][M]){ int i,j; for(i=0; i<N; i++){ for(j=0; j<M; j++){ printf("%4.1f ",x[i][j]); } printf("\n"); } } 以上のプログラムで 行列aと行列bをかけ合せた行列cを求めるのですが コンパイルすると 8 8 8 8 8 1 となり、正しい結果がでません。 なにが間違っているのでしょうか?? よろしくお願いします。
- 締切済み
- C・C++・C#
- c言語で行列の積の値を求める
行列の成分を入力した後に、 入力された行列は X = 1 2 3 4 5 6 7 8 9 10 11 12 Y = 1 5 2 6 3 7 4 8 のように表示して、(上の数字は適当です。) 行列 X と行列 Y の積を求めて結果を表示するプログラムが作りたいのですが、上手く表示できなくて困っています。 #include <stdio.h> int main(void) { double A[10][10]; double B[10][10]; double C[10][10]; int i,j,m,n,p,k; printf("行列xの行数は?:"); scanf("%d",&m); printf("行列xの列数(行列yの行数)は?:"); scanf("%d",&n); printf("行列yの列数は?:"); scanf("%d",&p); printf("行列xを入力してください。\n"); for (i = 0; i < m; i++) { for (j = 0; j < n; j++) { scanf("%d", &A[i][j]); } } printf("行列yを入力してください。\n"); for (i = 0; i < n; i++) { for (j = 0; j < p; j++) { scanf("%d", &B[i][j]); } } この後にどうすればいいのか教えてください。 よろしくお願いします。
- 締切済み
- その他(プログラミング・開発)
- 転置行列の成分について
線形代数学の転置行列について質問です A=(aij),B=(bij)を(m,n)型行列とするとき、Bの転置行列tBの第i行の成分を書き下せ。 という問題なのですが、 僕は「tBの第i行成分はBの第i列成分と等しいので b1i ,b2i ,…,bmiとなる」のだと思っていたのですが、友達に聞くと 「b1j,b2j,…,bmj」だと言われました。 そもそも「tB1の~」という部分が僕の考え間違いなのでしょうか。 どなたかわかりやすく教えてください、よろしくお願いします。
- 締切済み
- 数学・算数
お礼
回答有難うございます。 この定理を利用する場合、"....なので”という風に1行でサラッと書いています。当然であり自明のことである、と言いたげでした。従って簡単であり、ずっしりとした実感を持って演繹的に示されることなのだと思ったのです。 証明は難しいが、必ず例外なく成立するものである、との理解になるでしょうか。