|Re: [eigen] help: eigen cann't solve this simple ax correctly, but Armadillo c++ can|
[ Thread Index |
| More lists.tuxfamily.org/eigen Archives
- To: eigen@xxxxxxxxxxxxxxxxxxx
- Subject: Re: [eigen] help: eigen cann't solve this simple ax correctly, but Armadillo c++ can
- From: Adrien Escande <adrien.escande@xxxxxxxxx>
- Date: Tue, 8 Sep 2020 09:04:12 +0900
- Dkim-signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:references:in-reply-to:from:date:message-id:subject:to; bh=yP5c/b+rAQNtaeh9dpLFgBWSmi7lJbCzZbG2HuOY9Tg=; b=KAF4Ccr3q6sC6MzvlbvvxVHjsj5DJFBO+rbxVkerc+LA5N2ErT19FKXZ/otby0dVDE k1570WjYjwXNsQrd18HWCR/8Ygdj1T1US11I8C7OIQvrz4ZPaV5aU09Mhz/RDlBXzIC3 XYkTMqsU/614VYeGFA3AKmZFqxxrKAHl155raYqc5cdvB3v07bZuDJO9ZidRn1ZbLzJ/ itblXDlc9WEiEIATBm5ftvPOH1ysWE+gVyau1RJjW79BQ8VcddyyaicTJobckoHlgLgQ o9/hopFHKjrnqMXdp3oQHmufvFMAUCTcuKKfLlAAa6tamUvabEGzk/sduuGU7PmShPsD f+bQ==
I was able to confirm the results of Eigen in Matlab using a simple x = A.lu().solve(b); (your matrix has a condition number of about 200, so we're good on the numerical issue front).
My best guess is that you have I/O problems. Did you confirm that the matrix you are using in Eigen is the matrix you intend to use? In particular: are you using the full precision of the file, and, most importantly, did you pay attention to the fact Eigen's matrices are column major (while reading your file sequentially is akin to having row major data) ?
Thanks I solve it with
Vectorxd x = A.partialPivLu().solve(rhs);
I have a exact solution of "cos(6*Pi*x)*cos(6*Pi*y)", so i can obtain the absolute error. the order of error from Armadillo is "-14", while Eigen's error has an order of "1". I also tried other methods "fullPivLu()", "householderQr()", the situation doesn't change.
But if i compute the relative error with Eigen's " double relative_error = (A*x - b).norm() / b.norm()", the relative_error is very small. I am confused by this situations.
could you be more precise: how did you try to solve your problem with Eigen? How do you know/check that the problem is not solved correctly ?
The matrix is generated from the spectral method of a simple heat diffusion problems, the dimension is 841.
Attachment please find the a and rhs output from Armadillo.
I am wandering why eigen's dense linear sover cann't solve it correctly.