www.gusucode.com > curvefit 案例源码程序 matlab代码 > curvefit/RobustFittingExample.m
%% Robust Fitting % This example shows how to compare the effects of excluding outliers and % robust fitting. The example shows how to exclude outliers at an arbitrary % distance greater than 1.5 standard deviations from the model. The steps % then compare removing outliers with specifying a robust fit which gives % lower weight to outliers. % % Copyright 2015 The MathWorks, Inc. %% % Create a baseline sinusoidal signal: xdata = (0:0.1:2*pi)'; y0 = sin(xdata); %% % Add noise to the signal with nonconstant variance. % Response-dependent Gaussian noise gnoise = y0.*randn(size(y0)); % Salt-and-pepper noise spnoise = zeros(size(y0)); p = randperm(length(y0)); sppoints = p(1:round(length(p)/5)); spnoise(sppoints) = 5*sign(y0(sppoints)); ydata = y0 + gnoise + spnoise; %% % Fit the noisy data with a baseline sinusoidal model, and specify 3 output % arguments to get fitting information including residuals. f = fittype('a*sin(b*x)'); [fit1,gof,fitinfo] = fit(xdata,ydata,f,'StartPoint',[1 1]); %% % Examine the information in the fitinfo structure. fitinfo %% % Get the residuals from the fitinfo structure. residuals = fitinfo.residuals; %% % % Identify "outliers" as points at an arbitrary distance greater than 1.5 % standard deviations from the baseline model, and refit the data with the % outliers excluded. I = abs( residuals) > 1.5 * std( residuals ); outliers = excludedata(xdata,ydata,'indices',I); fit2 = fit(xdata,ydata,f,'StartPoint',[1 1],... 'Exclude',outliers); %% % Compare the effect of excluding the outliers with the effect of giving % them lower bisquare weight in a robust fit. fit3 = fit(xdata,ydata,f,'StartPoint',[1 1],'Robust','on'); %% % Plot the data, the outliers, and the results of the fits. Specify an % informative legend. plot(fit1,'r-',xdata,ydata,'k.',outliers,'m*') hold on plot(fit2,'c--') plot(fit3,'b:') xlim([0 2*pi]) legend( 'Data', 'Data excluded from second fit', 'Original fit',... 'Fit with points excluded', 'Robust fit' ) hold off %% % Plot the residuals for the two fits considering outliers: figure plot(fit2,xdata,ydata,'co','residuals') hold on plot(fit3,xdata,ydata,'bx','residuals') hold off