定理:
設a如果為非奇異矩陣,則必存在排列矩陣p以及單位下三角矩陣l和非奇異上三角矩陣u,使得 pa分類:=lu
一般有doolittle分解和crout分解。
原理:根據矩陣乘法推導
doolittle分解( matlab程式)
doolittle分解,分解的矩陣儲存到原係數矩陣,減少記憶體
clear;
a=[5,7,9,10;6,8,10,9;7,10,8,9;5,7,6,5];
[n,cl]=size(a);
b=[26;18;22;9];
% disp(b(4));列向量行向量都可以用陣列方式()訪問
fori=1:n
forj=1:n
if(i
<=j)
a(i,j)=a(i,j)-a(i,1:i-1)*a(1:i-1,j);
%l單位下三角陣
else
a(i,j)=(a(i,j)-a(i,1:j-1)*a(1:j-1,j))/a(j,j);
%u上三角陣
endend
end%lux=b
%ly=b先解y,再解ux=y,再解x
y=zeros(4,1);
fori=1:n
y(i,1)=b(i,1)-a(i,1:i-1)*y(1:i-1,1);
end%利用matlab矩陣可以用冒號迭代,減少**數量
x=zeros(4,1);
fori=n:-1:1
x(i,1)=(y(i,1)-a(i,i+1:n)*x(i+1:n,1))/a(i,i);
end
注意:
上面為自己根據理解編寫的程式,還需改進,如:可以用二維陣列存放增廣矩陣a(1:n;1:n+1),在矩陣a基礎上進行處理,這樣係數矩陣的doolittle分解與解方程組ly
=b可以同時進行,最後增廣矩陣最後一列就是
y 的值,再解ux
=y即完成了計算。
crout分解( matlab程式)
針對特殊係數矩陣(對角佔優的三對角矩陣),crout分解,此為追趕法。
方便計算記住:l對角元(i,i)=a對角元(i,i)-a對角元左邊(i,i-1)*a對角元上面(i-1,i)
u次對角元(i,i+1)=a(i,i+1)/a對角元(i,i)
a=[2,1,0,0;1,4,1,0;0,1,4,1;0,0,1,2];
b=[-3;6;14;2];
[n,cl]=size(a);
x=zeros(4,1);
%將a分解成二對角元的下三角矩陣l和二對角元的上三角矩陣u,若u對角元為1則為crout分解
a(1,2)=a(1,2)/a(1,1);
fori=2:n
a(i,i)=a(i,i)-a(i,i-1)*a(i-1,i);
if(i
<=n-1)
a(i,i+1)=a(i,i+1)/a(i,i);
endend%解lux=b,先解ly=b,再解ux=b;
x(1)=b(1)/a(1,1);
fori=2:n
x(i)=(b(i)-a(i,i-1)*x(i-1))/a(i,i);
endx(n)=x(n);
fori=n-1:-1:1
x(i)=x(i)-a(i,i+1)*x(i+1);
endformat rat;%以分數展示結果
%format解除分數顯示
disp(a);
disp(x);
總結
總的來說兩種分解方法都有其類似的地方,同時注意矩陣分解的方法來求方程組的解精度比消元法高而且更節約記憶體。同時注意兩種分解方法的計算順序以及計算技巧。doolittle分解先計算行,再計算列,crout分解先進行l,再計算u
PCA 分解的基本推導和計算方法
pca是資料降維的一種方法,其目標是找到資料分布方差最大的方向,並將資料向該方向投影並保持投影後恢復資料的殘差最小。即找到e和a,使得x的估計值x m e a與x殘差最小。注意,這裡e為乙個方向向量 非矩陣 且限定e的模為1 否則a和e不唯一 pca的推導,通過最優化x x 的均方誤差最小,得到a ...
PCA 分解的基本推導和計算方法
pca是資料降維的一種方法,其目標是找到資料分布方差最大的方向,並將資料向該方向投影並保持投影後恢復資料的殘差最小。即找到e和a,使得x的估計值x m e a與x殘差最小。注意,這裡e為乙個方向向量 非矩陣 且限定e的模為1 否則a和e不唯一 pca的推導,通過最優化x x 的均方誤差最小,得到a ...
計算方法筆記合輯
來個大雜燴 嚴格寫就太累了,這個就當是隨手的筆記得了。大概看看原理,不求甚解。定義函式 f 的不動點 r 為滿足 f r r 的所有取值 考慮函式 f 定義不動點迭代演算法如下 任取 x in d f 計算 x f x 重複步驟2 k 次 記出現的所有 x 按順序構成數列 left 定理如下 若 f...