【问题标题】:Extract data from curve fit toolbox从曲线拟合工具箱中提取数据
【发布时间】:2013-09-13 17:13:33
【问题描述】:

我正在使用 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 数据点,因为样条图是一种连续图。任何人都可以给我一些建议吗?谢谢!

【问题讨论】:

    标签: matlab


    【解决方案1】:

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

    % 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 是插值数据:

    【讨论】:

    • 我认为插值不够准确。所以我希望直接从样条拟合图中获取数据。这可能吗?
    • @BenjaminAlonsoTan 答案的第一部分解释了一种方式:xi=get(h,'XData'); ...(如果您按照我的答案进行拟合)。另请查看我链接到的答案...
    • @BenjaminAlonsoTan 我并没有真正看到这两种方法的结果有差异(图形上)。
    猜你喜欢
    • 2015-06-20
    • 1970-01-01
    • 1970-01-01
    • 2015-06-27
    • 1970-01-01
    • 2021-08-03
    • 1970-01-01
    • 1970-01-01
    • 2020-02-14
    相关资源
    最近更新 更多