2

作为更大问题的一部分,我需要解决小型线性系统(即 NxN,其中 N ~10),因此使用相关的 cuda 库在速度方面没有任何意义。

不幸的是,还不清楚的是如何在不使用 GSL、EIGEN 等大炮的情况下解决此类系统。

谁能指出我在直线 C 中的密集矩阵求解器(Ax = B)的方向?

对于那些感兴趣的人,这部分代码的生成器的基本结构是:

ndarray=some.generator(N,N)
for v in range N:
    B[v]=_F(v)*constant
    for x in range N:
        A[v,x]=-_F(v)*ndarray[x,v]

不幸的是,我对高等数学的了解几乎为零,所以任何建议都将不胜感激。

更新:我一直在努力解决这个问题,并且有一个几乎可以运行但不起作用的解决方案。欢迎任何潜伏的人来看看我到目前为止在pastebin上得到了什么。

我正在使用带有 Pivoting 的 Crout 分解,这似乎是最通用的方法。这个测试的想法是每个线程都做同样的工作。我知道很无聊,但计划是增加matrixcount变量,放入实际数据,每个线程单独求解小矩阵。

感谢所有对此进行检查的人。

回答后更新:完成了 CPU 和 GPU 操作的矩阵求解代码,在此处查看我的惰性写入

4

1 回答 1

0

CUDA 在这里帮不上忙,这是真的。像这样的矩阵对它来说太小了。

求解线性方程组的方法是 LU 分解:

或者甚至更好的使用 Householder 反射的 QR 分解,如 Gram-Schmidt 过程。

之后求解线性方程变得容易,但恐怕总是涉及一些“高等数学”(线性代数)。那,还有很多(很多!)C 库用于求解线性方程。对我来说,这似乎不像“大枪”。

于 2011-04-14T13:56:55.387 回答