作为一个更大问题的一部分,我需要解决小型线性系统(即NxN,其中N~10),因此使用相关的cuda库在速度方面没有任何意义。
不幸的是,还不清楚的是,如何在不动用GSL、EIGEN等大炮的情况下解决此类系统。
有人能给我指一个密集矩阵解算器(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上有什么发现。
我正在使用克劳特分解和旋转,这似乎是最普遍的方法。这个测试的想法是每个线程都做相同的工作我知道很无聊,但计划是增加matrixcount变量,放入实际数据,每个线程单独求解小矩阵。
谢谢所有检查过这个的人。
答后更新:完成CPU和GPU操作的矩阵求解代码,查看我的lazy writeuphere

最佳答案

库达不会帮你的,这是真的。这样的矩阵对它来说太小了。
解线性方程组的方法是LU分解:
http://en.wikipedia.org/wiki/LU_decomposition
http://mathworld.wolfram.com/LUDecomposition.html
或者更好的QR分解,如Gram-Schmidt过程中的Householder反射。
http://en.wikipedia.org/wiki/QR_decomposition#Computing_the_QR_decomposition
后来解线性方程变得很容易,但恐怕总要涉及到一些“高等数学”(线性代数)。那,还有很多(很多!)C库用于求解线性方程在我看来不像是“大炮”。

07-28 01:34
查看更多