2020年4月6日月曜日

学習環境

新装版 数学読本3 (松坂 和夫(著)、岩波書店)の第10章(新しい数とその表示ー複素数と複素平面)、10.1(複素平面)、ド・モアブルの公式と複素数のn乗根の問12の解答を求めてみる。



    1. 1 + i = 2 cos π 4 + 2 k π + i sin π 4 + 2 k π

      よって 問題の複素数の平方根の極形式は

      1 + i 1 2 = 2 4 cos π 8 + k π + i sin π 8 + k π

    2. i 1 3 = cos π 2 + 2 k π + i sin π 2 + 2 k π 1 3 = cos π 6 + 2 3 k π + i sin π 6 + 2 3 k π

    3. - 2 + 2 3 i = 4 - 1 2 + 3 i 2 = 4 cos 2 π 3 + 2 k π + i sin 2 π 3 + 2 k π - 2 + 2 3 i 1 4 = 2 cos π 6 + k 2 π + i sin π 6 + k 2 π

    4. - 1 = cos π + 2 k π + i sin π + 2 k π - 1 1 5 = cos π 5 + 2 5 k π + i sin π 5 + 2 5 k π

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import symbols, I, sqrt, sin, cos, pi, root

print('12.')

zs = [1 + I,
      I,
      -2 + 2 * sqrt(3) * I,
      -1]
ns = [2, 3, 4, 5]
k = symbols('k', integer=True)
ras = [(root(2, 4), pi / 8 + k * pi),
       (1, pi / 6 + 2 * k * pi / 3),
       (sqrt(2), pi / 6 + k * pi / 2),
       (1, pi / 5 + 2 * k * pi / 5)]


class MyTestCase(TestCase):
    def test(self):
        for i, (z, n, (r, a)) in enumerate(zip(zs, ns, ras), 1):
            print(f'({i})')
            if type(z) == int:
                c = z
                d = 0
            else:
                c, d = z.as_real_imag()
            for k0 in range(n):
                e, f = ((r * (cos(a) + I * sin(a))) **
                        n).subs({k: k0}).as_real_imag()
            self.assertAlmostEqual(float(c), float(e))
            self.assertAlmostEqual(float(d), float(f))


if __name__ == "__main__":
    main()

入出力結果(Zsh、PowerShell、Terminal、Jupyter(IPython))

% ./sample12.py -v
12.
test (__main__.MyTestCase) ... (1)
(2)
(3)
(4)
ok

----------------------------------------------------------------------
Ran 1 test in 0.272s

OK
%

0 コメント:

コメントを投稿