1.cholesky分解在matlab裡面有專門的函式chol(其呼叫格式為:r=chol(x))這一函式功能就不介紹了,但有些場合只能用最基礎的函式,所以,下面給出cholesky分解的最基礎形式。
%cholesky分解法
function [x]=m_chol(a,b)
[n,n]=size(a);
x=zeros(n,1);
y=zeros(n,1);
for i=1:n
a(i,i)=sqrt(a(i,i)-a(i,1:i-1)*a(i,1:i-1)');
if a(i,i)==0
'a is singular. no unique solution'
break
end
for j=i+1:n
a(j,i)=(a(j,i)-a(j,1:i-1)*a(i,1:i-1)')/a(i,i);
end
end
a b
%前代法
for j=1:n
y(j)=(b(j)-a(j,1:j-1)*y(1:j-1))/a(j,j);
end
y %
a=a'
for k=n:-1:1
x(k)=(y(k)-a(k,k+1:n)*x(k+1:n))/a(k,k);
end
如果矩陣x是對稱正定的,則cholesky分解將矩陣x分解成乙個下三角矩陣和上三角矩陣的乘積。設上三角矩陣為r,則下三角矩陣為其轉置,即x=r』r。
另外,cholesky分解可能出現非正定問題, [r,p]=chol(x):這個命令格式將不輸出出錯資訊。當x為對稱正定的,則p=0,r與上述格式得到的結果相同;否則p為乙個正整數。如果x為滿秩矩陣,則r為乙個階數為q=p-1的上三角陣,且滿足r』r=x(1:q,1:q)。 實現cholesky分解後,線性方程組ax=b變成r『rx=b,所以x=r(r』\b)。
2.下面給出兩個部落格講解
(1)cholesky原理:
(2)c語言實現方式:
矩陣分解 Cholesky分解
矩陣分解是將矩陣拆解為數個矩陣的乘積,可分為三角分解 滿秩分解 qr分解 jordan分解和svd 奇異值 分解等。cholesky分解法是求解對稱正定線性方程組最常用的方法之一。可採用如下命令 r chol a 產生乙個上三角陣r,使r r a。若a為非對稱正定,則輸出乙個出錯資訊。r,p cho...
矩陣的分解
matlab中有這個恒等式 a triu a,1 tril a,1 diag diag a 將矩陣分解為乙個上三角陣 下三角陣和乙個對角陣。測試如下 format compact a 1 2 3 4 5 6 7 8 9 a 1 2 3 4 5 6 7 8 9 u triu a,1 u 0 2 3 0...
矩陣的Crout分解
本函式將乙個滿秩方陣按crout方式分解 function l,u crout a b size a b 1 行 b 2 列 n b 1 這裡只處理n n的非奇異矩陣 錯誤檢查 if b 1 b 2 非方陣錯誤 error matlab crout input matrix should be a ...