2016年9月9日金曜日

開発環境

Pythonからはじめる数学入門 (Amit Saha (著)、黒川 利明 (翻訳)、オライリージャパン)の7章(初等解析問題を解く)、7.10(プログラミングチャレンジ)、問題7-4(曲線の長さを求める)を取り組んでみる。

問題7-4(曲線の長さを求める)

コード(Emacs)

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

import sympy
import matplotlib.pyplot as plt
import sys


def calc(f, var, start, end):
    d1 = sympy.Derivative(f, var).doit()
    f0 = sympy.sqrt(1 + d1 ** 2)
    return sympy.Integral(f0, (var, start, end)).doit().evalf()

if __name__ == '__main__':
    f = input('Enter a function in one variable: ')
    var = input('Enter the variable: ')
    start = float(input('Enter the start: '))
    end = float(input('Enter the end: '))
    try:
        f = sympy.sympify(f)
    except sympify.SympifyError as err:
        print(err)
    else:
        var = sympy.Symbol(var)
        print(calc(f, var, start, end))
        plt.rcParams['figure.figsize'] = (5, 5)
        p = sympy.plot(f, (var, start, end), show=False)
        p.save('{0}.png'.format(sys.argv[1]))
        p.show()

入出力結果(Terminal, IPython)

$ ./sample4.py sample4_1
Enter a function in one variable: 2 * x**2 + 3 * x + 1
Enter the variable: x
Enter the start: -5
Enter the end: 10
268.372650946022
$ ./sample4.py sample4_2
Enter a function in one variable: 100
Enter the variable: x
Enter the start: -5
Enter the end: 10
15.0000000000000
$ ./sample4.py sample4_3
Enter a function in one variable: x**3 + 2 * x**2 + 3 * x + 4
Enter the variable: x
Enter the start: -5
Enter the end: 10
1320.62772125719
$

0 コメント:

コメントを投稿