軽量ミニマックス近似式 6 / 或る函数 ε(x) が極値となるところの x を近似的に見つける / Wolfram、FindPeaks[]

参考: Interface(インターフェース) 2017年 09 月号, pp.109-111
 
函数 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)

f[x_] = Sin[Pi x / 2];
g[x_] = 0.07293465 x^5 - 0.64345777 x^3 + 1.570657356 x^1 ;
\[CurlyEpsilon][x_] = f[x] - g[x];
xList = Range[-1, 1, 1/2^8]; (* x 軸を細かく分けて、*)
\[CurlyEpsilon]List = \[CurlyEpsilon][xList]; (* それぞれの x のときの \[CurlyEpsilon] の値を求めて、*)
peaks = FindPeaks[Abs[\[CurlyEpsilon]List]]; (* \[CurlyEpsilon] の峰、谷のところの x のインデックス (区間の両端も含まれる) と値とを見つけて、*)
x0List = xList[[peaks[[;; , 1]]]] (* x のインデックスから x の値を見つける。*)
\[CurlyEpsilon]0List = \[CurlyEpsilon][x0List] (* \[CurlyEpsilon] の峰、谷の値を求める。*)

f:id:ti-nspire:20180225105954p:plain

{-1,-(7/8),-(137/256),-(9/64),9/64,137/256,7/8,1}
{0.000134236,-0.000117696,0.0000714067,-0.0000129394,0.0000129394,-0.0000714067,0.000117696,-0.000134236}

リストのインデックスを指定するときのダブルブラケットは Esc[[EscEsc]]Esc で入力できる。[[]] のままでもよい。
FindValleys 函数はどうやらなさそうなので谷を見つけたいときは FindPeaks 函数の引数の正負を逆にする。