zlaqr1 function

void zlaqr1(
  1. int N,
  2. Matrix<Complex> H_,
  3. int LDH,
  4. Complex S1,
  5. Complex S2,
  6. Array<Complex> V_,
)

Implementation

void zlaqr1(
  final int N,
  final Matrix<Complex> H_,
  final int LDH,
  final Complex S1,
  final Complex S2,
  final Array<Complex> V_,
) {
  final H = H_.having(ld: LDH);
  final V = V_.having();
  const RZERO = 0.0;
  Complex H21S, H31S;
  double S;

  // Quick return if possible

  if (N != 2 && N != 3) {
    return;
  }

  if (N == 2) {
    S = (H[1][1] - S2).cabs1() + H[2][1].cabs1();
    if (S == RZERO) {
      V[1] = Complex.zero;
      V[2] = Complex.zero;
    } else {
      H21S = H[2][1] / S.toComplex();
      V[1] = H21S * H[1][2] + (H[1][1] - S1) * ((H[1][1] - S2) / S.toComplex());
      V[2] = H21S * (H[1][1] + H[2][2] - S1 - S2);
    }
  } else {
    S = (H[1][1] - S2).cabs1() + H[2][1].cabs1() + H[3][1].cabs1();
    if (S == RZERO) {
      V[1] = Complex.zero;
      V[2] = Complex.zero;
      V[3] = Complex.zero;
    } else {
      H21S = H[2][1] / S.toComplex();
      H31S = H[3][1] / S.toComplex();
      V[1] = (H[1][1] - S1) * ((H[1][1] - S2) / S.toComplex()) +
          H[1][2] * H21S +
          H[1][3] * H31S;
      V[2] = H21S * (H[1][1] + H[2][2] - S1 - S2) + H[2][3] * H31S;
      V[3] = H31S * (H[1][1] + H[3][3] - S1 - S2) + H21S * H[3][2];
    }
  }
}