Вопрос по matlab, curve-fitting – Инструмент подбора кривой Matlab, cftool, функция генерации кода не дает такую же подгонку

1

Я использую инструмент подгонки кривой 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

Так кто-нибудь знает, что идет не так?

-edit- И файл данных Velocity и WhPerkm:http://dl.dropbox.com/u/20782274/data.mat

Когда я использую данные изdl.dropbox.com/u/20782274/data.mat в CFTOOL я получаю то, что похоже на хорошую подгонку:i.stack.imgur.com/DnUND.png, Когда я использую данные в сессии (dl.dropbox.com/u/20782274/test.sfit ) и сгенерированный код, я получаю еще одну хорошую подгонку:i.stack.imgur.com/O9USJ.png, Можете ли вы проверить данные, которые вы используете с сгенерированным кодом? ManWithSleeve

Ваш Ответ

1   ответ
2

Я хочу иметь возможность получить данные с остаточного участка

Один из способов сделать это:

Выберите «Сохранить в рабочую область ...» в меню «Подгонка»Убедитесь, что установлен флажок «Сохранить пригодный вывод в структуре с именем MATLAB».Обратите внимание на имя переменной. По умолчанию этоoutput.Нажмите «ОК», чтобы отправить данные в рабочую область MATLAB.

В рабочем пространстве MATLAB остатки будут вoutput.residuals, Для вашего примера вы можете построить график остатков с помощью, например,

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

Похожие вопросы