使用不旋转的 LU 分解求解方程(Lapack 库)

Solving equation using LU factorization without pivoting (Lapack library)

一开始我想为我的英语道歉。现在,让我们来解决我的问题。

我尝试编写一个简单的代码来找到线性方程组的解:

Ax = b

其中A是方阵nxn。在这个程序中,我使用了 Lapack 库(我必须使用 LU 分解而不旋转)。

我找到了几个例子,e。 G。: Understanding LAPACK calls in C++ with a simple example 在这里我们可以看到如何使用函数:dgetrf_ 和 dgetrs_。但是,即使我将此代码(从最佳答案)复制到我的程序中,它 return 有时会得到正确的结果(例如 A 和 b 与最佳答案中的相同),有时会出现错误的结果(例如 A = {1 , -3, 1, -1}, b = {3, 5},正确答案是:{6, 1} 和函数 return {-4, 7})。对于更大的矩阵,它 return 错误的结果。谁能说说为什么?

在本站中:https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/lapackro1.htm写成:

LAPACK routines assume input matrices do not contain IEEE 754 special values such as INF or NaN. Using these special values may cause LAPACK to return unexpected results or become unstable.

我猜 INF 表示 "infinity" 而 NaN 表示 "Not A Number",对吗?

第二个问题是,即使上面的例子也能正常工作,它使用了带有部分主元的 LU 分解。我需要 Lapack 库中的函数,这些函数在不旋转的情况下进行 LU 分解。我研究了这个功能,但没有找到任何东西。有谁知道(或可能是)这个(这些)功能(功能)是什么?我对解决这个问题失去了希望。

LAPACK 例程是用 FORTRAN 编写的,数据存储在主列中。您正在求解转置 A 矩阵系统 A^T x = b。尝试使用 A = {1, 1, -3, -1}.

你是对的,INF 表示 "infinity",NaN 表示 "Not A Number"。

LU 算法始终使用旋转。 Cholesky 分解不使用旋转 (dpotrf,dpotrs)。但是你的矩阵必须是 "symmetric positive definite".

MATLAB 是不是不用 Pivoting 就可以计算 LU。通过研究,我发现 MATLAB 使用 LAPACK 例程来进行计算。我不知道他们是怎么做到的。