Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)

这篇具有很好参考价值的文章主要介绍了Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1.要求

考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即病态方程组求解方法机器学习,计算方法lab,matlab,线性代数,矩阵

通过先给定解(例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题.

(1)分别编写Doolittle LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代的一般程序;

(2)取阶数n=6,分别用 LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代去求解上述的病态方程组Hx = b;分别报告它们的数值结果(包括数值解、迭代步数)以及它们在1-范数下的计算误差。迭代法的停止条件均取为病态方程组求解方法机器学习,计算方法lab,matlab,线性代数,矩阵

2.Matlab实现(取迭代初值为0)

2.1.1 LU分解函数

function [L,U,y,x] = LU(A, b) 
% LU矩阵分解
% inputs:
%        A:输入的系数矩阵,大小为[n,n]
%        B:输入的乘积向量,大小为n
% outputs:
%        L:下三角阵,大小为[n,n]
%        U:上三角阵,大小为[n,n]
%        y:中间矩阵,大小为n
%        x:结果矩阵,大小为n

%% 第一步:初始化
% 获取n值
[arow, acol] = size(A);

%% 计算L,U矩阵
for i=1:arow
    L(i,i)=1; %L对角线是1
end
for j=1:acol  %U第一行
    U(1,j)=A(1,j);
end
for k=2:arow  %L第一列
    L(k,1)=A(k,1)/U(1,1);
end
for m=2:(arow-1)
    for j=m:arow %m右下角缺少
        s1=0;
        for k=1:(m-1)
            s1=s1+L(m,k)*U(k,j);
        end
        U(m,j)=A(m,j)-s1;
    end
    for i=(m+1):arow
        s2=0;
        for k=1:m-1
            s2=s2+L(i,k)*U(k,m);
        end
        L(i,m)=(A(i,m)-s2)/U(m,m);
    end
end
s1=0;
for k=1:(arow-1)
    s1=s1+L(arow,k)*U(k,acol);
end
U(arow,acol)=A(arow,acol)-s1; %补上U的右下

%% 计算y
n=arow;
y(1)=b(1);
for i=2:n 
    s=0;
    for k=1:(i-1)
        s=s+L(i,k)*y(k);
    end
    y(i)=b(i)-s;
end

%% 计算x
x(n)=y(n)/U(n,n);

for i=1:(n-1)
    s=0;
    for k=0:(i-1)
        s=s+U(n-i,n-k)*x(n-k);
    end
    x(n-i)=(y(n-i)-s)/U(n-i,n-i);
end
end

2.1.2 LU分解

%% n=6
for i=1:6
    for j=1:6
        a(i,j)=1/(i+j-1);
    end
end


for i=1:6
    s=0;
    for j=1:6
        s=s+a(i,j);
    end
    b(i)=s;
end


[L1,U1,Y1,X1] = LU(a,b);
X1
Y1
L1
U1

2.2.1 Jacobi迭代函数

function [x2] = Jacobi(x1,a,b)
%输入要迭代的一组x记作x1,输出迭代后的x记作x2
n=length(x1);
s=0;
for k=2:n
    s=s+a(1,k)*x1(k);
end
x2(1)=(b(1)-s)/a(1,1);
for i=2:(n-1)
    s1=0;
    s2=0;
    for j=1:(i-1)
        s1=s1+a(i,j)*x1(j);
    end
    for j=(i+1):n
        s1=s1+a(i,j)*x1(j);
    end
    x2(i)=(b(i)-s1-s2)/a(i,i);
end
s=0;
for j=1:(n-1)
    s=s+a(n,j)*x1(j);
end
x2(n)=(b(n)-s)/a(n,n);
end

2.2.2 Jacobi迭代(结果为inf)

%% n=6
for i=1:6
    for j=1:6
        a(i,j)=1/(i+j-1);
    end
end
b=[];
for i=1:6
    s=0;
    for j=1:6
        s=s+a(i,j);
    end
    b(i)=s;
end
x1=[0,0,0,0,0,0];
x0=[1,1,1,1,1,1];
for p=0:1000000
    [x2]=Jacobi(x1,a,b);
    p=p+1;
    if norm(x2-x1,1)<0.00001
        break
    end
    x1=x2;

end
x1
p
error=norm(x1-x0,1)

2.3.1 GS迭代函数

function [x] = Guass(x,a,b)
%输入要迭代的一组x记作x1,输出迭代后的x记作x2
n=length(x);
s=0;
for k=2:n
    s=s+a(1,k)*x(k);
end
x(1)=(b(1)-s)/a(1,1);
for i=2:(n-1)
    s1=0;
    s2=0;
    for j=1:(i-1)
        s1=s1+a(i,j)*x(j);
    end
    for j=(i+1):n
        s1=s1+a(i,j)*x(j);
    end
    x(i)=(b(i)-s1-s2)/a(i,i);
end
s=0;
for j=1:(n-1)
    s=s+a(n,j)*x(j);
end
x(n)=(b(n)-s)/a(n,n);
end

2.3.2 GS迭代文章来源地址https://www.toymoban.com/news/detail-672576.html

%% n=6
for i=1:6
    for j=1:6
        a(i,j)=1/(i+j-1);
    end
end
b=[];
for i=1:6
    s=0;
    for j=1:6
        s=s+a(i,j);
    end
    b(i)=s;
end
x31=[0,0,0,0,0,0];
x0=[1,1,1,1,1,1];
for p=0:100000
    [x32]=Guass(x31,a,b);
     p=p+1;
    if norm(x32-x31,1)<0.00001
        break
    end
    x31=x32;
 
end
x31
p
error=norm(x31-x0,1)

到了这里,关于Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • CS144 计算机网络 Lab4:TCP Connection

    经过前面几个实验的铺垫,终于到了将他们组合起来的时候了。Lab4 将实现 TCP Connection 功能,内部含有 TCPReceiver 和 TCPSender ,可以与 TCP 连接的另一个端点进行数据交换。 简单来说,这次实验就是要在 TCPConnection 类中实现下图所示的有限状态机: 这些状态对应 TCPState 的内部

    2024年02月03日
    浏览(46)
  • 《计算机网络自顶向下》Wireshark实验 Lab4 TCP

    《计算机网络自顶向下》Wireshark Lab + 套接字编程作业 + 杂项实验室编程作业 全实验博客链接 各位好 啊 学计算机想要学好真的还是挺难的 说实话 科班学计算机如果想要花大量的时间去学 只能把平时的课程大部分时间不去上 如果班级管理严格或者说 各种因素让你不得不去上

    2023年04月09日
    浏览(70)
  • MIT6824——lab4(实现一个分片kv存储)的一些实现,问题,和思考

    和lab3A一样,shardctler也是一个服务,由客户端调用。这个服务建立在raft集群上, 保证容错。 shardctler也应该保证 线性一致性和重复请求的问题 ,因此也需要记录clientid和messageid。 shardctler保存了当前的分片信息,称为配置 Num:当前配置号 Shards:每一个分片对应的副本组id—

    2024年02月07日
    浏览(40)
  • 数值分析——三角分解法(LU分解法)C++

    从例题着手,求解方程组: 10x1+20x2+20x3+50x4=200 50x1+40x2+10x3+10x4=250 30x1+10x2+40x3+20x4=210 20x1+40x2+40x3+40x4=340 根据方程组可以得到系数矩阵Aij[4][4], 通过矩阵A的元素进行LU分解;由Ax=b,从题干得到b[4]矩阵。现在已知了A、b矩阵,再通过LU分解法的递推公式计算出L U矩阵各个元素。 注意

    2024年02月09日
    浏览(41)
  • Python矩阵LU分解

    scipy.linalg 中提供了一系列矩阵分解函数,其中最基础的肯定是LU分解。 LU分解,即使得矩阵 A A A 分解为 L U LU LU ,其中 L L L 为下三角阵, U U U 为上三角阵。对于这两种矩阵, scipy.linalg 中提供了 tril, triu ,可以将第 k k k 条对角线下面或上面的所有元素置零,即可以此获取L矩

    2024年02月08日
    浏览(34)
  • LU分解(C++)

    LU分解是一种重要的数值线性代数技术, 用于解决线性方程组和矩阵求逆等问题. 在科学工程领域, 经常需要解决形如 A x = b Ax = b A x = b 的线性方程组, 其中 A A A 是系数矩阵, x x x 是未知向量, b b b 是已知向量. LU分解是一种将系数矩阵 A A A 分解为一个下三角矩阵 L L L 和一个上三

    2024年01月16日
    浏览(34)
  • Javaee课程lab4,学生信息管理系统(MVC(JSP+JavaBeans+Servlet)+ JDBC)

    实验目的: 1、熟悉MVC设计模式,掌握编程思路 2、综合运用JSP、Servlet、JavaBean、JDBC等技术实现MIS系统—学生信息管理系统(铁大) JDBC是Java Database Connectivity(Java数据库连接)的缩写,编程人员可以通过这个API接口连接到数据库,并使用结构化查询语言(SQL)完成对数据库的

    2024年02月09日
    浏览(45)
  • 详解矩阵的三角分解A=LU

    目录 一. 求解Ax=b 二. 上三角矩阵分解 三. 下三角矩阵分解 四. 矩阵的三角分解 举例1:矩阵三角分解 举例2:三角分解的限制 举例3:主元和乘法因子均为1 举例4:U为单位阵 小结 我们知道高斯消元法可以对应矩阵的基础变换。先来看我们比较熟悉的Ax=b模型,如下: 解这个方

    2024年01月24日
    浏览(41)
  • 【国科大——矩阵分析与应用】LU分解

    LU分解是旨在将某个矩阵表示为两个或多个矩阵的乘积。 LU分解是将矩阵表示为 A A A = L L L U U U ,其中 L L L 矩阵 代表 Lower Triangular(下三角矩阵) , U U U 矩阵 代表 Upper Triangular(上三角矩阵) 。形象一点就相当于写为 A = ◣ ∗ ◥ A=◣*◥ A = ◣ ∗ ◥ 。 1. 求解U矩阵 先求U矩

    2024年02月07日
    浏览(38)
  • 04 MIT线性代数-矩阵的LU分解 Factorization into A=LU

    目的: 从矩阵的角度理解高斯消元法, 完成 LU 分解得到 A = LU U 为上三角阵(Upper triangular matrix),  L 为下三角阵(Lower triangular matrix), 通过分解得到对角阵 D (diagonal matrix) 设定一组消元矩阵,其中 E31 为单位阵 I ,其它两个消元矩阵如下: row3 -5 newrow2 = row3 -5( row2 -2 row1 )= row3 -

    2024年02月07日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包