[VBA] 偏角を計算する CPXARG 関数

複素数の偏角

 複素数 $z=a+bi$ を複素平面上の点として表したときに、$z$ と原点 $O$ を結ぶ直線が実軸となす角度を $z$ の 偏角 (argument) とよび、$\mathrm{arg}z$ のように表します。

 Excel VBA 複素数の偏角

 任意の複素数を与えて偏角を計算する Function Macro を作成してみます。

 ≫ [Amazon数学書籍] 曲線と曲面の微分幾何
 ≫ [Amazon数学書籍] ルベーグ積分入門

複素数の偏角を計算する CPXARG 関数

 CPXARG関数を使用するには複素数型変数の定義と CPX関数を予めモジュールに貼りつけておく必要があります。最新コード をモジュールに貼り付けてください(この記事のマクロも含まれています)。

 '複素数の偏角を計算 (C)BlogCat

 Function CPXARG(z As Complex, _
 Optional s1 As Boolean = False, _
 Optional s2 As Boolean = False) As Double

 pi = 4 * Atn(1)

 Select Case s1

 ''範囲を 0 ~2πにする場合(初期設定 ON)

  Case False

 If z.re = 0 And z.im > 0 Then

  CPXARG = pi / 2

 ElseIf z.re = 0 And z.im < 0 Then

  CPXARG = 3 * pi / 2

 ElseIf z.re < 0 And z.im = 0 Then

  CPXARG = pi

 ElseIf z.re > 0 And z.im >= 0 Then

  CPXARG = Atn(z.im / z.re)

 ElseIf z.re < 0 And z.im <> 0 Then

  CPXARG = Atn(z.im / z.re) + pi

 ElseIf z.re > 0 And z.im < 0 Then

  CPXARG = Atn(z.im / z.re) + 2 * pi

 End If

 ''範囲を -π ~πにする場合(初期設定 ON)

 Case Else

 If z.re = 0 And z.im > 0 Then

  CPXARG = pi / 2

 ElseIf z.re = 0 And z.im < 0 Then

  CPXARG = -3 * pi / 2

 ElseIf z.re < 0 And z.im = 0 Then

  CPXARG = -pi

 ElseIf z.re > 0 Then

  CPXARG = Atn(z.im / z.re)

 ElseIf z.re < 0 And z.im > 0 Then

  CPXARG = Atn(z.im / z.re) + pi

 ElseIf z.re < 0 And z.im < 0 Then

  CPXARG = Atn(z.im / z.re) - pi

 End If

 End Select

 ''角度の単位を度数単位にする場合(初期設定 OFF)

 If s2 = True Then

  CPXARG = 180 * CPXARG / pi

 End If

 End Function

 このユーザー定義関数を呼びだすときには、

CPXARG(z[,範囲,角度の単位])

のように記述します。[範囲] に False や 0 を指定する、もしくは省略すると $0\lt\mathrm{arg}z\leq2\pi$ の範囲で角度を返します($x$ 軸から反時計周りに測った角度です)。True もしくは 1 を指定すると、$-\pi\lt\mathrm{arg}z\leq\pi$ の範囲で角度を返します。以下に CPXARG関数の使用例を載せておきます。

 '複素数の偏角の計算例

 Sub CPXARGtest()

 Dim t1 As Double, t2 As Double
 Dim t3 As Double, t4 As Double

 Dim z1 As Complex, z2 As Complex
 Dim z3 As Complex, z4 As Complex

 '1 + i
 z1 = CPX(1, 1)

 '- 1 + i
 z2 = CPX(-1, 1)

 '- 1 - i
 z3 = CPX(-1, -1)

 '1 - i
 z4 = CPX(1, -1)

 t1 = CPXARG(z1, 0, 1)
 t2 = CPXARG(z2, 0, 1)
 t3 = CPXARG(z3, 0, 1)
 t4 = CPXARG(z4, 0, 1)

 Debug.Print t1; t2; t3; t4

 End Sub

 複素平面上の半径 $\sqrt{2}$ の円周上の点、
 
\[1+i,\quad -1+i,\quad -1-i,\quad 1-i\]
の偏角を計算させています(結果がわかりやすいように、3 つめの引数を「 1 」として、度数表示にしてあります)。実行すると

45 135 225 315

という値が表示されます。下の図を参考にしてください。

 Excel VBA 半径√2の円

 ≫ VBA 数値計算

スポンサーリンク
スポンサーリンク
末尾広告
末尾広告

コメントをどうぞ

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください