Matrix Maple compact ludecomposition A.x=B,x为矩阵

Matrix Maple compact ludecomposition A.x=B,x为矩阵,matrix,maple,Matrix,Maple,我最近实现了数字配方第二版中名为bandec()的LUDecomposition例程。它使用紧凑形式的带状矩阵创建lu分解(它还以紧凑形式返回L和U)。我的问题是,如何解方程组 A.x=B,如果x是矩阵 我可以使用一个例程吗?常规命令linearagebra:-LinearSolve处理这个问题。如果B是矩阵,那么x也将是矩阵。常规命令lineargebra:-LinearSolve处理该问题。如果B是一个矩阵,那么x也将是一个矩阵。你写的“稀疏带状”。虽然带状情况下没有特殊的稀疏解算器,但使用

我最近实现了数字配方第二版中名为bandec()的LUDecomposition例程。它使用紧凑形式的带状矩阵创建lu分解(它还以紧凑形式返回L和U)。我的问题是,如何解方程组

A.x=B,如果x是矩阵


我可以使用一个例程吗?

常规命令linearagebra:-LinearSolve处理这个问题。如果B是矩阵,那么x也将是矩阵。

常规命令lineargebra:-LinearSolve处理该问题。如果B是一个矩阵,那么x也将是一个矩阵。

你写的“稀疏带状”。虽然带状情况下没有特殊的稀疏解算器,但使用了LAPACK的(密集)带状解算器。我写这篇文章的机会很小,可能就是你的情况

例如

你写了“稀疏带状”。虽然带状情况下没有特殊的稀疏解算器,但使用了LAPACK的(密集)带状解算器。我写这篇文章的机会很小,可能就是你的情况

例如


是的,它工作得很好,但我一直在尝试实现一个巨大的稀疏带状矩阵。Maple提供的所有“稀疏”方法都比较慢(这很奇怪!)。这就是为什么我试图实现一个例程,利用带状矩阵非常稀疏的事实。我看不出你的评论和你的问题之间有什么联系。A的稀疏性与x是否是矩阵有什么关系?是的,对不起,我不清楚。我有一个稀疏带状矩阵J,我想解系统J.X=B,其中X是一个矩阵。这可以用LinearSolve完成,但速度非常慢。因此,我一直在尝试实现一个利用稀疏性的LUdecomposition代码,但现在我需要一个例程来实现LinearSolve的功能(对于上面的J.X=B),但它与bandec()的输出兼容,后者是紧凑形式的PLU矩阵。是的,它工作得很好,但我一直在尝试实现一个巨大的稀疏带状矩阵。Maple提供的所有“稀疏”方法都比较慢(这很奇怪!)。这就是为什么我试图实现一个例程,利用带状矩阵非常稀疏的事实。我看不出你的评论和你的问题之间有什么联系。A的稀疏性与x是否是矩阵有什么关系?是的,对不起,我不清楚。我有一个稀疏带状矩阵J,我想解系统J.X=B,其中X是一个矩阵。这可以用LinearSolve完成,但速度非常慢。因此,我一直在尝试实现一个利用稀疏性的LUdecomposition代码,但现在我需要一个例程来实现LinearSolve的功能(对于上面的J.X=B),但它与bandec()的输出兼容,后者是紧凑形式的PLU矩阵。嗨!是的,这是我的案子,谢谢!我在尝试矩阵1000x1000,但没有及时提供任何速度。它实际上走得慢了。只有当将尺寸增加到10000时,使用banded的速度才会更快。你知道为什么更小的矩阵会变慢吗?矩阵是非常稀疏的,所以它不应该总是更快地求解吗?上面的代码是否显示了类似的计时,进行比较,与编写的完全相同?当你只改变尺寸到1000以上?在矩阵/向量上使用datatype=float[8]是关键。infolevel设置显示使用了哪些clack函数,在band案例中显示它使用了LAPACK的专用band LU(打包存储)。如果您在www.mapleprimes.com上发布,并将实际工作表示例上传到您的问题中,调试会更容易。您好!是的,这是我的案子,谢谢!我在尝试矩阵1000x1000,但没有及时提供任何速度。它实际上走得慢了。只有当将尺寸增加到10000时,使用banded的速度才会更快。你知道为什么更小的矩阵会变慢吗?矩阵是非常稀疏的,所以它不应该总是更快地求解吗?上面的代码是否显示了类似的计时,进行比较,与编写的完全相同?当你只改变尺寸到1000以上?在矩阵/向量上使用datatype=float[8]是关键。infolevel设置显示使用了哪些clack函数,在band案例中显示它使用了LAPACK的专用band LU(打包存储)。如果您在www.mapleprimes.com上发布,并将实际的工作表示例上传到您的问题中,调试会更容易。
restart;
with(LinearAlgebra):
N:=10000:
M:=RandomMatrix(N,datatype=float[8]):
V:=RandomVector(N,datatype=float[8]):
infolevel[LinearAlgebra]:=1:
X:=CodeTools:-Usage(LinearSolve(M,V)):
  LinearSolve: using method LU
  LinearSolve: calling external function
  LinearSolve: NAG hw_f07adf
  LinearSolve: NAG hw_f07aef
  memory used=0.75GiB, alloc change=0.78GiB, cpu time=16.24s, real time=4.30s, gc time=8.00ms
Norm(M.X-V);
  unknown: NAG hw_f06paf
  unknown: NAG hw_f06paf
  Norm: calling external function
  Norm: NAG:  hw_f06raf
                                      -8
                1.06381179421077832 10  

restart;
with(LinearAlgebra):
N:=10000:
B:=max(1,floor(0.005*N)):
2*B+1;
                          101
M:=RandomMatrix(N,shape=band[B,B],datatype=float[8]):
V:=RandomVector(N,datatype=float[8]):
infolevel[LinearAlgebra]:=1:
X:=CodeTools:-Usage(LinearSolve(M,V)):
  LinearSolve: using method LU
  LinearSolve: calling external function
  LinearSolve: CLAPACK hw_dgbtrf_
  LinearSolve: CLAPACK hw_dgbtrs_
  memory used=13.09MiB, alloc change=11.52MiB, cpu time=20.00ms, real time=23.00ms, gc time=0ns
Norm(M.X-V);
  Multiply: calling external function
  Multiply: NAG hw_f06pbf
  Multiply: calling external function
  Multiply: NAG hw_f06pbf
Norm: calling external function
  Norm: NAG:  hw_f06raf
                                     -11
               8.03126454229641240 10