Matlab曲线拟合工具,cftool,生成代码函数不会给出相同的拟合

时间:2012-12-03 08:21:47

标签: matlab curve-fitting

我正在使用Matlab的曲线拟合工具cftool来拟合我所拥有的一组点。我面临的问题是生成代码函数不会给我与cftool中生成的相同的拟合。

这不是我想要的,因为我希望能够从残差图中检索数据。我也可以从cftool复制该功能并手动完成。但我不明白为什么生成的代码不会给我相同的曲线拟合。

cftool会话文件:http://dl.dropbox.com/u/20782274/test.sfit

Matlab生成的代码:

function [fitresult, gof] = createFit1(Velocity, kWhPerkm)
%CREATEFIT1(VELOCITY,KWHPERKM)
%  Create a fit.
%
%  Data for 'untitled fit 3' fit:
%      X Input : Velocity
%      Y Output: kWhPerkm
%  Output:
%      fitresult : a fit object representing the fit.
%      gof : structure with goodness-of fit info.
%
%  See also FIT, CFIT, SFIT.

%  Auto-generated by MATLAB on 02-Dec-2012 16:36:19


%% Fit: 'untitled fit 3'.
[xData, yData] = prepareCurveData( Velocity, kWhPerkm );

% Set up fittype and options.
ft = fittype( 'a/(0.008*x) + c*x^2 + d*90', 'independent', 'x', 'dependent', 'y' );
opts = fitoptions( ft );
opts.DiffMaxChange = 0.01;
opts.Display = 'Off';
opts.Lower = [-Inf -Inf -Inf];
opts.MaxFunEvals = 1000;
opts.MaxIter = 1000;
opts.StartPoint = [0 0 0];
opts.Upper = [Inf Inf Inf];

% Fit model to data.
[fitresult, gof] = fit( xData, yData, ft, opts );

% Create a figure for the plots.
figure( 'Name', 'untitled fit 3' );

% Plot fit with data.
subplot( 2, 1, 1 );
plot( fitresult, xData, yData, 'predobs' );
% Label axes
xlabel( 'Velocity' );
ylabel( 'kWhPerkm' );
grid on

% Plot residuals.
subplot( 2, 1, 2 );
plot( fitresult, xData, yData, 'residuals' );
% Label axes
xlabel( 'Velocity' );
ylabel( 'kWhPerkm' );
grid on

我使用生成的代码获得的曲线: http://i.stack.imgur.com/65d1P.jpg

我需要的曲线: http://i.stack.imgur.com/p3Egp.jpg

所以有人知道出了什么问题吗?

CNC中 以及Velocity和WhPerkm数据文件:http://dl.dropbox.com/u/20782274/data.mat

1 个答案:

答案 0 :(得分:2)

RE:我希望能够从剩余图中检索数据

一种方法是:

  1. 从“适合”菜单中选择“保存到工作区...”
  2. 确保选中“将拟合输出保存到名为MATLAB的结构”。
  3. 注意变量的名称。默认情况下,它是output
  4. 单击“确定”将数据发送到MATLAB工作区。
  5. 在MATLAB工作区中,残差将在output.residuals中。例如,您可以通过例如

    绘制残差
    >> plot( Velocity, output.residuals, '.' )