演算法程式是從網上摘抄過來的,但是我新增了注釋
由於matlab中只有對矩陣直接分解成行最簡形式
e(r)d0
0 的函式,不方便直接看出矩陣的滿秩分解形式,即a=p*q中的p和q矩陣,因此我找了下網上的程式。
說明:程式中對(m*n)矩陣a進行了滿秩分解,分解為p*q,其中p是m*r矩陣,q是r*n矩陣,r是矩陣a的秩
b=rref(a); %將矩陣a化成行最簡形式(rref,reduced row echelon form),儲存在b中
[m,n]=size(a); %獲取矩陣a的大小:m行n列
p0(1:m,:)=0; %生成乙個m行1列的列向量,全部值均為0
q0(:,1:n)=0; %生成乙個1行n列的行向量,全部值均為0
for i=1:m %依次掃瞄矩陣m行
flag=1;
for j=1:n %依次掃瞄矩陣n列
if b(i,j)==1 %若b(i, j)等於1
for k=1:i-1 %固定j列,掃瞄此列的第1行到i-1行元素
if b(k,j)~=0 %判斷是否全為0
flag=0; %若不全為0,則將flag置為0(說明此列不是單位矩陣的列)
break;
endend
for k=i+1:m %固定j列,掃瞄此列的第i+1行到m行(即最後一行)元素
if b(k,j)~=0 %判斷是否全為0
flag=0; %若不全為0,則將flag置為0(說明此列不是單位矩陣的列)
break;
endend
if flag==1 %若flag為1(不為0),則說明此列是【矩陣的行最簡形式矩陣】的單位矩陣的列
p0=[p0,a(:,j)]; %將矩陣a的j列加到p0列向量之後,如p0=[[0;1;2;3;4],[5;6;7;8;9]]
q0=[q0;b(i,:)]; %將矩陣b的i行加到q0行向量之後,如q0=[ 0,1,2,3,4 ; 5,6,7,8,9 ]或q0=[[0,1,2,3,4];[5,6,7,8,9]]
endend
endend
[m1,n1]=size(p0); %獲取矩陣p0的大小:m1行n1列
[m2,n2]=size(q0); %獲取矩陣q0的大小:m2行n2列
p=p0(:,2:n1); %將矩陣p0的第2列到最後一列賦值給矩陣p(因為第一列是列向量初始化列,其全為0)
q=q0(2:m2,:); %將矩陣q0的第2行到最後一行賦值給矩陣q(因為第一行是行向量初始化行,其全為0)
矩陣的Cholesky分解的Matlab實現
cholesky分解在matlab裡面有專門的函式chol 其呼叫格式為 r chol x 這一函式功能就不介紹了,但有些場合只能用最基礎的函式,所以,下面給出cholesky分解的最基礎形式。cholesky分解法 function x m chol a,b n,n size a x zeros ...
矩陣低秩張量分解 基於模態特定因子的低秩多模態融合
為了解決基於張量的多模態融合方法計算效率差的問題,文章提出了一種低秩多模態融合的方法 low rank multimodal fusion,lmf 的方法。通過將張量和權重並行分解,利用模態特定的低階因子來執行多模態融合。避免計算高維的張量,降低了記憶體開銷,將指數級的時間複雜度降低到了線性。文章提...
矩陣sum 矩陣LU分解的MATLAB與C 實現
矩陣的lu分解目的是將乙個非奇異矩陣 比如 現在主要的問題是如何由矩陣 計算得到矩陣 和 呢?我們將在下面詳細討論。首先從矩陣 入手,因為它是乙個上三角矩陣,所以很容易想到高斯消元法,依次把矩陣 主對角線左下角的元素消為 就得到 了。然後計算矩陣 這裡有個技巧,可以這樣想,正是因為有了 所以 的左下...