- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
I am trying to follow example available on http://www.nag.com/lapack-ex/node55.html
where they have:
DGGLSE Example Program Data 6 4 2 :Values of M, N and P -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 :End of matrix A 1.00 0.00 -1.00 0.00 0.00 1.00 0.00 -1.00 :End of matrix B -1.50 -2.14 1.23 -0.54 -1.68 0.82 :End of vector c 0.00 0.00 :End of vector d
DGGLSE Example Program Results Constrained least-squares solution 0.4890 0.9975 0.4890 0.9975 Square root of the residual sum of squares 2.51E-02
I am using following code:
int LAPACK_ROW_MAJOR = 101;
int LAPACK_COL_MAJOR = 102;
int M = 6;
int N = 4;
int NRHS = 2;
int LDA = M;
int LDB = M;
int m = M, n = N, nrhs = NRHS, lda = LDA, ldb = LDB, info;
double[] a = new double[6 * 4] { //LDA *N
-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
};
double[] b = new double[4 * 2] { //LDB*NRHS
1.00, 0.00, -1.00, 0.00,
0.00, 1.00, 0.00 ,-1.00
};
double[] c = new double[6 ] { //LDB*NRHS
-1.50,
-2.14,
1.23,
-0.54,
-1.68,
0.82
};
double[] d = new double[2] { //LDB*NRHS
0.00,
0.00
};
double[] x = new double[4] { //LDB*NRHS
0.00,
0.00,
0.00,
0.00
};
/* Executable statements */
Console.WriteLine("LAPACKE_dgglse (column-major, high-level) ");
/* Solve the equations A*X = B */
info = MKLImports.LAPACKE_dgglse(LAPACK_COL_MAJOR, m, n, nrhs, a, lda, b, ldb, c, d, x);
Console.WriteLine(info);
Console.WriteLine("Least squares solution");
for (int j = 0; j < n; j++)
Console.Write(" \t" +x
However I am getting
LAPACKE_dgglse (column-major, high-level)
0
Least squares solution
0.214694309349513 0.104791270039643 0.16310231377302 0.127794231755662
Which is not correct, could you please tell me what am I doing wrong?
Thanks
I am using function like
static extern int LAPACKE_dgglse(
int matrix_order,
int m, //number of rows of the matrix A (m ≥ 0).
int n, //number of columns of the matrices A and B (n ≥ 0).
int p, //number of rows of the matrix B (0 ≤ p ≤ n ≤ m+p).
[In, Out] double[] a, //contains the m-by-n matrix A.
int lda, //The second dimension of a must be at least max(1, n).
[In, Out] double[] b, // contains the p-by-n matrix B.
int ldb, //The second dimension of b must be at least max(1, n).
[In, Out] double[] c, //dimension at least max(1, m), contains the right hand side vector for the least squares part of the LSE problem.
double[] d, //dimension at least max(1, p), contains the right hand side vector for the constrained equation.
[In, Out] double[] x
);
Link Copied
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
The matrix b is 2-by-4 column-major, but you defined ldb=6, which does not look right. I'd think ldb=2.
- Mark as New
- Bookmark
- Subscribe
- Mute
- Subscribe to RSS Feed
- Permalink
- Report Inappropriate Content
One more thing. All your matrices are row-major (because it is C or C++ code). But the original example from NAG is column-major (it came from FORTRAN code sample). So you really want to call LAPACKE_dgglse with 'LAPACK_ROW_MAJOR' to be consistent with the actual memory layout of your matrices.

- Subscribe to RSS Feed
- Mark Topic as New
- Mark Topic as Read
- Float this Topic for Current User
- Bookmark
- Subscribe
- Printer Friendly Page