2017-07-04 15 views
2

私は5分ごとに潮汐観測を行い、1分間隔でそれらを補間したい。interp値の補間なしでinterp1のスプライン補間

私はPythonでやろうとしましたが、時間がかかるので、私はMATLABに移動しました。問題は、splineメソッドがNaN値を満たすことです。

下の画像では問題が説明されていますが、NaN値を入力せずにスプライン補間を行いたいとします。どうすれば私のinterp1機能がそうすることができますか?

the image explain it

file='NANTES_5min_nan.txt' 
[date, hauteur] = lecture_hfs(file); 
vect=[date(1):1/24/60:date(end)]; 
h_interp=interp1(date,hauteur,vect,'spline'); 

h_interp_lin=interp1(date,hauteur,vect,'linear'); 

2番目の図は、Python補間です。結果は良好ですが、残念ながら1ヶ月のデータしかありません。私は、全体のデータ(17年)のためにそれを適用したい場合は、実行が代わりにクエリ点として直接vectを使用してのhere is the link for python figure

答えて

0

を終了したことがない、あなたはNaNhauteurNaN値近くにあるvectの値を置き換えることができます。

temp = date; % copy of the original dates 
temp(isnan(hauteur))=NaN; % set the values which are NaN in hauteur to NaN 
h_interp = interp1(date,hauteur,interp1(date,temp,vect),'spline'); % the inner interpolation results in vect with NaNs where appropriate 

少し厄介とよりエレガントな方法があるかもしれませんが、私は別の補間をネストすることによってこの問題を解決する可能性に魅了された:これは、別の(線形)補間を使用して行うことができます。

+0

ありがとうございました@Leander、それはうまく動作します。私は補間を行った後にこれらの2行を追加すると考えています: 'idx = find(isnan(h_interp_lin)); h_interp(idx)= nan; '補間によって埋められたNaN値を削除するには、あなたのメソッドを優先します。 –

+0

これは当然です。あなたは 'find()'をスキップすることができますが、それは必要ではありません。 –

+0

はい、私はMATLABでコーディングするのに慣れていません。しかし、それをやることを始める絶好の機会です。良い一日を –