2016-09-22 2 views
3

Matlab (https://uk.mathworks.com/help/matlab/ref/spline.html)의 동일한 접근법을 사용하여 Julia에서 두 점을 보간하려고합니다. Interpolations (https://github.com/tlycken/Interpolations.jl) 라이브러리를 사용해 보았지만 작동하는 스크립트를 만드는 데 몇 가지 문제가 있습니다.Julia의 Matlab 스플라인 함수

나는 두 지점 (의 1.5과 10.5을 가정 해 봅시다)와 그들 사이의 5 NA와 DataArrays.DataArray {Float64,1}이 있습니다

using DataFrames 
using Interpolations 

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

하는 매트랩는 스플라인을 실행하기에 충분한 것을 기능. 줄리아에서, 함수를 보간하면 함수가 3 차 보간을 허용합니다. 그러나, 그것은 NA와 함께 일하는 것 같지 않습니다. 내가 어떻게 해? 또한, 그들은 같은 포인트를 보간하기 위해 같은/유사한 알고리즘을 사용합니까?

+0

NA를 보간하는 것은 무엇을 의미합니까? 당신은 뭔가를 추측해야합니다. 그들은 균등하게 공간이 있어야합니까? 나는 그것이 발생해야 할 것입니다 비표준 암시 적 가정이 있기 때문에 포함하는 이상한 행동 것이라고 생각합니다. –

답변

2

균등하게 배치되었다고 가정하면 linspace를 사용할 수있는 선형 보간을 가정합니다. 당신은 단지 시작, 종료 및 inbetween 값의 수 필요합니다 어떤의 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

이전 답장에 오타가있었습니다. 아니요, 그들은 균등하지 않습니다. 선형 보간은 필요 없지만 큐빅 스플라인이 필요합니다. – merch

+0

큐브 스플라인은 두 개의 데이터 포인트만으로 수행 할 수 없습니다. 3 차 다항식에는 4 개의 정보가 필요합니다. –