2016-09-22 12 views
3

Matlab(https://uk.mathworks.com/help/matlab/ref/spline.html)の同じアプローチを使用して、Juliaの2つの点を補間しようとしています。 Interpolations(https://github.com/tlycken/Interpolations.jl)ライブラリを試しましたが、作業用スクリプトの作成にいくつか問題があります。JuliaのMatlabスプライン関数

私は2つの点(のは1.5と10.5をしましょう)とそれらの間の5 NAとDataArrays.DataArray {Float64,1}持っている:スプラインを実行するのに十分であるMATLABで

using DataFrames 
using Interpolations 

a = @data([1.5, NA, NA, NA, NA, NA, 10.5]); 

関数。ジュリアでは、の補間関数は3次補間を可能にします。しかし、それはNAと一緒に働いていないようです。どうしたらいいですか?また、それらのポイントを補間するために同じ/類似のアルゴリズムを使用していますか?

+0

NAを補間することは何を意味しますか?あなたは何かを仮定しなければなりません。彼らは均等に宇宙になるはずですか?私は、含めるべき奇妙な行動であると思います。なぜなら、非標準的な暗黙的な仮定が発生しなければならないからです。 –

答えて

2

これらが均等に配置されていると仮定すると、linspaceを使用できる線形補間を想定しています。あなただけの開始、終了、およびその間の値の数が必要です。どんなのNAの間の補間を行うために、より一般的に

linspace(a[1],a[end],sum(isna(a))) 

を、あなたは見つけることができる非NAは

idxs = find(~isna(a)) 

と値してください

for i in 1:length(idxs)-1 
    tmpidxs = idxs[i]:idxs[i+1] 
    a[idxs[i]+1:idxs[i+1]-1] = linspace(a[idxs[i]],a[idxs[i+1]],length(tmpidxs))[2:end-1] 
end 

あなたはそれをきれいにしたり、必要に応じて関数に入れることができます。それは、それぞれの既知の値の間にそれが線形に間隔を置いていると仮定するのは奇妙な仮定です。

+0

私の以前の返信にはタイプミスがありました。いいえ、それらは均等に配置されていません。線形補間は必要ありませんが、3次スプラインが必要です。 – merch

+0

キュービックスプラインは2つのデータポイントしか使用できません.3次多項式には4つの情報が必要です。 –