与えられたリストについて1行で微分・積分【Python】

Dec. 6, 2019, 4:36 a.m. edited Dec. 21, 2019, 5:14 a.m.

#数学  #Python 

リストに\(f(x)\)の中身が入っているとする。例えば、\(f(x)=x^2\)で\(x\in[-5,5]\cap\mathbb{Z}\)のとき

>>> a = [25, 16, 9, 4, 1, 0, 1, 4, 9, 16, 25]

となる1

微分

微分は1つ前の要素との差なので、要素数が1つ減り、

>>> [now - prev for prev, now in zip(a, a[1:])]
[-9, -7, -5, -3, -1, 1, 3, 5, 7, 9]

となる。

積分

積分はひたすら足していけば良いので([25, 25+16, 25+16+9, ...])、

>>> import itertools
>>> list(itertools.accumulate(a))
[25, 41, 50, 54, 55, 55, 56, 60, 69, 85, 110]

となる。

なお、\(f'(x)=2x\)や\(\int f(x)dx=\frac{1}{3}x^3+{\rm C}\)(\({\rm C}\)は積分定数)と値がずれているが、これは\(x\)が整数という離散値をとっているためで、リストaを作るときにもっと値を細かく刻めば一致するようになる。


  1. [x ** 2 for x in range(-5, 6)]で作れる。