matlab - Matlab 中的双插值

标签 matlab interpolation

我想问你一些关于 Matlab 插值的事情。我想知道是否可以在同一行中进行两种不同的插值。我的意思是,例如,在开始时进行线性插值,在中间,大约进行另一种插值,如样条曲线。

主要问题是我做了一个线性插值,一开始它很完美,但过了一段时间后,我认为另一种类型会更好。如果可能的话,我怎样才能在我想改变的地方编码?我试图查看有关 Matlab 的文档,但找不到任何有关修改插值的信息。

非常感谢和问候,

最佳答案

请允许我详细说明我对您的帖子发表的评论。

如果您想使用 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])

哪个会给出 . . .

enter image description here

关于matlab - Matlab 中的双插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12386174/

相关文章:

python - Python与Matlab的通信

matlab - kron 的替代方法

python - Scipy griddata 插值在 NaN 上产生大量结果

c - 浮点线性插值

python - 如何使用 Numpy 将 (1*3) 向量除以 (3*3) 矩阵? a/b 不起作用

java - Matlab 可以生成 Java 源代码吗?

matlab - 在 Matlab 中向矩阵添加 header

python - SciPy插值: precision of methods?

python - 如何在同一行名称中按列插入空白行的值,然后将插入的数据复制到原始 DataFrame?

r - 用 R 插入多个 NA 值