Exemple #1
0
	DLLEXPORT MKL_INT s_qr_solve(MKL_INT m, MKL_INT n, MKL_INT bn, float a[], float b[], float x[], float work[], MKL_INT len)
	{
		MKL_INT info = 0;
	    MKL_INT* jpvt = new MKL_INT[n];
		MKL_INT rank = 0;
		float cond = -1.0;

		float* clone_a = new float[m*n];
		std::memcpy(clone_a, a, m*n*sizeof(float));

		float* clone_b = new float[m*bn];
		std::memcpy(clone_b, b, m*bn*sizeof(float));

	    sgelsy_(&m, &n, &bn, clone_a, &m, clone_b, &m, jpvt, &cond, &rank, work, &len, &info);

		for (MKL_INT i = 0; i < n; ++i)
		{
			for (MKL_INT j = 0; j < bn; ++j)
			{
				x[j * n + i] = clone_b[j * m + i];
			}
		}

		delete[] jpvt;
		delete[] clone_a;
		delete[] clone_b;
		return info;
	}