
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をいっぺんに定義する方法があればお願いします。
A 回答 (4件)
- 最新から表示
- 回答順に表示

No.4
- 回答日時:
ComplexExpand[expr]とするとexprの中の変数は全て実数としてあるかわれます。
m = {{a + b I, c + d I}, {e + f I, g + h I}}
In[7]:=ComplexExpand[Conjugate[m]]
Out[7]:={{a - I b, c - I d}, {e - I f, g - I h}}
以下のURLに詳細が記載されていますので、参考にしてください。
http://reference.wolfram.com/mathematica/ref/Com …
No.3
- 回答日時:
a_ijとb_ijを未定義のままConjugate[A]を代数的に表示したいということでしょうか?
でしたら
A = Table[a[i, j] + I*b[i, j], {i, 2}, {j, 2}]
のようにa,bを未定義の関数のように扱ってやれば
Simplify[Conjugate[A],
Assumptions -> {a[_, _], b[_, _]} ∈ Reals]
のように入力でき
{{a[1, 1] - i b[1, 1], a[1, 2] - i b[1, 2]},
{a[2, 1] - i b[2, 1], a[2, 2] - i b[2, 2]}}
が得られます。
No.2
- 回答日時:
#1の補足に対する回答
私が使用しているMathematicaは最新のVersion 5.2のWindows版ですが、質問者さんのはどのVersionですか?
>A = {{a11 + i*b11, a12 + i*b12}, {a21 + i*b21, a22 + i*b22}}
の出力は
{{a11 + b11 i, a12 + b12 i}, {a21 + b21 i, a22 + b22 i}}
となって、iはただの変数として認識されます。
A = {{a11 + I*b11, a12 + I*b12}, {a21 + I*b21, a22 + I*b22}}
虚数単位の「i=√(-1)」はシステム変数ですので大文字の「I」で入力しないと正しく認識されませんね。こうすると正しく入力されます。「I」の出力表示は小文字のiのベクトル表示のような記号で表示されます。
(Mathematicaでは組込み関数名やシステム定数の先頭文字を大文字で表しますので、通常の変数名や行列名の先頭文字は小文字を使った方がべターですね。)
>Conjugate[A]...
を入力すると私のversionでの出力は以下のようになります。
{{Conjugate[a11 + I b11], Conjugate[a12 + I b12]},
{ Conjugate[a21 + I b21], Conjugate[a22 + I b22]}}
ここで、a'sやb'sに具体的な数値を与えると以下のように正しくConjugateが計算されて出力されます。
a11 = 1
b11 = 2
a12 = 2
b12 = 3
a21 = 3
b21 = 4
a22 = 4
b22 = 5
Conjugate[A]
この出力は以下の通り。
{{1 - 2 I, 2 - 3 I}, {3 - 4 I, 4 - 5 I}}
「Conjugate」という表示は消えていますね。
ここで、{a11,a12,a21,a22,b11,b12,b21,b22}⊂Realsは定義しなくてもDefaultで定義されるようです。
a's,b'sを文字のまま扱った場合
>Simplify[A,Assumptions->
>{a11,a12,a21,a22,b11,b12,b21,b22}∈Reals]
>とすれば
>
>{{a11-i*b11,a12-i*b12},{a21-i*b21,a22-*b22}}
{{a11+I b11,a12+ I b12},{a21+ I b21,a22+I b22}}
と出力されます。これは特にSimplify関数を使わなくても
A
と入力するだけで同じ結果がOutされます。(Version5.2)
A = {{a11 + I*b11, a12 + I*b12}, {a21 + I*b21, a22 + I*b22}}
B=Conjugate[A]
Simplify[B, Assumptions -> {a11, a12, a21, a22, b11, b12, b21, b22} ∈ Reals]
と入力すると矢張り
{{Conjugate[a11 + I b11], Conjugate[a12 + I b12]}, {Conjugate[a21 + I b21], Conjugate[a22 + I b22]}}
となります。
確認してみてください。
ということは以下の
>Assumptions->{????}
の????の入力をしても意味がないですね。
というより定義しなくてもDefaultで定義されてしまうようです。つまり、入力の必要がないということになりますね。
いずれにしても
a'sやb'sに具体的な定数を与えれば<Conjugate>という表現の入らないOutが得られるということです。
文字変数を行列要素に使っている限りConjugateの表現は、現在の最新Version5.2でも消すことはできないようです。
No.1
- 回答日時:
>a_ij、b_ijをいっぺんに定義する方法があればお願いします。
たとえば、3行3列の複素行列を入力するには以下のように書きます。大文字の「I」は虚数単位です。
a = {{1 + I 5, 2 - I, 3 + I 4}, {I 2, 2 + I, 5 - I 3}, {1 + I, 2 - I 2, 1 - I 2}}
全体を中括弧{}で囲み、その中に、最初の中括弧{}の中に一行目の複素行列要素をコンマ「,」で区切って並べて行きます。2行目と行区切り文字も「,」を使用します。その後二行目の中括弧{}の中に二行目の行列複素行列要素をコンマで「,」で区切って並べます。この繰り返しで、行列の最後の行を中括弧の中にコンマ「,」区切りで書きます。
複素行列要素は「<実部>±I <虚部>」の形式で与えます。
>Conjugate[A]などを計算するためにはどうしたらよいでしょうか?
b=Conjugate[a]
と入力するだけです。
出力は行列aの各行列要素が複素共役数に変換され、bに格納され、その内容がOutに表示されます。
この回答への補足
早速の回答ありがとうございます。
質問の内容ですが、
複素行列
A={{a11+i*b11,a12+i*b12},{a21+i*b21,a22+i*b22}}
についてたとえば、Conjugate[A]を計算すると、
Conjugate[A]=
{
{Conjugate[a11]-i*Conjugate[b11],
Conjugate[a12]-i*Conjugate[b12]},
{Conjugate[a21]-i*Conjugate[b21],
Conjugate[a22]-i*Conjugate[b22]},
}
と出力されてしまいますが、
ここで{a11,a12,a21,a22,b11,b12,b21,b22}⊂R
と定義するなどして
Conjugate[A]
->{{a11-i*b11,a12-i*b12},{a21-i*b21,a22-*b22}}
と出力されるようにしたいのです。
このとき、
Simplify[A,Assumptions->
{a11,a12,a21,a22,b11,b12,b21,b22}∈Reals]
とすれば
{{a11-i*b11,a12-i*b12},{a21-i*b21,a22-*b22}}
が得られるようですが、この方法では行列の大きさを大きくすると
Assumptions->{????}
の????の部分がどうしても長くなってしまいます。
これをうまく行う方法はないものでしょうか?
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- 計算機科学 Mathematica 行列の積(内積) Mathematicaで行列の積(内積)を計算したいのです 1 2022/12/05 01:41
- C言語・C++・C# C言語の課題が出たのですが自力でやっても分かりませんでした。 要素数がnであるint型の配列v2の並 3 2022/11/19 17:41
- C言語・C++・C# このプログラミングの問題を教えてほしいです。 キーボードからデータ数nとn個のデータを入力し、平均値 3 2022/12/19 22:51
- Visual Basic(VBA) VBAで時間(00:00形式)を積算(足し算)したい 1 2022/11/15 17:04
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- C言語・C++・C# C言語 3 2022/10/04 15:07
- 経済学 資本移動や価格変動のない次のような固定為替レート・モデルを考える。 C = 10 + 0.8 Y I 3 2022/06/21 20:50
- C言語・C++・C# LU分解法のピボッティングについて(C言語/gcc-9) 3 2022/07/11 23:10
- 数学 「違います 質問11 n≦-2ではz≠π/2で g(z)=tan(z)/(z-π/2)^(n+1) 3 2022/07/16 18:12
- Visual Basic(VBA) エラーコード1004 6 2022/06/09 14:12
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
青の吹き出しの何をどう考えれ...
-
写真は2変数関数の合成微分の公...
-
三角形の面積は、底辺✕高さ÷2 ...
-
この両辺の2Rを払う手順を教え...
-
数学の質問:関数の書き方
-
高校数学について
-
至急 a²b+a-b-1 の因数分解...
-
2980円で買った「15個のリンゴ...
-
数ⅱ等式の証明について。 条件...
-
数学得意な人程宝くじ買わない...
-
この180➗204の計算の仕方教えて...
-
xy平面上の点P(x,y)に対し,点Q(...
-
写真は多変数関数についての「...
-
数学のワークについての質問で...
-
1,189,200円の割引率が0.82500%...
-
なぜ、Δtがdtではなくdτになる...
-
344億円かかった「大屋根リング...
-
【数学】積分したあとに微分す...
-
数学です。267の説明おねがいし...
-
高2です。 数学の問題集につい...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
厄介そうな定積分
-
二重和
-
確率の質問です
-
モンティホール問題について 問...
-
【 畳み込み積分 のτ 意味がよ...
-
数学が得意な人の考え方を知り...
-
この算数問題、何がおかしい? ...
-
サイコロを100回投げて、奇数、...
-
SPI 食塩水の等量交換 完全文系...
-
割り算の不思議
-
足し算のざっくり計算が苦手で...
-
問題 √2が無理数であることを入...
-
なぜ、Δtがdtではなくdτになる...
-
全体100人のうちリンゴ派90人み...
-
新幹線が最高速度に到達するま...
-
これって①番の公式を使うのでし...
-
2.2%は分数で表すと22/1000、約...
-
数学の問題です。110で最小値を...
-
積分について
-
三角関数ですこれはなぜx=0と...
おすすめ情報