【发布时间】:2016-04-27 22:55:31
【问题描述】:
我经常使用向量描述的离散曲线,比如x 和y,这意味着每个点(x(k),y(k)) 都位于曲线上。注意x 和y 通常不是单调递增的。
然后我需要以不同的方式表示数据,因为我需要知道 x 等于一组给定值的 y 值,即我想要给定向量 xq 的向量 yr 使得 (xq(k),yr(k))都是原始曲线的良好近似。所以通常会使用插值,但是
yr = interp1(x,y,xq)
导致错误
The grid vectors are not strictly monotonic increasing.
我该怎么做(以一种很好的方式)?请注意,我想保留x 和y 给出的曲线的形状(相邻节点之间的连接)。
示例问题
假设您有数据表示 2D (x,y) 空间中的圆。如果您需要在不同的 x 网格上表示该圆圈,您会怎么做?
PS:我将提供我当前的方法作为答案,但欢迎其他方法,特别是如果它们“更好”或“更简单”? (原谅我这些主观用语)
【问题讨论】:
-
您使用的是哪个版本的 MATLAB?这在 R2015b 中适用于我:
interp1([1,3,2],[3,1,2],1.2)。 -
@Dev-iL:当输入不唯一时会引发错误(MatlabR2013a)。传递未排序的唯一数据,它只是排序(这不是我在这里所期望的)。
-
我使用 R2015a。您的代码示例有效,但不是一般。当一个值在
x中出现两次时,它会引发错误。即使没有错误,输出也不正确。它返回一个对应于曲线一部分的值,但不保留曲线本身。 -
由于您正在处理看起来像参数曲线的东西,因此您应该研究 2d 插值函数而不是 1d。如果曲线不是参数化的(即
y是x的函数),请考虑调用uniquewith the'stable'flag 以保留输入值的顺序。也可以考虑sortrows。 -
请详细说明如何使用二维插值函数。 y 不是 x 的显式函数,而是隐式函数,即 F(x,y)=0。感谢您指出
unique上的'stable'标志。它绝对可以用来减少输出向量xr中的冗余。但是如何使用它来进行插值对我来说并不是很清楚,所以如果你能解释一下?感谢您的帮助。
标签: matlab interpolation