目录
四、总结:
一、前言:
个人学习内容分享
二、算法描述:
平方根法:
如果A为n阶对称正定矩阵,则存在一个实的非奇异下三角矩阵L,使编辑,当限定L的对角元素为正时,这种分解是唯一的。
下面我们用直接分解方法来确定计算L元素的递推公式,因为
编辑
其中编辑.由矩阵乘法及编辑(当j<k时),得
编辑
于是得到对于求解Ax=b的平方根法计算公式:
对于j=1,2,...,n
编辑
编辑
求解Ax=b,即求解两个三角形方程组:
①Ly=b,求y; ②LTx=y,求x.
编辑
编辑
其中:编辑
编辑
所以编辑
改进的平方根法:
为了避免开方,我们下面用定理9的分解式A=编辑
即 编辑
由矩阵乘法,并注意编辑,得
编辑
于是得到计算L得元及D得对角元素公式:
对于i=1,2,...,n.
编辑
编辑
为了避免重复计算,我们引进tij=lijdj,由上式得到按行计算L,T元素得公式:d1=a11
对于i=2,3,...,n.
编辑
编辑
编辑
计算出T=LD的第i行元素tij(j=1,2,...,i-1)后,存放在A的第i行相应位置,然后再计算L的第i行元素,存放在A的第i行.D的对角线元素存放在A的相应位置。例如
编辑
对称正定矩阵A按编辑分解和按编辑分解计算量差不多,但编辑分解不需要开方计算。
求解Ly=b,DLTx=y计算公式:
编辑
编辑
追赶法:
对于A为三对角矩阵时,可分解成以下形式
编辑
即可得到
编辑
从而求解Ax=f等价于解两个三角形方程组:
①Ly=f,求y,②Ux=y,求x.
进而追赶法公式为:
(1)计算{Bi}的递推公式
编辑
编辑
(2)解Ly=f
编辑
编辑
(3)解Ux=y
编辑
编辑
三、实现代码:
1、平方根法:
function X=squareRoot(A,b)
%%功能:平方根算法
n=length(A);
y=b;
X=y;
%变换矩阵
for k=1:n
A(k,k)=sqrt(A(k,k));
A(k+1:n,k)=A(k+1:n,k)/A(k,k);
for j=k+1:n
A(j:n,j)=A(j:n,j)-A(j:n,k)*A(j,k);
end
end
%求解矩阵
for k=1:n
y(k)=(b(k)- sum(A(k,1:k-1)*y(1:k-1)))/A(k,k);
end
A=A';
for k=n:-1:1
X(k)=(y(k)-sum(A(k,k+1:n)*X(k+1:n)))/A(k,k);
end
2、改进的平方根法:
function X=ImprovedSquareRoot(A,b)
%%功能:改进的平方根公式
n=length(A);
v=b;
y=b;
X=b;
%变换矩阵
for j=1:n
for k=1:j-1
v(k)=A(j,k)*A(k,k);
end
A(j,j)=A(j,j)-sum(A(j,1:j-1)*v(1:j-1));
for i=j+1:n
A(i,j)=(A(i,j)-sum(A(i,k)*v(1:j-1)))/A(j,j);
end
end
%求解矩阵
D=diag(diag(A));
A=A-D+diag(diag(ones(3)));
for k=1:n
y(k)=(b(k)-sum(A(k,1:k-1)*y(1:k-1)))/A(k,k);
end
d=diag(D);
X(n)=y(n)/d(n);
for k=n-1:-1:1
X(k)=y(k)/d(k)-sum(A(k+1:n,k).*X(k+1:n));
end
end
3、追赶法:
function X=CatchUpMethod(a,b,c,f)
%%功能:追赶法
n=length(b);
B=f;
B(1)=c(1)/b(1);
for k=2:n-1
B(k)=c(k)/(b(k)-a(k)*B(k-1));
end
y(1)=f(1)/b(1);
for k=2:n
y(k)=(f(k)-a(k-1)*y(k-1))/(b(k)-a(k-1)*B(k-1));
end
X(n)=y(n);
for k=n-1:-1:1
X(k)=y(k)-B(k)*X(k+1);
end
end
四、总结:
标签:end,22%,矩阵,数值,编辑,matlab,2C%,平方根法 From: https://www.cnblogs.com/bubianyingzi/p/17007088.html