隙間を埋める

元々のデータはY=f(X)で与えられる一次式だから,平面(二次元)の補間を行うのは間違いか.いちいちプログラムを起こすのは面倒なので,元のデータ(X,Y)の補間でテスト.

まず,補間のブレークポイントを指定せず,単純な‘splin’を実行.

    • >ans=splin(X,Y);
    • >plot2d(ans)


Fig.3
元の関数(Fig.2)とデータ範囲が全然ちがうぞ.次に,最小二乗法splineを実行.‘lsq_splin’なら,ブレークポイントを指定できる.ddは0から単純増加する行ベクトルだから,lsq_splinを適用できる可能性は高いか.


case1

    • >dd=linspace(min(X),max(X),500)';
    • >[y, d]=lsq_splin(X,Y,dd);

lsq_splin: Warning: Rank deficiency of the least square matrix.


case2

    • >dd=linspace(min(X),max(X),10)';


case3

    • >dd=linspace(min(X),max(X),50)';
    • >ans=lsq_splin(X,Y,dd);
    • >plot2d(ans)



Fig.4 黒が元データ(X,Y),赤がcase2,青はcase3を示す.splinと違って,Yのデータ範囲は元データに一致している.データが外挿されている(?)X>45では値が発散している(ように見える).