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)); |