ベクトルの微分 曲線の長さ、対数関数、速度ベクトル、置換積分法、部分分数
続 解析入門 (原書第2版) (S.ラング(著)、松坂 和夫(翻訳)、片山 孝次(翻訳)、岩波書店)の第2章(ベクトルの微分)、2(曲線の長さ)の練習問題5-a、b.の解答を求めてみる。
よって、 求める曲線の長さは
ここから
コード
#!/usr/bin/env python3
from unittest import TestCase, main
from sympy import Matrix, Derivative, log, Integral, sqrt
from sympy.plotting import plot_parametric
from sympy.abc import t, u
print('5.')
X = Matrix([t, log(t)])
X1 = Derivative(X, t, 1).doit()
class Test(TestCase):
def test_a(self):
self.assertEqual(
float(Integral(X1.norm(), (t, 1, 2)).doit()),
float(
sqrt(5) - sqrt(2) +
log((3 - sqrt(5)) / (2 * (3 - 2 * sqrt(2)))) / 2
)
)
def test_b(self):
self.assertEqual(
float(Integral(X1.norm(), (t, (3, 5))).doit()),
float(
sqrt(26) - sqrt(10) +
log((sqrt(26) - 1) / (sqrt(26) + 1) *
(sqrt(10) + 1) / (sqrt(10) - 1)) / 2
)
)
p = plot_parametric(
(*X, (t, 0.1, 1)),
(*X, (t, 1, 2)),
(*X, (t, 2, 3)),
(*X, (t, 3, 5)),
(*X, (t, 5, 6)),
show=False,
)
colors = ['red', 'green', 'blue', 'brown', 'orange',
'purple', 'pink', 'gray', 'skyblue', 'yellow']
for o, color in zip(p, colors):
o.line_color = color
print(o, color)
p.save('sample5.png')
p.show()
if __name__ == "__main__":
main()
入出力結果
% ./sample5.py -v
5.
parametric cartesian line: (t, log(t)) for t over (0.1, 1.0) red
parametric cartesian line: (t, log(t)) for t over (1.0, 2.0) green
parametric cartesian line: (t, log(t)) for t over (2.0, 3.0) blue
parametric cartesian line: (t, log(t)) for t over (3.0, 5.0) brown
parametric cartesian line: (t, log(t)) for t over (5.0, 6.0) orange
test_a (__main__.Test) ... ok
test_b (__main__.Test) ... ok
----------------------------------------------------------------------
Ran 2 tests in 3.822s
OK
%