【问题标题】:Matlab spline function in JuliaJulia中的Matlab样条函数
【发布时间】:2016-09-22 15:08:40
【问题描述】:

我正在尝试使用与 Matlab (https://uk.mathworks.com/help/matlab/ref/spline.html) 相同的方法在 Julia 中插入两个点。我已经尝试过 Interpolations (https://github.com/tlycken/Interpolations.jl) 库,但在创建工作脚本时遇到了几个问题。

我有一个 DataArrays.DataArray{Float64,1} 有两个点(比如说 1.5 和 10.5),它们之间有 5 个 NA:

using DataFrames
using Interpolations

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

在 Matlab 中运行 spline 函数就足够了。在 Julia 中,interpolate 函数允许三次插值。但是,它似乎不适用于 NA。我该怎么做?另外,他们是否使用相同/类似的算法来插入这些点?

【问题讨论】:

  • 插入 NA 意味着什么?你必须假设一些事情。他们应该是均匀的空间吗?我认为包含在内是一种奇怪的行为,因为必须发生非标准的隐含假设。

标签: matlab interpolation julia


【解决方案1】:

如果您假设它们是均匀分布的,那么您就是在假设可以使用 linspace 的线性插值。您只需要开始、结束和中间值的数量:

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

更一般地说,要在任何 NA 之间进行插值,您可以找到非 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

如果需要,您可以清理它或将其放入函数中。虽然假设每个已知值之间应该是线性间隔的,但这是一个奇怪的假设。

【讨论】:

  • 我之前的回复有错字。不,它们的间距不均匀。我不需要线性插值,而是三次样条。
  • 你不能只用两个数据点做三次样条:三次多项式需要 4 条信息。
猜你喜欢
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多