0

我正在使用 matlab 并且我有一组 x 和 y 数据,

x=[0,1.25,1.88,2.5,5,6.25,6.88,7.19,7.5,10,12.5,15,20];
y=[-85.93,-78.82,-56.95,-34.56,-33.57,-39.64,-41.96,-49.28,-66.6,-66.61,-59.16,-48.78,-41.53];

我想使用具有样条函数的曲线拟合工具箱来生成图形,所以我这样做了,

cftool

它会将我带到工具箱,然后我可以选择样条拟合。我在想是否有可能从生成的样条图中提取数据点。这意味着我可能会比我输入的数据点更多的 x 和 y 数据点,因为样条图是一种连续图。任何人都可以给我一些建议吗?谢谢!

4

1 回答 1

0

您可以执行与cftoolwith执行的样条拟合的等效项fit,例如参见此处此处或此处:

% perform spline fit without cftool
ft = fittype('cubicspline');
coeff=fit(x,y,ft); 

% use plot to display the interpolating polynomial 
% (relying on internal plot settings)
figure
h=plot(coeff,x,y,'o');

% extract the *interpolated* curve from the figure
xi=get(h,'XData');
yi=get(h,'YData');

重新绘制它只是为了表明我们可以:

在此处输入图像描述

但是,如果您只是想插值,请按照 Fraukje 的解释here。定义一个更精细的网格x并使用该interp1函数,如下例所示(与之前相同的 x,y 输入数据):

% interpolate 
Ni = 100;
xi = linspace(x(1),x(end),Ni);
yi = interp1(x,y,xi,'spline');

现在xi,yi是插值数据:

在此处输入图像描述

于 2013-09-13T07:42:45.357 回答