對矩陣進行滿秩分解的MATLAB演算法

2021-06-28 01:56:43 字數 1280 閱讀 9800

演算法程式是從網上摘抄過來的,但是我新增了注釋

由於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分解目的是將乙個非奇異矩陣 比如 現在主要的問題是如何由矩陣 計算得到矩陣 和 呢?我們將在下面詳細討論。首先從矩陣 入手,因為它是乙個上三角矩陣,所以很容易想到高斯消元法,依次把矩陣 主對角線左下角的元素消為 就得到 了。然後計算矩陣 這裡有個技巧,可以這樣想,正是因為有了 所以 的左下...