使用LU分解无枢轴求解方程式(Lapack库)

问题描述 投票:2回答:2

起初,我想为我的英语道歉。现在,让我们解决我的问题。

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

Ax = b

其中A是一个方阵nxn。在此程序中,我使用Lapack库(必须在不进行数据透视的情况下使用LU分解)。

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

在此站点:https://software.intel.com/sites/products/documentation/doclib/mkl_sa/11/mkl_lapack_examples/lapackro1.htm被写为:

LAPACK例程假定输入矩阵不包含IEEE 754特殊值,例如INF或NaN。使用这些特殊值可能会导致LAPACK返回意外结果或变得不稳定。

我想INF的意思是“无穷大”,NaN的意思是“不是数字”,对吧?

并且第二个问题是,即使上面的示例也能正常工作,它也会使用带有部分枢轴的LU分解。我需要Lapack库中的函数,这些函数无需旋转即可进行LU分解。我对此功能进行了研究,但没有发现任何东西。有谁知道(也许是)这个(这些)功能是什么?我对解决这个问题失去了希望。

c++ lapack equation-solving
2个回答
2
投票

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

您是正确的,INF表示“无穷大”,NaN表示“非数字”。

LU算法始终使用数据透视。 Cholesky分解不使用透视(dpotrf,dpotrs)。但是,您的矩阵必须是“对称正定”。


-1
投票

MATLAB不使用Pivoting来计算LU。从研究中我发现MATLAB使用LAPACK例程进行计算。我想知道他们是怎么做到的。

© www.soinside.com 2019 - 2024. All rights reserved.