zlapll function

void zlapll(
  1. int N,
  2. Array<Complex> X_,
  3. int INCX,
  4. Array<Complex> Y_,
  5. int INCY,
  6. Box<double> SSMIN,
)

Implementation

void zlapll(
  final int N,
  final Array<Complex> X_,
  final int INCX,
  final Array<Complex> Y_,
  final int INCY,
  final Box<double> SSMIN,
) {
  final X = X_.having();
  final Y = Y_.having();
  const ZERO = 0.0;
  Complex A11, A12, A22, C;
  final TAU = Box(Complex.zero);
  final SSMAX = Box(0.0);

  // Quick return if possible

  if (N <= 1) {
    SSMIN.value = ZERO;
    return;
  }

  // Compute the QR factorization of the N-by-2 matrix ( X Y )

  zlarfg(N, X(1), X(1 + INCX), INCX, TAU);
  A11 = X[1];
  X[1] = Complex.one;

  C = -TAU.value.conjugate() * zdotc(N, X, INCX, Y, INCY);
  zaxpy(N, C, X, INCX, Y, INCY);

  zlarfg(N - 1, Y(1 + INCY), Y(1 + 2 * INCY), INCY, TAU);

  A12 = Y[1];
  A22 = Y[1 + INCY];

  // Compute the SVD of 2-by-2 Upper triangular matrix.

  dlas2(A11.abs(), A12.abs(), A22.abs(), SSMIN, SSMAX);
}