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