Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
三次样条函数在Matlab中的实现_Matlab_Interpolation_Spline - Fatal编程技术网

三次样条函数在Matlab中的实现

三次样条函数在Matlab中的实现,matlab,interpolation,spline,Matlab,Interpolation,Spline,我有两个向量,x和y,它们的定义(随机)如下: x1=[1000-3000-6000-2000-500-1000-3000-5000-6000-4000-2000-500 1999-2999]; y1=[5000 4999 4990 3500 2500 2499 2498 2497 2496 2495 2494 1000-1000-999-998-997-996-995-994] 以下是通过简单地输入plot(x1,y1)获得的plot I: 是否有方法使用interp1命令从上述数据生成平滑

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

以下是通过简单地输入plot(x1,y1)获得的plot I:

是否有方法使用interp1命令从上述数据生成平滑曲线?有人告诉我,我应该使用三次样条曲线来实现所需的绘图,但是,由于我是Matlab新手,我不知道如何实现这样的解决方案。提前谢谢

编辑:我尝试按如下方式实现它,但我得到了一个看起来很可怕的情节!
x1_温度=-6000:100:6000;
pc=pchip(x1,y1,x1_温度);
图(x1,y1,'o',x1_温度,pc,'-')


我应该如何修改此代码以生成正确的绘图?

我认为您对插值的内容感到困惑。您应该分别对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-');

你有没有读过他的文档?在下,它将显示各种样条线选项。就个人而言,我建议您从
pchip
开始,而不是使用三次样条曲线,除非您有令人信服的理由使用纯三次样条曲线。阅读文档,自己试试,然后再问一次(用代码!!!)如果你卡住了。你有一个非单调向量x,但有一个单调向量y。因此,不应使用
interp1(x1,y1,MyNewsPointsOnX,'pchip')
进行插值,而应使用
interp1(y1,x1,MyNewsPointsOnY,'pchip')
。使用
MyNewsPointsOnY=linspace(最小(y1),最大(y1),1000)@Dan我已编辑了我的原始帖子,以包含我解决此问题的尝试。@obchardon使用您提供的代码在绘图函数中包含哪些参数来绘制所需的绘图?谢谢您的回复。你是对的,我不知道应该插入什么。您的解决方案符合我的想法:)