我正在尝试将 MatLab 中的代码翻译成 R,但我被困在以下行:
SqO=U.* sqrt(D)*V'
我觉得我很接近:
SqO<-Conj(t(U%*%sqrt(D)*V))
...但输出仍然不匹配。如果有帮助,所有变量(Sq0、U、D 和 V)都是 20x20 矩阵。
根据 HighPerformanceMark 所写的翻译应该是:
SqO=U.* sqrt(D)*V' # Matlab
SqO <- U* sqrt(D) %*% t(V) # R
嗯,我不是 R 方面的专家,但我确实知道一点 Matlab。Matlab 中的子表达式
U.* sqrt(D)
U
对 的和平方根进行逐个元素的乘法运算D
。即 element (i,j)
inU
乘以 element (i,j)
in sqrt(D)
;所以这不是通常的矩阵乘法。那是你的U%*%sqrt(D)
工作吗? sqrt(D)
也对单个元素进行操作,即sqrt(D)~=D^(1/2)*D^(1/2)
.
然后Matlab代码将前面运算的结果乘以V
(如果V
是实数数组)的转置;再次,我的 R 太弱了,无法知道您是否已完成此操作或等效操作。