minor speedup
							parent
							
								
									bf8621aa3a
								
							
						
					
					
						commit
						19ddf3f228
					
				| 
						 | 
					@ -232,32 +232,32 @@ namespace gtsam {
 | 
				
			||||||
        // Allocate inv(Hl'Hl)
 | 
					        // Allocate inv(Hl'Hl)
 | 
				
			||||||
        Matrix3 C = zeros(3,3);
 | 
					        Matrix3 C = zeros(3,3);
 | 
				
			||||||
        for(size_t i1 = 0; i1 < keys_.size(); i1++) {
 | 
					        for(size_t i1 = 0; i1 < keys_.size(); i1++) {
 | 
				
			||||||
          C += Hl.at(i1).transpose() * Hl.at(i1);
 | 
					          C.noalias() += Hl.at(i1).transpose() * Hl.at(i1);
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        C = C.inverse().eval(); //  this is very important: without eval, because of eigen aliasing the results will be incorrect
 | 
					        Matrix3 Cinv = C.inverse(); //  this is very important: without eval, because of eigen aliasing the results will be incorrect
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        // Calculate sub blocks
 | 
					        // Calculate sub blocks
 | 
				
			||||||
        for(size_t i1 = 0; i1 < keys_.size(); i1++) {
 | 
					        for(size_t i1 = 0; i1 < keys_.size(); i1++) {
 | 
				
			||||||
          for(size_t i2 = 0; i2 < keys_.size(); i2++) {
 | 
					          for(size_t i2 = 0; i2 < keys_.size(); i2++) {
 | 
				
			||||||
            // we only need the upper triangular entries
 | 
					            // we only need the upper triangular entries
 | 
				
			||||||
            Hxl[i1][i2] = Hx.at(i1).transpose() * Hl.at(i1) * C * Hl.at(i2).transpose();
 | 
					            Hxl[i1][i2].noalias() = Hx.at(i1).transpose() * Hl.at(i1) * Cinv * Hl.at(i2).transpose();
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
        // Populate Gs and gs
 | 
					        // Populate Gs and gs
 | 
				
			||||||
        int GsCount = 0;
 | 
					        int GsCount = 0;
 | 
				
			||||||
        for(size_t i1 = 0; i1 < numKeys; i1++) {
 | 
					        for(size_t i1 = 0; i1 < numKeys; i1++) {
 | 
				
			||||||
          gs.at(i1) = Hx.at(i1).transpose() * b.at(i1);
 | 
					          gs.at(i1).noalias() = Hx.at(i1).transpose() * b.at(i1);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          for(size_t i2 = 0; i2 < numKeys; i2++) {
 | 
					          for(size_t i2 = 0; i2 < numKeys; i2++) {
 | 
				
			||||||
            gs.at(i1) -= Hxl[i1][i2] * b.at(i2);
 | 
					            gs.at(i1).noalias() -= Hxl[i1][i2] * b.at(i2);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if (i2 == i1){
 | 
					            if (i2 == i1){
 | 
				
			||||||
              Gs.at(GsCount) = Hx.at(i1).transpose() * Hx.at(i1) - Hxl[i1][i2] * Hx.at(i2);
 | 
					              Gs.at(GsCount).noalias() = Hx.at(i1).transpose() * Hx.at(i1) - Hxl[i1][i2] * Hx.at(i2);
 | 
				
			||||||
              GsCount++;
 | 
					              GsCount++;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
            if (i2 > i1) {
 | 
					            if (i2 > i1) {
 | 
				
			||||||
              Gs.at(GsCount) = - Hxl[i1][i2] * Hx.at(i2);
 | 
					              Gs.at(GsCount).noalias() = - Hxl[i1][i2] * Hx.at(i2);
 | 
				
			||||||
              GsCount++;
 | 
					              GsCount++;
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
          }
 | 
					          }
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue