Matlab中的三次样条函数实现

时间:2016-03-16 08:03:41

标签: matlab interpolation spline

我有两个向量,x和y,它们被定义(随机),如下所示:  x1=[1000 3000 5000 6000 4000 2000 500 0 -1000 -3000 -5000 -6000 -4000 -2000 -500 1 999 2999 4999]; y1=[5000 4999 4990 3500 2500 2499 2498 2497 2496 2495 2494 1000 -1000 -999 -998 -997 -996 -995 -994];

以下是我通过简单地输入剧情(x1,y1)获得的情节:

Plot of raw data

有没有办法使用interp1命令从上面的数据生成平滑曲线?我被告知我应该使用三次样条来实现所需的绘图,但是,因为我是Matlab的新手,所以我不知道如何实现这样的解决方案。提前谢谢!

编辑:我试图按照以下方式实施它,但我看到了一个可怕的情节! x1_temp=-6000:100:6000; pc=pchip(x1,y1,x1_temp); plot(x1,y1,'o',x1_temp,pc,'-');

如何修改此代码以生成正确的图?

1 个答案:

答案 0 :(得分:3)

我认为你对插值的内容感到困惑。您应该分别插入x1和y1,然后将它们相互映射。以下示例生成平滑曲线:

x1=[1000 3000 5000 6000 4000 2000 500 0   -1000 -3000 -5000 -6000 -4000 -2000 -500 1   999 2999 4999];
y1=[5000 4999 4990 3500 2500 2499 2498 2497 2496 2495  2494  1000  -1000 -999 -998 -997 -996 -995 -994];

s = [0,cumsum(sqrt(diff(x1).^2+diff(y1).^2))]
N = length(s);

figure();
plot(x1,y1);
hold on

s_fine = interp1(linspace(0,1,N),s,linspace(0,1,5*N));
pcx=interp1(s,x1,s_fine,'spline');
pcy=interp1(s,y1,s_fine,'spline');
plot(pcx,pcy,'r-');