複素数の計算

シェアする

  • このエントリーをはてなブックマークに追加
最近の記事
  • 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 カラーカメラはモノクロカメラを兼ねない
  • 9/6 (Free Soft)Animation GIF Builder
  • 8/30 【C#】タブの無いTabControlっぽいものを作る
  • 8/29 【OpenCvSharp】サンプルプログラムの公開
  • 8/28 【PowerPoint】部分的にカラーにする(セレクトカラー処理)
  • 8/27 【C#】引数の値渡し、参照渡し(ref, out)
  • 8/26 【Word/Excel】図形内に文字を挿入する
  • 8/25 【C#】NumericUpDownコントロール
  • 8/24 ニコン D3400 VS D5500 仕様比較
  • 8/22 【C#】MDIフォームにリサイズ可能なPanelを設置する
  • 8/20 【Visual Studio 2015】文字の色が変、かすむ
  • 8/20 【Visual Studio】行のコピー、切り取り、貼り付け
  • 8/20
  • 8/16
  • 7/7 標準偏差のよくある誤解
  • 6/17 ホーム
  • 6/15
  • 6/15
  • 6/15
  • 6/15
  • 6/15

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

    まず、複素平面については、覚えるしか無さそうなので、複素数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 = A1eθ1

      Z2 = a2 + b2 i = A2eθ2

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

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

    複素数の計算

    中間まとめ。

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

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

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

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

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

     i2 = (0 + 1i)2 = (eπ/2)2 = e(π/2 + π/2) = eπ = -1

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

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

    複素数の計算

    図示するとこんな感じ↓

    複素数の計算

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

    複素数の計算

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

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

    複素数の計算

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

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

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

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

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

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

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