2012-12-03 58 views
1

我正在使用Matlab的曲線擬合工具,cftool,以適應我有的一組點。我面臨的問題是生成代碼函數不會給我與cftool中生成的相同的結果。Matlab的曲線擬合工具,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 

曲線I與生成的代碼獲得: http://i.stack.imgur.com/65d1P.jpg

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

所以呢任何人都知道哪裏出了問題?

CNC中 和速度和WhPerkm數據文件:http://dl.dropbox.com/u/20782274/data.mat

+0

當我使用從CFTOOL http://dl.dropbox.com/u/20782274/data.mat的數據,我得到什麼樣子非常適合:http://i.stack.imgur.com/DnUND.png。 當我使用會話中的數據(http://dl.dropbox.com/u/20782274/test.sfit)和生成的代碼時,我得到了另一個不錯的結果:http://i.stack.imgur。 COM/O9USJ.png。 你可以檢查你使用的數據與生成的代碼? – ManWithSleeve

回答

2

RE:我希望能夠從殘差圖檢索數據要做到這一點

一種方法是:

  1. 從擬合菜單中選擇「保存到工作區...」
  2. 確保「適合輸出保存到MATLAB結構命名爲」是checke d。
  3. 請注意變量的名稱。默認情況下,它是output
  4. 單擊「確定」將數據發送到MATLAB工作區。

在MATLAB工作區中,殘差將在output.residuals中。對於你的榜樣,您可以通過繪製,殘差例如,

>> plot(Velocity, output.residuals, '.')