74 lines
2.1 KiB
Matlab
74 lines
2.1 KiB
Matlab
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
% GTSAM Copyright 2010, Georgia Tech Research Corporation,
|
|
% Atlanta, Georgia 30332-0415
|
|
% All Rights Reserved
|
|
% Authors: Frank Dellaert, et al. (see THANKS for the full author list)
|
|
%
|
|
% See LICENSE for the license information
|
|
%
|
|
% @brief Plot visualizations of residuals, residual derivatives, and weights for the various mEstimators.
|
|
% @author Varun Agrawal
|
|
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
|
|
|
% import gtsam.*
|
|
|
|
close all;
|
|
|
|
x = linspace(-10, 10, 1000);
|
|
|
|
%% Define all the mEstimator models and plot them
|
|
|
|
c = 1.3998;
|
|
fairNoiseModel = gtsam.noiseModel.mEstimator.Fair(c);
|
|
plot_m_estimator(x, fairNoiseModel, 'Fair', 1, 'fair.png')
|
|
|
|
c = 1.345;
|
|
huberNoiseModel = gtsam.noiseModel.mEstimator.Huber(c);
|
|
plot_m_estimator(x, huberNoiseModel, 'Huber', 2, 'huber.png')
|
|
|
|
c = 0.1;
|
|
cauchyNoiseModel = gtsam.noiseModel.mEstimator.Cauchy(c);
|
|
plot_m_estimator(x, cauchyNoiseModel, 'Cauchy', 3, 'cauchy.png')
|
|
|
|
c = 1.0;
|
|
gemanmcclureNoiseModel = gtsam.noiseModel.mEstimator.GemanMcClure(c);
|
|
plot_m_estimator(x, gemanmcclureNoiseModel, 'Geman-McClure', 4, 'gemanmcclure.png')
|
|
|
|
c = 2.9846;
|
|
welschNoiseModel = gtsam.noiseModel.mEstimator.Welsch(c);
|
|
plot_m_estimator(x, welschNoiseModel, 'Welsch', 5, 'welsch.png')
|
|
|
|
c = 4.6851;
|
|
tukeyNoiseModel = gtsam.noiseModel.mEstimator.Tukey(c);
|
|
plot_m_estimator(x, tukeyNoiseModel, 'Tukey', 6, 'tukey.png')
|
|
|
|
%% Plot rho, psi and weights of the mEstimator.
|
|
function plot_m_estimator(x, model, plot_title, fig_id, filename)
|
|
w = zeros(size(x));
|
|
rho = zeros(size(x));
|
|
for i = 1:size(x, 2)
|
|
w(i) = model.weight(x(i));
|
|
rho(i) = model.loss(x(i));
|
|
end
|
|
|
|
psi = w .* x;
|
|
|
|
figure(fig_id);
|
|
subplot(3, 1, 1);
|
|
plot(x, rho, 'LineWidth',2);
|
|
title('rho function');
|
|
xlim([-5, 5]);
|
|
subplot(3, 1, 2);
|
|
plot(x, psi, 'LineWidth',2);
|
|
title('influence function');
|
|
xlim([-5, 5]);
|
|
subplot(3, 1, 3);
|
|
plot(x, w, 'LineWidth',2);
|
|
title('weight function');
|
|
xlim([-5, 5]);
|
|
|
|
sgtitle(plot_title, 'FontSize', 26);
|
|
|
|
saveas(figure(fig_id), filename);
|
|
end
|