matlab練習程式(三階張量T QR分解)

2021-09-07 21:21:29 字數 2371 閱讀 9616

這裡所謂的張量和黎曼那裡的張量是不一樣的,那個張量更多的用在物理上,這個張量就是矩陣的擴充套件。比如零階張量就是數,一階張量就是向量,二階張量就是矩陣,三階四階就是更高維的數的集合。這個領域現在在數學上還都是很新的東西,矩陣的秩我們都知道怎麼求,但是三維的張量或更高維的張量的秩現在在數學上也沒有結果。至於張量的奇異值分解也只是也只是用很早的如用hosvd來處理,我感覺這並不完全合適,新的分解演算法就連老美也都沒研究出來,從二維到多維的確有很多基礎的理論都不適用了,像兩個張量相乘這樣基礎的演算法,現在雖然有,但我感覺也不是通用的,還要繼續改進。

下面就是我看的一篇**的張量相乘和分解方法,她的理論也可能不正確,不過這種新領域,大家都是在探索。

**在這裡:他主要介紹的是t-svd,t-svd分解後合成的只是原張量的乙個近似結果,而t-qr就能得到乙個準確的結果,所以我這裡用了t-qr。以matlab角度來看t-svd和t-qr的**其實是很類似的。

mul.m  張量相乘,**第七頁3.3的那個公式

function c=mul(a,b)

[a_n1 a_n2 a_n3]=size(a);

[b_n1 b_n2 b_n3]=size(b);

c=zeros(a_n1,b_n2,a_n3);

a=cell(a_n3,1

); b=cell(b_n3,1

);

for i=1

:a_n3

a=a(:,:,i);

b=b(:,:,i);

endindex_up=zeros(1

,a_n3);

index_down=zeros(1

,a_n3);

for i=1

:a_n3

index_up(i)=a_n3-i+1

; index_down(i)=i;

ends=cell(a_n3,a_n3);

for i=1

:a_n3

for j=1

:a_n3

if i==j

s=a;

endif j>i

s=a;

endif js=a;

endend

endre=cell(a_n3,1

);

for i=1

:a_n3

re=zeros(a_n1,b_n2);

endfor i=1

:a_n3

for j=1

:a_n3

for k=1:1

re=re+s*b

;

endend

endfor i=1

:a_n3

c(:,:,i)=re

;

endend

transpos.m  張量求轉置,**第十頁example3.15的公式

function a=transpos(b)    

[n1 n2 n3]=size(b);

a=zeros(n2,n1,n3);

for i=1

:n3 a(:,:,i)=b(:,:,i)'

;end

end

python三階魔方 三階魔方還原公式

1.第二層稜塊歸位 2.頂層十字 3.頂層稜中間塊歸位 這一步的目的是使頂層的4個稜中間塊全部歸位。轉動頂層 u 若可以使乙個稜中間塊歸位 如下圖左,這裡以 紅 黃 塊為例 而其他3個都不能歸位,則將 紅 黃 所在這一面 紅面 定為正前面 f 按照圖示步驟轉動,可使4塊稜中間塊全部歸位,或出現下一種...

三階魔方教程

這裡講述的是層先法,有7步,需要記憶4個公式。關於公式的記憶,有很多種方法,我採用的是編口訣。第一步 把白色的那一面轉好。第二步 把和白色底面的那一層轉好。第三步 第一面和第一層轉好之後,以白色為底 把魔方盡量轉成倒t字形,看最上層中間的塊 a 和第二層左右的塊 b 需要交換的,如果有要交換的,先把...

三階魔方復原

網上有關三階魔方的教程有好多,多數方法步驟基本都是一樣的,但是 清晰 說明詳細 流程嚴謹的感覺不是很多。按照上面鏈結中的教程,從第一步到第八步,仔細按照教程嚴格完成每一步,很快就可以學會復原方法。當時我在第二步時沒有按照教程的方法去做,看得也不是很仔細,覺得很快完成了第二步和第三步,但是到了第四步時...