40 lines
882 B
Matlab
40 lines
882 B
Matlab
%-----------------------------------------------------------------------
|
|
% frank01.m: try conjugate gradient on our example graph
|
|
%-----------------------------------------------------------------------
|
|
|
|
% get matrix form H and z
|
|
fg = createGaussianFactorGraph();
|
|
ord = Ordering;
|
|
ord.push_back('x1');
|
|
ord.push_back('x2');
|
|
ord.push_back('l1');
|
|
|
|
[H,z] = fg.matrix(ord);
|
|
|
|
% form system of normal equations
|
|
A=H'*H
|
|
b=H'*z
|
|
|
|
% k=0
|
|
x = zeros(6,1)
|
|
g = A*x-b
|
|
d = -g
|
|
|
|
for k=1:5
|
|
alpha = - (d'*g)/(d'*A*d)
|
|
x = x + alpha*d
|
|
g = A*x-b
|
|
beta = (d'*A*g)/(d'*A*d)
|
|
d = -g + beta*d
|
|
end
|
|
|
|
% Do gradient descent
|
|
% fg2 = createGaussianFactorGraph();
|
|
% zero = createZeroDelta();
|
|
% actual = fg2.gradientDescent(zero);
|
|
% CHECK(assert_equal(expected,actual,1e-2));
|
|
|
|
% Do conjugate gradient descent
|
|
% actual2 = fg2.conjugateGradientDescent(zero);
|
|
% CHECK(assert_equal(expected,actual2,1e-2));
|