78 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Matlab
		
	
	
		
		
			
		
	
	
			78 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			Matlab
		
	
	
|  | %----------------------------------------------------------------------- | ||
|  | % eliminate | ||
|  | 
 | ||
|  | % the combined linear factor | ||
|  | Ax2 = [ | ||
|  | -5., 0. | ||
|  | +0.,-5. | ||
|  | 10., 0. | ||
|  | +0.,10. | ||
|  | ]; | ||
|  | 
 | ||
|  | Al1 = [ | ||
|  | 5., 0. | ||
|  | 0., 5. | ||
|  | 0., 0. | ||
|  | 0., 0. | ||
|  | ]; | ||
|  | 
 | ||
|  | Ax1 = [ | ||
|  | 0.00,  0. % f4 | ||
|  | 0.00,  0. % f4 | ||
|  | -10.,  0. % f2 | ||
|  | 0.00,-10. % f2 | ||
|  | ]; | ||
|  | 
 | ||
|  | x2 = 1; | ||
|  | l1 = 2; | ||
|  | x1 = 3; | ||
|  | 
 | ||
|  | % the RHS | ||
|  | b2=[-1;1.5;2;-1]; | ||
|  | sigmas = [1;1;1;1]; | ||
|  | model4 = gtsamSharedDiagonal(sigmas); | ||
|  | combined = gtsamJacobianFactor(x2, Ax2,  l1, Al1, x1, Ax1, b2, model4); | ||
|  | 
 | ||
|  | % eliminate the first variable (x2) in the combined factor, destructive ! | ||
|  | actualCG = combined.eliminateFirst(); | ||
|  | 
 | ||
|  | % create expected Conditional Gaussian | ||
|  | R11 = [ | ||
|  | 11.1803,  0.00 | ||
|  | 0.00, 11.1803 | ||
|  | ]; | ||
|  | S12 = [ | ||
|  | -2.23607, 0.00 | ||
|  | +0.00,-2.23607 | ||
|  | ]; | ||
|  | S13 = [ | ||
|  | -8.94427, 0.00 | ||
|  | +0.00,-8.94427 | ||
|  | ]; | ||
|  | d=[2.23607;-1.56525]; | ||
|  | expectedCG = gtsamGaussianConditional(x2,d,R11,l1,S12,x1,S13,[1;1]); | ||
|  | % check if the result matches | ||
|  | CHECK('actualCG.equals(expectedCG,1e-5)',actualCG.equals(expectedCG,1e-4)); | ||
|  | 
 | ||
|  | % the expected linear factor | ||
|  | Bl1 = [ | ||
|  | 4.47214, 0.00 | ||
|  | 0.00, 4.47214 | ||
|  | ]; | ||
|  | 
 | ||
|  | Bx1 = [ | ||
|  | % x1 | ||
|  | -4.47214,  0.00 | ||
|  | +0.00, -4.47214 | ||
|  | ]; | ||
|  | 
 | ||
|  | % the RHS | ||
|  | b1= [0.0;0.894427]; | ||
|  | 
 | ||
|  | model2 = gtsamSharedDiagonal([1;1]); | ||
|  | expectedLF = gtsamJacobianFactor(l1, Bl1, x1, Bx1, b1, model2); | ||
|  | 
 | ||
|  | % check if the result matches the combined (reduced) factor | ||
|  | % FIXME: JacobianFactor/GaussianFactor mismatch | ||
|  | %CHECK('combined.equals(expectedLF,1e-5)',combined.equals(expectedLF,1e-4)); |