Matlab 用于求解Ax=b中非常大的稀疏矩阵的反斜杠

Matlab 用于求解Ax=b中非常大的稀疏矩阵的反斜杠,matlab,code-generation,sparse-matrix,backslash,Matlab,Code Generation,Sparse Matrix,Backslash,在我的代码中,每个时间步稀疏矩阵A构建如下: 1< DX <120000 我处理的问题是一种离散化问题。我最多有120000个节点。这些节点中的每一个都有特殊的字符,我只选择那些符合我的条件的。这些选择的数量是DX,完全取决于物理过程 我在x=A\b中使用反斜杠。但是随着A的大小变得相当大,计算时间急剧增加(超过10e5个时间步(DX>6e4) 据我所知,反斜杠运算在MATLAB中已经得到了很好的优化,但我想知道: 使用codegen并将代码转换为C有意义吗 有人知道一种替代反斜杠

在我的代码中,每个时间步稀疏矩阵
A
构建如下:

1< DX <120000
我处理的问题是一种离散化问题。我最多有120000个节点。这些节点中的每一个都有特殊的字符,我只选择那些符合我的条件的。这些选择的数量是
DX
,完全取决于物理过程

我在
x=A\b
中使用反斜杠。但是随着
A
的大小变得相当大,计算时间急剧增加(超过10e5个时间步(
DX>6e4

据我所知,反斜杠运算在MATLAB中已经得到了很好的优化,但我想知道:

  • 使用codegen并将代码转换为C有意义吗

  • 有人知道一种替代反斜杠的方法吗,这样可以减少计算时间(可能是一种迭代方法)


  • 虽然
    x=A\b
    适用于许多系统,但您可能会遇到内存问题,从而导致速度减慢。另外,MATLAB有许多内置函数,用于迭代求解稀疏矩阵的Ax=b,例如
    pcq()
    bigcg()
    cgs()
    ,等等。请参见1)否,Matlab将调用预编译的高度优化例程来执行稀疏矩阵分解。我认为对于大多数输入,它将调用SuiteSparse的QR分解。对于平方矩阵,它遵循图形。所以使用codegen不会有帮助。如果您的代码使用大量的
    来处理
    循环,那么Codegen最有用,因为循环在M-code中效率很低,但在C/C++中速度很快。在你的例子中,你调用的是一个内置函数,所以这不会起任何作用。2)你的矩阵有什么特殊的结构吗?如果它是正方形和对角占优的,你可以使用雅可比迭代,这很容易编码。@jucestain:谢谢你的回答!不幸的是,矩阵没有遵循任何结构。这些值是随机分布的。
    
    b = (1,DX)