Dear support team,
I met some problem when trying to run the ?unmbr() function from MKL, the bidiagonal terms could be calculated correctly, but I was unable to mutiply them back. Could you help me with it?
Thanks a lot!
float x_real[6 * 4] = { -0.57, -1.28, -0.39, 0.25,
-1.93, 1.08, -0.31, -2.14,
2.30, 0.24, 0.40, -0.35,
1.93, 0.64, -0.66, 0.08,
0.15, 0.30, 0.15, -2.13,
0.02, 1.03, -1.43, 0.50};
int length[2] = { 4, 6 };
P = (MKL_Complex8*)MKL_malloc(sizeof(MKL_Complex8)*6*6, 32;
Q = (MKL_Complex8*)MKL_malloc(sizeof(MKL_Complex8)*6*6, 32);
TP = (MKL_Complex8*)MKL_malloc(sizeof(MKL_Complex8*6, 32);
TQ = (MKL_Complex8*)MKL_malloc(sizeof(MKL_Complex8*6, 32);
for (int j = 0; j < length[0] * length[1]; j++)
{
Spec[j].real = x_real[j];
Spec[j].imag = 0;
}
LAPACKE_cgebrd(LAPACK_ROW_MAJOR, length[1], length[0], Spec, length[0], s1, s2, TP, TQ); //here is correct
for (j = 0; j < length[1] * length[0] - 1; j++)
{
P[j].real = Spec[j].real;
P[j].imag = Spec[j].imag;
Q[j].real = Spec[j].real;
Q[j].imag = Spec[j].imag;
}
LAPACKE_cunmbr(LAPACK_ROW_MAJOR, 'Q', 'L', 'N', length[1], length[0], length[0], Q, length[0], TQ, S, length[1]);
LAPACKE_cunmbr(LAPACK_ROW_MAJOR, 'P', 'R', 'C', length[1], length[0], length[1], P, length[0], TP, S, length[1]);