我試着翻譯從MATLAB代碼爲R,但是我卡在下面一行:翻譯MATLAB中的R - 陣列乘法和複共軛轉
SqO=U.* sqrt(D)*V'
我覺得我關閉:
SqO<-Conj(t(U%*%sqrt(D)*V))
...但輸出仍然不匹配。如果有幫助,所有變量(Sq0,U,D和V)都是20x20矩陣。
我試着翻譯從MATLAB代碼爲R,但是我卡在下面一行:翻譯MATLAB中的R - 陣列乘法和複共軛轉
SqO=U.* sqrt(D)*V'
我覺得我關閉:
SqO<-Conj(t(U%*%sqrt(D)*V))
...但輸出仍然不匹配。如果有幫助,所有變量(Sq0,U,D和V)都是20x20矩陣。
嗯,我不是R的專家,但我確實知道一些Matlab。在Matlab中的子表達式
U.* sqrt(D)
確實的U
的元件逐個元素乘法和D
平方根。也就是說,U
中的元素(i,j)
乘以sqrt(D)
中的元素(i,j)
;所以這不是通常的矩陣乘法。這是你的U%*%sqrt(D)
嗎? sqrt(D)
也對單個元素進行操作,即sqrt(D)~=D^(1/2)*D^(1/2)
。
然後,Matlab代碼將前一次操作的結果乘以V
的轉置(如果V
是真實數組)。再次,我的R太弱,無法知道你是否已經完成了這項工作或者進行了相同的操作。
從什麼HighPerformanceMark寫的翻譯應該是:
SqO=U.* sqrt(D)*V' # Matlab
SqO <- U* sqrt(D) %*% t(V) # R
在該R'%*%'是矩陣乘法,而'*'是元素逐個元素相乘,所以用你的Matlab的定義(也許)它應該是'U * sqrt(D)%*%t(V)',但是你沒有給出足夠的背景知道複共軛如何進入。 –
我根本沒有給出複共軛的任何背景。 –
對。無法分辨'U'之後的右邊點是否具有一些數學意義。 –