数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组

这篇具有很好参考价值的文章主要介绍了数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、问题

现要求解系数矩阵由16 阶Hilbert 方程组构成的线性方程组,右端项为

数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组 即要求解方程组Ax = b,其中 A=A0,b=b0

数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组

 分别用高斯-赛德尔方法、最速下降法、共轭梯度法求解如下。

2.1. 高斯-赛德尔方法 

数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组 

 2.2. 最速下降法

 数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组

 2.3. 共轭梯度法

 在最速下降法中,搜索方向p取的是函数减少最快的方向,负梯度方
向从局部上看是二次函数的最快下降方向,但是整体上看这并非最好。对于对称
正定矩阵A,共轭梯度法选择关于A 共轭的向量p1, p2, …代替最速下降法中的
负梯度方向,使迭代法对任意给定的初始点x0具有有限步收敛性。共轭梯度法
本质上是利用 A正交定理,反复对残差实施施密特正交化。

 3、对比

 绘制出最速下降法的搜索示意图如图3.1,梯度下降法中,相邻残差向量是
相互正交的,从图中可以看出,每一步的向量都与前后步的向量正交。

数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组

 在此次实验中,由于Hilbert 矩阵的病态性,高斯-赛德尔迭代法、最速下降
法、共轭梯度法表现各不相同。高斯-赛德尔迭代法和最速下降法迭代次数较高
且结果不稳定,共轭梯度法以超线性的效率计算出结果,仅迭代3 次。

 4、代码实现文章来源地址https://www.toymoban.com/news/detail-450826.html

# *coding:utf-8 *
import numpy as np
# A_0是16阶hilbert矩阵
A_0 = 1. / (np.arange(1, 17) + np.arange(0, 16)[:, np.newaxis])
A = np.array(A_0)
b = np.array([2877.0 / 851, 3491.0 / 1431, 816.0 / 409, 2035.0 / 1187,
              2155.0 / 1423, 538.0 / 395, 1587.0 / 1279, 573.0 / 502,
              947.0 / 895, 1669.0 / 1691, 1589.0 / 1717, 414.0 / 475,
              337.0 / 409, 905.0 / 1158, 1272.0 / 1711, 173.0 / 244])
x0 = np.array(np.zeros(16))
x = np.array(np.zeros(16))
r = b - np.dot(A, x)
p = r

def GS(x0):
    k = 0
    while k < 10000:
        for i in range(16):
            temp = 0
            temp_x = x0.copy()
            for j in range(16):
                if i != j:
                    temp += x[j] * A[i][j]
            x[i] = (b[i] - temp) / A[i][i]
            x0[i] = x[i].copy()
        norm = np.linalg.norm(x - temp_x)
        k += 1
        if norm < 1e-4:
            break
        else:
            x0 = x.copy()
            print("高斯-赛德尔迭代法:迭代次数k =", k)
            print(x)

def GD(x):
    k = 0
    while k < 10000:
        x0 = x.copy()
        k += 1
        r = b - np.dot(A, x0)
        a = np.dot(r.T, r) / np.dot(r.T, np.dot(A, r))
        x = x0 + a * r
        norm = np.linalg.norm(x0 - x)
        if norm < 1e-4:
            break
        print("最速下降法:迭代次数k =", k)
        print(x)

def CG(x, r, p):
    k = 0
    while True:
        k += 1
        r1 = r
        a = np.dot(r.T, r) / np.dot(p.T, np.dot(A, p))
        x = x + a * p
        r = r - a * np.dot(A, p)
        er = np.linalg.norm(np.dot(A, x) - b) / np.linalg.norm(b)
        if er < 1e-4:
            break
        else:
            beta = np.linalg.norm(r) ** 2 / np.linalg.norm(r1) ** 2
            p = r + beta * p
        print("共轭梯度法:迭代次数k=", k)
        print(x)

if __name__ == '__main__':
    # GS(x0)
    # GD(x)
    CG(x, r, p)

到了这里,关于数值分析第二次作业-求解系数矩阵为Hilbert 矩阵的线性方程组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • web前端(第二次作业)

    1、计算用户指定的数值内的奇数和。例如用户输入的是 10,则计算 1 + 3 + 5 + 7 + 9 的和 运行截图: 2.使用递归计算 1 ~ 100 的和 运行结果;

    2024年01月17日
    浏览(47)
  • web前端第二次作业

    1,计算用户指定的数值内的奇数和 效果运行图: 代码: 2,使用递归计算 1 ~ 100 的和 效果运行图: 代码:

    2024年01月16日
    浏览(46)
  • 网络服务第二次作业

      [root@localhost ~]# vim /etc/httpd/conf.d/vhosts.conf  Virtualhost 192.168.101.200:80           #虚拟主机IP及端口         DocumentRoot  /www/openlab        #网页文件存放目录         ServerName www.openlab.com      #服务器域名 /VirtualHost Directory /www         AllowOverride none                      

    2024年02月11日
    浏览(40)
  • 数据库第二次作业

    目录 一、要求 二、操作 建表 插入数据  1、显示所有职工的基本信息 2、查询所有职工所属部门的部门号,不显示重复的部门号  ​编辑 3、求出所有职工的人数​编辑 4、列出最高工和最低工资 ​5、列出职工的平均工资和总工资 6、创建一个只有职工号、姓名和参加工作的

    2024年02月13日
    浏览(41)
  • 密码学——Hill体制密码中已知明文M和密文C求解密钥矩阵K的两种方法之逆矩阵求解法和待定系数求解法

    本文主要解决古典密码中的Hill体制密码在已知明文M和密文C的情况下求解密钥矩阵K的两种方法:①求逆矩阵②待定系数法。 如若不懂Hill体制的古典密码可以参照我上一篇文章密码学——几种典型的古典密码体制(Caesar体制、Playfair体制、Vigenere体制、Beaufort体制以及Hill体制)

    2024年02月02日
    浏览(62)
  • 软件工程实践第二次作业---文件读取

    这个作业属于哪个课程 软件工程-23年春季学期 这个作业要求在哪里 软件工程实践第二次作业—文件读取 这个作业的目标 完成对澳大利亚网球公开赛相关数据的收集,并实现一个能够对赛事数据进行统计的控制台程序 其他参考文献 《构建之法》《源代码管理》 0.Gitcode项目

    2024年03月15日
    浏览(65)
  • 数值分析——线性方程组求解

    清理磁盘的时候偶然发现大二下数值分析的实验作业还在,本着在丢弃之前可以放在网上以备不时之需的原则,我便发了上来。 分别用直接法、Jacobi迭代法、Gauss-Seidel迭代法求解下列线性方程组AX = b,其中A为五对角矩阵(n=20),b是除第一个分量是1外,其他分量都是0的列向量

    2024年02月05日
    浏览(43)
  • 数值分析A-实验作业1 - 3.1

    注:为了便于校验结果,本文为实验报告的补充 相关MATLAB函数提示 可能用到的MATLAB函数 zeros(m,n) 生成m行,n列的零矩阵 ones(m,n) 生成m行,n列的元素全为1的矩阵 eye(n) 生成n阶单位矩阵 rand(m,n) 生成m行,n列(0,1)上均匀分布的随机矩阵 diag(x) 返回由向量x的元素构成的对角矩阵 t

    2024年02月06日
    浏览(49)
  • MATLAB数值分析学习笔记:线性代数方程组的求解和高斯消元法

    工程和科学计算的许多基本方程都是建立在守恒定律的基础之上的,比如质量守恒等,在数学上,可以建立起形如 [A]{x}={b} 的平衡方程。其中{x}表示各个分量在平衡时的取值,它们表示系统的 状态 或 响应; 右端向量{b}由无关系统性态的常数组成通常表示为 外部激励。 矩阵

    2023年04月15日
    浏览(63)
  • <<数值分析>>第二章线性方程组的直接解法

              解线性方程组是工程数学中最常见的模型之一。所说的“最常见”有两方面的含义: 1)一部分工程问题的本身建立的就是线性方程组模型; 2)较多工程问题建立的非线性方程组模型需要转化为线性方程组的求解。           线性方程组为Ax=b,以下介绍

    2024年02月08日
    浏览(56)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包