ニュートン補間の実装
まずは商差。
とりあえず、再帰で実装
DEF DIVIDED(X[],Y[],S,N)
IF N>=1 THEN
RETURN (DIVIDED(X,Y,S+1,N-1)-DIVIDED(X,Y,S,N-1)))/(X[S+N]-X[S])
ELSE
RETURN Y[S]
ENDIF
END
これをまともに計算すると計算量がO(2^N)になるので、動的計画法に直す。
そのままS,Nを添え字とするDPテーブルを作ると良い。
漸化式もそのまま
DP[S,N]=(DP[S+1,N-1]-DP[S,N-1])/(X[S+N]-X[S])
でやるだけ。
DIM DP#[100,100]
DEF DIVIDED(X[],Y[],S,N)
VAR I%,J%
FOR I%=0 TO N+S
DP#[I%,0]=Y[I%]
NEXT I%
FOR I%=1 TO N
FOR J%=0 TO N+S-I%
DP#[J%,I%]=(DP#[J%+1,I%-1]-DP#[J%,I%-1])/(X[J%+I%]-X[J%])
NEXT J%
NEXT I%
RETURN DP#[S,N]
END
実はNの次元は要らなかったりする。