Gar*_*han 8

免责声明:我没有使用过AlgLib; 我只是按照文档似乎说的去做.我很乐意被更专家的人纠正.

无论如何,我恐怕答案似乎是你需要使用cmatrixgemmrmatrixgemm(哪一个取决于你的矩阵是真实还是复杂),如下所示:

rmatrixgemm(m,n,k, 1, A,0,0,0, B,0,0,0, 0, C,0,0);
Run Code Online (Sandbox Code Playgroud)

哪里:

  • m,n,k是矩阵的大小(Amk,Bkn,Cm通过n)
  • 1是什么样的乘的产品(如果你恰好想,说,3AB而不是AB,放在3那里,而不是)
  • A,0,0,0B,0,0,0基团是:矩阵,行偏移,列偏移,操作类型
    • 操作类型为0,原样使用A或B,1使用转置,2使用共轭转置(当然你不能使用2 rmatrixgemm)
  • 接下来0说要在结果中添加0*C(如果你在这里加0那么C中的初始值就完全被忽略了)
  • 0C之后的两个s是行和列的偏移量

您可能认为这种普遍性水平过度,并且应该有一个更简单的函数来提供这些默认值.我不同意这一点,但据我所知,AlgLib中没有这么简单的功能.你可能想写自己的(只会打电话rmatrixgemmcmatrixgemm).

(为什么如此普遍?因为进行有效的矩阵乘法需要相当复杂的代码,并且它本质上是相同的非常复杂的代码,因为您需要执行更一般的C=a.f(A).g(B)+b.C操作,*matrixgemm有时候更通用的操作是有用的.)

编辑以添加一些可能有用的备注.

  • 偏移量使您可以使用子矩阵进行操作.能够这样做在一些数值算法中是有用的.我想m,n,k你正在使用的小矩阵的大小; 在通常情况下,它们将与数组的尺寸相同,并且偏移量将为零.
  • 这种阵列本身有存在的必要和适当的大小在打电话前rmatrixgemmcmatrixgemm.至少,A并且B一定做到; C作为一个传递,ref所以如果它正在null进入,这些函数可能会创建它.
  • 你可以从签名rmatrixgemm或者cmatrixgemm那里思考AB得到复制,而C通过引用传递,但如果我对C#的语义并不完全感到困惑,那么它们都有效地通过(对象)引用传递.

  • 哇...我无法通过阅读手册来解决这个问题...谢谢 (3认同)