軽量ミニマックス近似式 10 of 10 まとめ

参考: Interface(インターフェース) 2017年 09 月号, pp.109-111
関連: 軽量ミニマックス近似多項式の求め方 / Python - Qiita

 
函数の “精度は低いが誤差がミニマックスになっている近似多項式” を下の手順で求める。

  1. ミニマックス近似多項式に近い多項式をチェビシェフ補間で求める。
  2. 真値とチェビシェフ近似との差の極値を見つける。
  3. いくつかあるその極値の大きさが全部同じになるまで (すなわちミニマックスになるまで) 多項式の係数を補正する。

 
.py
ミニマックス近似多項式

実行結果:

#0 isMinMax? False
0 ~ N 次の係数: [0.0, 1.5706573558985499, -0.0, -0.64345777331469001, 0.0, 0.072934648358349993]
誤差の極値の位置 x: [-1.0, -0.873260498046875, -0.535888671875, -0.1424560546875, 0.1424560546875, 0.535888671875, 0.873260498046875, 1.0]
誤差の極値の大きさ ε: [0.00013423094220987863, -0.00011772771359030987, 7.140718466347451e-05, -1.294246151678502e-05, 1.294246151678502e-05, -7.140718466347451e-05, 0.00011772771359030987, -0.00013423094220987863]

#1 isMinMax? False
0 ~ N 次の係数: [0.0, 1.57031993870501, 0.0, -0.64204567341571006, 0.0, 0.0717827295452]
誤差の極値の位置 x: [-1.0, -0.873260498046875, -0.535888671875, -0.1424560546875, 0.1424560546875, 0.535888671875, 0.873260498046875, 1.0]
誤差の極値の大きさ ε: [0.00013423094220987863, -0.00011772771359030987, 7.140718466347451e-05, -1.294246151678502e-05, 1.294246151678502e-05, -7.140718466347451e-05, 0.00011772771359030987, -0.00013423094220987863]

#2 isMinMax? False
0 ~ N 次の係数: [0.0, 1.57032045080772, 0.0, -0.64211499896079005, 0.0, 0.071862167810559999]
誤差の極値の位置 x: [-1.0, -0.905487060546875, -0.625152587890625, -0.218994140625, 0.218994140625, 0.625152587890625, 0.905487060546875, 1.0]
誤差の極値の大きさ ε: [5.6994834499946023e-05, -6.4969990688279466e-05, 7.6652020768008811e-05, -6.7043717586368068e-05, 6.7043717586368068e-05, -7.6652020768008811e-05, 6.4969990688279466e-05, -5.6994834499946023e-05]

#3 isMinMax? False
0 ~ N 次の係数: [0.0, 1.57032001920971, 0.0, -0.64211316694128007, 0.0, 0.071860854119300002]
誤差の極値の位置 x: [-1.0, -0.900115966796875, -0.6214599609375, -0.221435546875, 0.221435546875, 0.6214599609375, 0.900115966796875, 1.0]
誤差の極値の大きさ ε: [6.7619657490025631e-05, -6.7877736576016368e-05, 6.7656670622362469e-05, -6.7630008892760607e-05, 6.7630008892760607e-05, -6.7656670622362469e-05, 6.7877736576016368e-05, -6.7619657490025631e-05]

#4 isMinMax? False
0 ~ N 次の係数: [0.0, 1.5703200191564399, 0.0, -0.64211316698839005, 0.0, 0.071860854234140001]
誤差の極値の位置 x: [-1.0, -0.900115966796875, -0.62158203125, -0.221466064453125, 0.221466064453125, 0.62158203125, 0.900115966796875, 1.0]
誤差の極値の大きさ ε: [6.7706387729904449e-05, -6.7706387732124895e-05, 6.7706435955217081e-05, -6.77063899374164e-05, 6.77063899374164e-05, -6.7706435955217081e-05, 6.7706387732124895e-05, -6.7706387729904449e-05]

#5 isMinMax? True
0 ~ N 次の係数: [0.0, 1.5703200191564399, 0.0, -0.64211316698839005, 0.0, 0.071860854234140001]
誤差の極値の位置 x: [-1.0, -0.900115966796875, -0.62158203125, -0.221466064453125, 0.221466064453125, 0.62158203125, 0.900115966796875, 1.0]
誤差の極値の大きさ ε: [6.7706402189893211e-05, -6.7706402182232672e-05, 6.7706402185341297e-05, -6.7706402185452319e-05, 6.7706402185452319e-05, -6.7706402185341297e-05, 6.7706402182232672e-05, -6.7706402189893211e-05]

チェビシェフ近似多項式: 0.072934648358*x**5 - 0.643457773315*x**3 + 1.570657355899*x
ミニマックス近似多項式: 0.071860854234*x**5 - 0.642113166988*x**3 + 1.570320019156*x

真値とチェビシェフ近似との差の最大値: 0.000134231
真値とミニマックス近似との差の最大値: 0.000067706

求まった多項式を実装するときは c1 x + c3 x^3 + c5 x^5 = x (c1 + x (x (c3 + c5 x^2))) のように x でどんどん括って計算量を減らす。
 
f:id:ti-nspire:20180330081226p:plain:w400
水色が真値とチェビシェフ近似との差。オレンジが真値とミニマックス近似との差。
チェビシェフ近似は中心付近は精度が高いが区間両端に行くほど誤差が大きくなる。
ミニマックス近似は区間全体での誤差が一定の範囲に収まっている。