使用Julia中的乘法函数对矩阵的差异

时间:2014-07-29 01:01:27

标签: julia

假设交换矩阵J ref here的特征向量给出的基础的改变。现在假设我生成一个随机矩阵,使得H = H ^ T.例如,我的H是:

[-4.339231145150657 -1.9513538676596298 0.022375597517700463 0.0
-1.9513538676596298 -1.292344753373925 1.3152010547965873 0.022375597517700463
0.022375597517700463 1.3152010547965873 -1.1096459842204194 4.229348916735498
0.0 0.022375597517700463 4.229348916735498 -3.79113483769014]

然后,如果我想改为“J”,我必须进行线性变换:evecJ ^ T * H * evecJ(evecJ是J的本征向量矩阵)。所以逆变换应该让我回到H的原始值。但是,如果我这样做,情况并非如此。

*(evecJ',H,evecJ)
*(evecJ,H,evecJ')

比较我是否

evecJT = evecJ'
*(evecJT,H,evecJ)
*(evecJ,H,evecJT)

为什么这两种方法有两种不同?

1 个答案:

答案 0 :(得分:1)

如果没有更多信息,很难知道,但我的猜测是它是两个因素的组合:

  1. Julia的语义与语法不完全相关的少数情况之一是带有转置参数的乘法或除法,即操作形式A' * B:它将尝试用诸如Ac_mul_B之类的函数调用适当的BLAS函数,避免中间分配。但是,如果转置发生在其他地方,它就无法做到这一点。换句话说,J'*HJT = J'; JT*H实际上会在内部调用不同的函数。

  2. 矩阵 - 矩阵乘法涉及浮点数的大量中间舍入,因此确切的结果将取决于执行操作的顺序。这里似乎可能的是,非转置和转置案例中使用的订单实际上是不同的。