我想问你关于Matlab中的插值问题。我想知道是否可以在同一行中进行两次不同的插值。我的意思是,例如,在开始时做一个线性插值,在中间,大约,做另一种插值,如样条曲线。
主要的问题是我已经完成了线性插值并且在开始时它是完美的,但在某些点之后,我认为它会更好。如果可以,我该如何编码我想要更改的位置?我试过检查有关Matlab的文档,但我找不到任何关于修改插值的内容。
非常感谢提前和问候,
答案 0 :(得分:3)
请允许我详细说明我在你的帖子上发表的评论。
如果要使用带有拆分的2个不同函数从输入数组创建输出数组,可以使用数组索引范围,如下面的代码示例所示
x = randn(20,1); %//your input data - 20 random numbers for demonstration
threshold = 5; %//index where you want the change of algorithm
y = zeros(size(x)); %//output array of zeros the same size as input
y(1:threshold) = fun1(x(1:threshold));
y(1+threshold:end) = fun2(x(1+threshold:end));
如果您愿意,可以跳过y
的预分配,并将其他数据连接到输出的末尾。如果函数返回相对于输入元素数量的不同数量的输出元素,则此功能特别有用。其语法如下所示。
y = fun1(x(1:threshold));
y = [y; fun2(x(1+threshold:end))];
修改强>
回复下面的帖子,这是一个完整的例子。 。
clc; close all
x = -5:5; %//your x-range
y = [1 1 0 -1 -1 0 1 1 1 1 1]; %//the function to interpolate
t = -5:.01:5; %//sampling interval for output
xIdx = 5; %//the index on the x-axis where you want the split to occur
tIdx = floor(numel(t)/numel(x)*xIdx);%//need to calculate as it is at a different sample rate
out = pchip(x(1:xIdx),y(1:xIdx),t(1:tIdx));
out = [out spline(x((1+xIdx):end),y((1+xIdx):end),t((1+tIdx):end))];
%//PLOTTING
plot(x,y,'o',t,out,'-',[x(xIdx) x(xIdx)], [-1.5 1.5], '-')
legend('data','output','split',4);
ylim ([-1.5 1.5])
哪个会给。 。 。