docs: private void computeParam() {
  		// reduce overflow/underflow
  		CommonOps_DDRM.divide(b,CommonOps_DDRM.elementMaxAbs(b));
  
  		double B11 = b.get(0,0);
  		double B12 = b.get(1,0);
  		double B22 = b.get(2,0);
  		double B13 = b.get(3,0);
  		double B23 = b.get(4,0);
  		double B33 = b.get(5,0);
  
  		double temp0 = B12*B13 - B11*B23;
  		double temp1 = B11*B22 - B12*B12;
  
  		double v0 = temp0/temp1;
  		double lambda = B33-(B13*B13 + v0*temp0)/B11;
  		// Using abs() inside is an adhoc modification to make it more stable
  		// If there is any good theoretical reason for it, that's a pure accident.  Seems
  		// to work well in practice
  		double a = Math.sqrt(Math.abs(lambda / B11));
  		double b = Math.sqrt(Math.abs(lambda * B11 / temp1));
  		double c = -B12*b/B11;
  		double u0 = c*v0/a - B13/B11;
  
  		K.set(0,0,a);
  		K.set(0,1,c);
  		K.set(0,2,u0);
  		K.set(1,1,b);
  		K.set(1,2,v0);
  		K.set(2,2,1);
  	}