2019年12月30日月曜日

学習環境

解析入門(上) (松坂和夫 数学入門シリーズ 4) (松坂 和夫(著)、岩波書店)の第8章(積分の計算)、8.1(不定積分の計算)、問題7の解答を求めてみる。



    1. sin x = sin x 2 + x 2 = 2 sin x 2 cos x 2 = 2 sin x 2 cos x 2 sin 2 x 2 + cos 2 x 2 = 2 sin x 2 cos x 2 sin 2 x 2 cos 2 x 2 + 1 = 2 t 1 + t 2 cos x = cos x 2 + x 2 = cos 2 x 2 - sin 2 x 2 = cos 2 x 2 - sin 2 x 2 cos 2 x 2 + sin 2 x 2 = 1 - t 2 1 + t 2 dt dx = 1 cos 2 x 2 · 1 2 = cos 2 x 2 + sin 2 x 2 2 cos 2 x 2 = 1 + t 2 2 dy dt = 2 1 + t 2

      よって、

      dx 1 + cos x = 1 1 + 1 - t 2 1 + t 2 · 2 1 + t 2 dt = 2 1 + t 2 + 1 - t 2 dt = dt = t = tan x 2

    2. 置換積分と部分分数分解。

      dx cos x = 1 + t 2 1 - t 2 · 2 1 + t 2 dt = 2 1 - t 2 dx = 2 1 1 + t 1 - t dt A 1 + t + B 1 - t = B - A t + A + B 1 - t 2 - A + B = 0 A + B = 1 B = 1 2 A = 1 2 dx cos x = dt 1 + t + dt 1 - t = log 1 + t - log 1 - t = log 1 + t 1 - t = log 1 + tan x 2 1 - tan x 2

    3. sin x 1 + sin x dx = 2 t 1 + t 2 · 1 1 + 2 t 1 + t 2 · 2 1 + t 2 dt = 4 t 1 + t 2 t 2 + 2 t + 1 dt = 4 t 1 + t 2 1 + t 2 dt A t + B t 2 + 1 + C t + 1 + D t + 1 2 A t + B t + 1 2 + C t 2 + 1 t + 1 + D t 2 + 1 = A t + B t 2 + 2 t + 1 + C t 3 + t 2 + t + 1 + D t 2 + 1 = A + C t 3 + 2 A + B + C + D t 2 + A + 2 B + C t + B + C + D { A + C = 0 2 A + B + C + D = 0 A + 2 B + C = 1 B + C + D = 0 C = - A 2 B = 1 B = 1 2 1 2 - A + D = 0 D = A - 1 2 A + 1 2 + A - 1 2 = 0 A = 0 C = 0 D = - 1 2 t 1 + t 2 1 + t 2 dt = 1 2 dt 1 + t 2 - dt 1 + t 2 = 1 2 arctan t + 1 1 + t = 1 2 arctan tan x 2 + 1 1 + tan x 2 = 1 2 x 2 + 1 1 + tan x 2 sin x 1 + sin x dx = 2 x 2 + 1 1 + tan x 2 = x + 2 1 + tan x 2

コード

#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import pprint, symbols, Derivative, sin, cos, tan, atan, log, plot

print('7.')

x = symbols('x')
fs = [1 / (1 + cos(x)),
      1 / cos(x),
      sin(x) / (1 + sin(x))]
gs = [tan(x / 2),
      log(abs((1 + tan(x / 2)) / (1 - tan(x / 2)))),
      x + 2 / (1 + tan(x / 2))]

s = {x: 1}


class MyTestCase(TestCase):
    def test1(self):
        self.assertEqual(float(fs[0].subs(s)),
                         float(Derivative(gs[0], x, 1).doit().subs(s)))

    def test2(self):
        self.assertEqual(float(fs[1].subs(s)),
                         float(Derivative(log((1 + tan(x / 2)) /
                                              (1 - tan(x / 2))), x, 1).doit().subs(s)))

    def test3(self):
        self.assertEqual(float(fs[2].subs(s)),
                         float(Derivative(gs[2], x, 1).doit().subs(s)))


p = plot(*[f for f in fs + gs],
         (x, -5, 5),
         ylim=(-5, 5),
         legend=True,
         show=False)
colors = ['red', 'green', 'blue', 'brown', 'orange',
          'purple', 'pink', 'gray', 'skyblue', 'yellow']

for o, color in zip(p, colors):
    o.line_color = color

p.show()
p.save('sample7.png')


if __name__ == '__main__':
    main()

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

% ./sample7.py -v
7.
test1 (__main__.MyTestCase) ... ok
test2 (__main__.MyTestCase) ... ok
test3 (__main__.MyTestCase) ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.044s

OK
%

0 コメント:

コメントを投稿