• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:行列の積)

行列の積とは?複素行列の計算方法やミュラー行列特有の要素について解説

このQ&Aのポイント
  • 行列の積には普通の掛け算とは異なるルールがあります。特に複素行列やミュラー行列では、掛け算の一部が"-"になることがあります。この記事では、行列の積の計算方法について詳しく解説します。
  • 行列の積には基本的な計算ルールがありますが、複素行列では一部の要素の掛け算が"-"になることがあります。これは、複素数の性質によるもので、積の計算方法が異なるためです。複素行列の積を計算する際は、要素ごとに正確に計算してください。
  • ミュラー行列は特殊な行列であり、光学の分野で使用されます。そのため、ミュラー行列の積も一般的な行列の積とは異なる計算方法があります。ミュラー行列の積を計算する際には、掛け算の一部が"-"になることがよくあります。これは、光の偏光方向の変化を表すためです。

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

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

>普通の行列の積なら、要素の掛け算はすべて"+"となると思うのですが… 与えられた行列 A, B の要素に負号が付けられているのでは? たとえば「方向を区別するため」とか。 積 C を 2X2 ブロックに 4 分割し、  [ C11 C12 ;   C21 C22 ] の順に配列してみると、 A, B の 4 分割ブロックにて、  A11 = [aij], A12 = [aij], A11 = [aij], A12 = [-aij]  B11 = [-bij], B12 = [bij], B11 = [bij], B12 = [bij] …などと負号が付けられている、というような気もします。   

flex1101
質問者

お礼

回答ありがとうございます。 回答を参考にして式を見なおしたところ、行列AもBも右上の2x2の元がマイナス符号の時に、式がすべてなりたつことに気づきました。 この情報を元に、もう少し関連情報を探してみます。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • ある行列とその転置行列の積の逆行列は?

    今エクセルで行列を使って問題を解いています。 問題は 行列X、A、Yがあり、Xは1行4列、Aは1行2列、Yは1行4列です。 X・A=Y という式があり、Aの行列は未知数a,bの要素からなっています。 X,Yはそれぞれ数値として要素が決まっています。 ここからはヒントとして表示されていました。 そこでXの逆行列を両辺の左からかけるとAは求まるはずですが、 Xは正方行列ではないので、Xの転置行列を左からかけます。 X(T)・Xは正方行列になるのでこれを行列Pとおくと Pの逆行列を求められ、右辺にP^-1をかけるとAが求まる。 というものです。 エクセルで書かれている通りにやってみて、エラーになるので調べてみると、XとXの転置行列の積の行列式は要素にかかわらず0になるようです。 実際に数値ではなく、abcdでやってみたところ0のようです。 この場合、逆行列は存在しないのではないかと思いますが、このヒントが間違っているとはあまり思えず、困っています。 補足ですが、この問題は最小二乗法をエクセルで行列を用いて行うという趣旨です。 もとのデータとして(x、y)の座標が4点与えられており、行列Xはxの要素を縦にならべたもの、Aは最小二乗法で求める一次関数式のパラメーターa,bで、YはXと同様座標のy要素です。 私の理解が間違っていて、何行何列という部分に誤りがあるなどの指摘があれば、ぜひお願いいたします。 そもそもある行列とその転置行列の積の逆行列は存在するのかどうかもお願いします。 締め切りが近く、ちょっとあせっています。 よろしくお願いします!!

  • 初心者です。プログラミング 3×3行列の積

    先日、課題が出されて、1週間ほど考えてはみたのですがわからなかったため質問させていただきます。 3行3列の行列の積を求めるプログラムを作成しなさい。ただし、各行列要素は疑似乱数を使って値を求めるようにしなさい。また各行列要素は二桁以下の整数とし、行列の積を計算する部分を関数で行うようにしなさい。という問題なんですが、どなたかわかる方がいらっしゃいましたらご回答よろしくお願いいたします。できれば詳しく式などを書いていただきたいです。

  • マトリックスの積と行列式の積

    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の場合だけ証明できたらあとは何回積があっても同じかとは思いますが。行列式なので小行列などを用いて考えるのだろうと思いますが、パッと思いつきません。よろしくお願いします。

  • 行列の積を関数を使って求める・・?

    2つの行列の行と列を入力し、積を計算するプログラムを関数を使って書きたいのですが、上手く行きません。どこをどのように直したらよいか教えてください!お願いします!! 以下が私が書いたプログラムです。 #include<stdio.h> #define NUMBER 10 int first(int x1,int x2,int y1,int y2,int i,int j,int k) { int a[NUMBER][NUMBER] = {0}; int b[NUMBER][NUMBER] = {0}; int c[NUMBER][NUMBER] = {0}; do{ printf("2つの行列の行と列を入力してください\n"); scanf("%d", &x1); scanf("%d", &x2); scanf("%d", &y1); scanf("%d", &y2); if(x1 != y2){ printf("行列の積は計算できません\n"); } }while(x1 != y2); printf("行列Aの要素を入力してください\n"); for(i=0; i<x1; i++){ for(j=0; j<x2; j++) scanf("%d", &a[i][j]); } printf("行列Bの要素を入力してください\n"); for(j=0; j<y1; j++){ for(k=0; k<y2; k++) scanf("%d", &b[j][k]); } } int second(int x1,int x2,int y1,int y2,int i,int j,int k) { int a[NUMBER][NUMBER] = {0}; int b[NUMBER][NUMBER] = {0}; int c[NUMBER][NUMBER] = {0}; for(i=0; i<x1; i++){ for(k=0; k<y2; k++){ for(j=0; j<x2; j++) c[i][k] = c[i][k] + a[i][j]*b[j][k]; } } for(i=0; i<x2; i++){ for(k=0; k<y2; k++) printf("%3d", c[i][k]); printf("\n"); } } int main(void) { int a[NUMBER][NUMBER] = {0}; int b[NUMBER][NUMBER] = {0}; int c[NUMBER][NUMBER] = {0}; printf("行列の積を計算します\n %d\n", first(x1,x2,y1,y2,i,j,k)); printf("行列Aと行Bの積は\n %3d",second(x1,x2,y1,y2,i,j,k)); }

  • 行列の積の計算プログラムを教えてください。

    現在、BASICの勉強を独学でしていますが、なかなか理解ができないでいて困っています。 4行4列の2つの行列A、Bの積を計算するプログラムを書きたいのですが、どのように書けばよいのか教えていただけないでしょうか? DIM文を使うことはわかるのですが、使い方がよくわからないでいます。 よろしくお願いします。

  • BASICのプログラムで行列式の積の計算をしたいのですが…

    BASICのプログラムで「行列式の積」の計算をしたいのですが…どのようにして行ったらよいか分かりません。あいにく、大学の図書館が閉まってしまい、調べる事もできない状態で困っています。一例として、3行3列の行列式の積の計算をする方法のプログラムを教えてください。 後、計算結果がどのように表示されるかも教えていただけると嬉しいです。

  • Matematica による行列計算

    Matematicaに行列計算をさせる方法を教えて下さい. Matematicaで行列の積の計算をやらせたいとき、例えば {{a,b},{c,d}}^nとすると、単に各要素がn乗されただけの答えが返ってきます. 一般に行列のn乗を計算させるにはどのような命令文を書けばよいでしょうか? どなたか教えて下さい.

  • 行列式のプログラム

    適当な形式にて初期化された2つの2次元配列により、3×4行列Aと4×3行列Bの要素を表現し、積ABを求めて表示させるプログラムなんです。 ここまでならなんとかなるかもと思ったんですが、行列はAはプログラム中で以下の数値で初期化して、行列Bの要素はキーボードから入力させるようにしないといけないんです。。   2.0 3.0 4.0 5.0 A= 3.0 4.0 5.0 6.0   1.0 2.0 3.0 4.0 なんですけれども、教えていただけたらうれしいです。。 お願いします!!

  • 行列の積について

    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文のブロックの組み方がまずいのかなと思っていますが、これ以外だと、行列のレイアウトが崩れてしまいます どのように直したらいいのか、ご教示お願いします

  • 行列の積の意味

    まだ学習し始めたばかりなので用語が間違っているかもしれないのですが、 行列の積の意味はn次元空間上の或る点を別の位置に移す事を表現しているとも考えられる、 と会ったのですが、よくわかりません。 ”行列のスカラー倍”の場合はベクトルが移動して拡大という考え方(間違っているかも)で納得したのですが、画像のような場合、a,b,c,dは何を意味するのでしょうか?a=x1,b=x2,c=y1,d=y2 といった感じでしょうか?可視化したものを見てみたいのです。

このQ&Aのポイント
  • 電源ボタンを押してもLenovoのロゴが表示されず、1分で電源が落ちる状態です。
  • キーボードや外部接続したキーボードがライティングされず、通電されていない可能性があります。
  • ACアダプターから通電された状態で放置していますが、別の方法を試すか修理に出す予定です。
回答を見る