Инструмент подбора кривой Matlab, cftool, функция генерации кода не дает такую же подгонку
Я использую инструмент подгонки кривой 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
Кривая, которую я получаю с сгенерированным кодом:
Так кто-нибудь знает, что идет не так?
-edit- И файл данных Velocity и WhPerkm: http://dl.dropbox.com/u/20782274/data.mat
1 ответ
RE: Я хочу быть в состоянии получить данные с остаточного участка
Один из способов сделать это:
- Выберите "Сохранить в рабочую область..." в меню "Подгонка"
- Убедитесь, что установлен флажок "Сохранить пригодный вывод в структуре с именем MATLAB".
- Обратите внимание на имя переменной. По умолчанию это
output
, - Нажмите "ОК", чтобы отправить данные в рабочую область MATLAB.
В рабочем пространстве MATLAB остатки будут в output.residuals
, Для вашего примера вы можете построить график остатков с помощью, например,
>> plot( Velocity, output.residuals, '.' )