隙間を埋める
元々のデータは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では値が発散している(ように見える).