軽量ミニマックス近似式 5 / 或る函数 ε(x) が極値となるところの x を見つける / sympy

参考: Interface(インターフェース) 2017年 09 月号, pp.109-111
 
ε(x) の導函数 ε'(x) を求めて方程式 ε'(x) = 0 を x について解けばよい。
 
函数 f(x) とその近似式 g(x) との差を ε(x) とする。
f(x) = sin(pi * x / 2)
g(x) = 0.07293465 * x^5 - 0.64345777 * x^3 + 1.570657356 * x^1
ε(x) = f(x) - g(x)

from sympy import *
import numpy as np

x = Symbol("x")
f = sin(pi * x / 2)
g = 0.07293465 * x**5 - 0.64345777 * x**3 + 1.570657356 * x**1
ε = f - g
εDot = diff(ε, x)
sol=[nsolve(εDot,x,n) for n in np.linspace(-1, 1, 6)]
print(sol)
plot(ε, (x, -1, 1))

f:id:ti-nspire:20180222174522p:plain:w600
solve() ではなく nsolve() で guess を適切に指定すれば一応 6 点全部が求まる。