区間 ] の に対して、 をチェビシェフ多項式でフィットさせた係数 が与えられているとします。
係数から、以下の手順で を計算できます。
手順
を区間 に正規化したものを とします。
チェビシェフ多項式(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のデータを使うときに必要な計算式です。