【发布时间】:2014-09-29 17:50:08
【问题描述】:
关于犰狳内置的线性求解器,我有一个相对简单的问题。我是 C++ 的新手,但有其他语言的编码经验。我正在通过连续线性化解决流体流动问题,使用犰狳函数 Solve(A,b) 在每次迭代时获得解决方案。
我遇到的问题是我的矩阵非常病态。行列式大约是 10^-20,条件数是 75000。我知道这些条件很糟糕,但这就是我所拥有的。有谁知道是否可以将我的 A 矩阵和求解函数中的精度指定为双精度(可能是长双精度)?我知道犰狳中有双矩阵类,但我还没有找到任何更高精度的文档。
为了从另一个角度解决这个问题,我在 Mathematica 中编写了一些代码,LinearSolve 运行良好,程序收敛到正确答案。我的理由是 Mathematica 变量具有更高的精度,可以处理更高级别的舍入误差。
如果有人对此有任何见解,请告诉我。我知道还有其他方法可以处理条件不佳的矩阵(例如预处理和旋转),但我的工作更多是在物理方面,而不是在实际的数值解决方案中,所以我试图避免这种情况。
编辑:我只是将 Mathematica 版本的精度限制为小数点后 15 位,程序仍然收敛。这让我相信这不是一个精度可变的问题,而是方法的问题。
【问题讨论】:
标签: c++ matrix linear-algebra precision armadillo