区間 ] の
に対して、
をチェビシェフ多項式でフィットさせた係数
が与えられているとします。
係数から、以下の手順で を計算できます。
手順
を区間
に正規化したものを
とします。
チェビシェフ多項式(Chebyshev polynomials) を次の漸化式に従って計算します。
最後、 は次の式で計算できます。
サンプルコード
以下は係数 (
cs) から を計算するScalaでのサンプルコードです。
xは正規化済みとします。高速化のためScalaらしくないコードです。
def calcChebyshev(cs: IndexedSeq[Double], x: Double): Double = {
// x は -1.0 <= x <= +1.0
val n = cs.size;
if (n == 1) {
cs(0);
} else {
val x2 = 2.0 * x;
var result: Double = cs(0) + cs(1) * x;
var i: Int = 2;
var t0: Double = 1.0;
var t1: Double = x;
while (i < n) {
val t2 = x2 * t1 - t0;
result += cs(i) * t2;
t0 = t1;
t1 = t2;
i = i + 1;
}
result;
}
}
※JPLのデータを使うときに必要な計算式です。