zlaqr1 function
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];
}
}
}