丁丁的Matlab学习笔记20191214 三角分解解方程

利用上下三角分解的方法解方程

解线性方程的直接法是指在无舍入误差存在的情况下,经过有限步计算即可求得方程组精确解的算法,这种方法是通过矩阵约化将原方程组化成与之等价的三角形方程组或者其他形式的可以直接求解的方程组而实现的。今天用的代码就是用了消元的思想。

主元消去法

简单的知识储备

  • 定理 设A的前n-1个顺序主子阵非奇异,则存在单位下三角矩阵L及上三角矩阵U,使得A=LU,而且这样的分解是唯一的。

在很多时候这样的分解不能够直接的实现,这个时候要使用主元消去法,从第一列开始选取绝对值最大的元素所在行作为主元,对其他行进行消元,直至最后一列,实现代码如下。

function y=principal(A)     %A是系数矩阵,b是方程组右侧的列向量
%化简方程
n = length(A);
A = [A';B]';
for i=1:n-1
    [m,s]=max(abs(A(i:n,i)));
    s = s+i-1
    while(m)
        A([s,i],:)=A([i,s],:);
        for j=i+1:n
            A(j,:)=A(j,:)-A(i,:)*A(j,i)/A(i,i);
        end
        m=0;
    end
end
B = A(1:n,1:n);
%计算方程
for i=n:-1:2
    A(i,:)=A(i,:)/A(i,i);
    for j=i-1:-1:1
        A(j,:)=A(j,:)-A(i,:)*A(j,i)/A(i,i);
    end
end
A(1,:)=A(1,:)/A(1,1);
y = A(:,n+1);

Cholesky分解

对于一些特殊的情况是不需要选取主元的,例如系数矩阵为严格对角占优或者不可约对角占优矩阵。
当系数矩阵为对称正定矩阵的时候,也不用选取主元。
可以将其分解为LL’的形式,此时L不一定是单位下三角矩阵,代码实现如下。

function l=Cholesky(A) %A是分解的矩阵
n = length(A);
l = zeros(n);
for j = 1:n
    if j == 1
       l(j,j) = sqrt(A(1,1)); 
    else 
        for k=1:j-1
            l(j,j) = l(j,j)+l(j,k)^2;
        end
        l(j,j) = sqrt(A(j,j)- l(j,j));
    end
    for i = j+1:n
        for k=1:j-1
            l(i,j) = l(i,k)*l(j,k);
        end
        l(i,j) = (A(i,j)-l(i,j))/l(j,j);
    end
end

该分解方法可以与追赶法相结合进行方程组的求解,即将方程Ax=b问题转化为解Ly=b和L’x=y;
实现的代码如下。

function y= question6(l,b) %b是方程组右侧的列向量
L = l;
n = length(L);
y = zeros(1,n);
y(1) = b(1)/L(1,1);
for i=2:n
    y(i) = (b(i)-L(i,i-1)*y(i-1))/L(i,i);
end
L = l';
y(n)=y(n)/L(n,n);
for i=n-1:-1:1
    y(i) = (y(i)-L(i,i+1)*y(i+1))/L(i,i);
end
    

这次的内容主要参考了冯国忱和黄明游老师的数值分析,这本书写的很精妙,还有很多东西是我读不懂的,编程也编了很久,其实还是平常的时间花费的不够,继续加油!

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

丁lingling哇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值