複素数の計算

シェアする

  • このエントリーをはてなブックマークに追加
最近の記事
  • 10/18 【C#】GraphicsPath
  • 10/17 【C#】Bitmap画像データの拡大縮小
  • 10/15 【C#】画像の座標系
  • 10/14 【C#】画像の上下左右反転、90,180,270度回転
  • 10/3 【C#】SplitContainerのPanel固定方法
  • 9/7 【Neural Network Console】学習データの出力方法
  • 9/3 Deep Learning向け学習画像撮り込みソフト公開
  • 9/1 【Neural Network Console】新規画像のDataset作成方法
  • 8/28 【Neural Network Console】GUI表示スケールの変更
  • 8/22 【Neural Network Console】CPU/GPU処理の設定切替
  • 8/21 【Neural Network Console】Learning Rate(学習率)の設定
  • 8/20 ソニーの無償AIソフト Neural Network Consoleの入手ダウンロード、インストール
  • 8/20 Deep Learning
  • 8/20
  • 8/19 古いバージョンのVisual Studio Community/Expressの入手ダウンロード
  • 8/19 CUDAの入手、ダウンロード、インストール方法
  • 8/17 【C#.NET】マイクロソフト仕様のアフィン変換
  • 8/5 【C#】ファイルを開くダイアログボックスの表示
  • 8/2 キャノンプリンターのCDトレイはどこ?!
  • 7/6 【参考書籍】画像処理・機械学習プログラミング OpenCV 3対応
  • 6/20 【Python,matplotlib】動くグラフをAnimationGifに保存する方法
  • 6/17 シグモイド関数の微分
  • 6/15 シグモイド関数
  • 6/13 合成関数の微分
  • 6/12 WordPressで数式エディタ風に数式を入力したい
  • 6/11 PythonをVisual Studioでインストールする方法
  • 6/9 【Python】OpenCVをAnacondaでインストール(Windows編)
  • 6/6 【Python】Anacondaで複数バージョンの環境切り替え
  • 6/6 画像センシング展2017に出展します。
  • 6/1 【Office365】Web版Outlookのフォントサイズ変更
  • 6/1 【Anaconda】モジュールのアップデートでエラー発生
  • 6/1 【Anaconda】コマンドリストの表示
  • 5/29 Windows10パソコン購入
  • 5/24 Anacondaのアンインストール
  • 5/24 【Jupyter Notebook】新規プログラムの作成
  • 5/23 【Python】開発環境の構築
  • 5/23 Pythonはじめました
  • 4/6 【Office365】Web版Outlookのスレッド表示を解除する方法
  • 4/5 【Excel】フーリエ解析(FFT)
  • 3/20 Canny edge detection
  • 3/20 【Excel2016】分析ツールの表示
  • 3/5 【Visual Studio】黒い背景色を白に変更する方法
  • 2/8 【Windows10】拡張モニタに表示されたウィンドウを元に戻す
  • 2/7 複素数の計算
  • 1/18 【Excel】棒グラフの横軸の目盛を0始まりにする
  • 1/16 【Excel】フーリエ変換
  • 1/6 【OpenCV】疑似カラー(カラーマップ)
  • 11/8 【Visual Studio】検索結果のウィンドウ表示
  • 11/3 ニコン 一眼レフカメラ D5500レビュー
  • 10/26 カラーカメラはモノクロカメラを兼ねない

  • 複素数については実在しないものの様に教わったので、なかなか理解できないままでいたのですが、実際に使ってみると便利に感じることもあるので、数学的には厳密でないかもしれませんが、私なりの理解でまとめてみます。

    まず、複素平面については、覚えるしか無さそうなので、複素数Zは実数成分がa、虚数成分がbのとき、虚数iを使って以下のように定義されます。

     複素数Z = a + bi

    複素数の計算

    複素数の大きさ(絶対値は)

    エクセルでフーリエ変換

    傾き(偏角)は

    エクセルでフーリエ変換

    となります。

    ここまでは、ほとんどベクトルもしくは極座標の計算と同じです。

    さらに、オイラーの公式というのがあり、

    e = cosθ + i sinθ

    となります。

    ここで登場するeネイピア数と呼ばれるのですが、自然対数のeと同じフナ一羽二羽のe=2.718281828..と同じですが、指数のところに虚数のiが付いており、まじめにeの何乗か?と考えない方が良いかと思います。

    eは、複素平面上での半径1の円として捉えて下さい。

    複素数の計算

    θ=0の時は

    ei0 = cos0 + i sin0 = 1 + i 0  =  1

    となり、θ=π / 2 のときは

    eiπ/2 = cos(π/2) + i sin(π/2)= 0+i 1  =  i

    となります。

    オイラーの公式では大きさが1ですが、最初の複素数の定義のように任意の大きさAとすると、合わせ技で

    Ae = A(cosθ + i sinθ)  = a + bi

    ただし、 a = Acosθ、 b = Asinθ

    となります。

    ここで大事なのが、複素数の定義ではベクトルのように見えますが、オイラーの公式を用いると指数関数のようにも見えます。

    このどちらにも見える特性を都合のいい方で扱えるところが便利なところです。

    例えば、2つの複素数Z1とZ2の足し算は

      Z1 = a1 + b1 i

      Z2 = a2 + b2 i

      Z + Z2 = a1 + b1i + a2 + b2i  

          = a1 + a2 + (b1 + b2)i

    となります。

    この計算は、ベクトル(a1, b1)とベクトル(a2, b2)の足し算と同じです。

    複素数の計算

    同様のことは引き算でも言えます。

    それでは、掛け算の場合は、どうなるかというと

      Z1 = a1 + b1 i

      Z2 = a2 + b2 i

      Z x Z2 = (a1 + b1i) x (a2 + b2i  )

          = a1a2  +  a1b2 i + a2b1 i  + b1b2  i2 

          = a1a2  + (a1b2  + a2b1 )i  ー b1b2 

          = a1a2  ー b1b2 +(a1b2  + a2b1 )i 

    としてもいいのですが、オイラーの公式を使って、Z1の絶対値をA1,偏角をθ、Zの絶対値をA,偏角をθとして

      Z1 = a1 + b1 i = A1eiθ

      Z2 = a2 + b2 i = A2eiθ2

      Z x Z2 = A1A2 ei(θ1+θ2)

    のように指数関数として複素数の掛け算(割り算)は計算した方が良い場合がよくあります。

    複素数の計算

    中間まとめ。

    ●複素数の足し算、引き算はベクトルの足し算、引き算

    ●複素数の掛け算、割り算は指数関数

    と思って解ける場合が多い。

    ここまで覚えると、複素数に関する公式は、覚えていなくても導き出せる場合が多いです。

    例えば、虚数i は i2 = -1 となる値として教わったのですが、

    $${ i }^{ 2 }={ \left( 0+1i \right) }^{ 2 }={ \left( { e }^{ i\frac { \pi }{ 2 } } \right) }^{ 2 }={ e }^{ i\left( \frac { \pi }{ 2 } +\frac { \pi }{ 2 } \right) }={ e }^{ i\pi }=-1$$

    と考えると、回りくどいですが、自分の中ではスッキリと整理ができました。

    他にも複素数の虚数成分を負にした(θをマイナスにした)ものを複素共役(ふくそきょうやく)といいますが、

    複素数の計算

    図示するとこんな感じ↓

    複素数の計算

    この特性から、実部aは複素共役を使うと

    複素数の計算

    となりますが、図を見れば一目瞭然なので、あまり公式としては覚えていません。。

    ただ、この複素共役ですが、分かりやすく eπ/3 と e-π/3 のようにペアになってくれてればいいのですが、 eπ/3 と e5π/3 のような場合が多いので、ご注意下さい。

    複素数の計算

    結局、この複素数を使うと何がよいか?というと、

    ●実数と虚数が同時に計算できる。普通の実数の空間で言うのなら、XとYが同時に計算できる。

    ●都合の良い方で計算できる。ベクトル演算だったり、指数関数だったり。。

    ●フーリエ変換的な要素(バンドパスフィルタ)が計算できる。

    というのは、個人的な意見なのですが、実際にはプログラムを組む時は、実部と虚部で別々で計算していたりもします。

    まぁ、画像処理アルゴリズムを考える時の手助けにはなっています。

    フーリエ変換使える数学へ戻る