数值分析第五章节 用Python实现解线性方程组的直接解法

news/2024/4/25 9:37:47/文章来源:https://blog.csdn.net/zhishichengjin/article/details/131997729

参考书籍:数值分析 第五版 李庆杨 王能超 易大义编 第5章 解线性方程组的直接解法
文章声明:如有发现错误,欢迎批评指正

文章目录

  • 引言与预备知识
  • 高斯消去法
    • 列主元消去法
  • 矩阵三角分解法
    • 杜利特尔分解法
    • 平方根法
  • 向量和矩阵的范数
  • 误差分析

引言与预备知识

5.1.1:关于线性方程组的数值解法一般有两类:直接法和迭代法。5.1.2向量和矩阵:非奇异矩阵:设 A ∈ R n × n A\in R^{n\times n} ARn×n B ∈ R n × n B\in R^{n\times n} BRn×n。如果 A B = B A = I AB=BA=I AB=BA=I,则称 B B B A A A的逆矩阵,记为 A − 1 A^{-1} A1,且 ( A − 1 ) T = ( A T ) − 1 (A^{-1})^T=(A^T)^{-1} (A1)T=(AT)1。如果 A − 1 A^{-1} A1存在,则称 A A A为非奇异矩阵。如果 A , B ∈ R n × n A,B\in R^{n\times n} ABRn×n均为非奇异矩阵,则 ( A B ) − 1 = B − 1 A − 1 (AB)^{-1}=B^{-1}A^{-1} (AB)1=B1A1。其他跳过。5.1.3矩阵的特征值与谱半径: A A A的全体特征值称为 A A A的谱,记作 σ ( A ) \sigma(A) σ(A),即 σ ( A ) = { λ 1 , λ 2 , … , λ n } \sigma(A)=\{\lambda_1,\lambda_2,\dots,\lambda_n\} σ(A)={λ1,λ2,,λn}。记 ρ ( A ) = max ⁡ 1 ≤ i ≤ n ∣ λ i ∣ \rho(A)=\max\limits_{1\leq i\leq n}|\lambda_i| ρ(A)=1inmaxλi,称为矩阵 A A A的谱半径。其他跳过。5.1.4特殊矩阵:直接跳过。都是高等代数知识,所以我们直接跳过。

高斯消去法

5.2.1高斯消去法:十分简单大家都会,注意一下使用条件。定理:约化的主元素 a i i ( i ) ≠ 0 ( i = 1 , 2 , … , k ) a_{ii}^{(i)}\neq0(i=1,2,\dots,k) aii(i)=0(i=1,2,,k)的充要条件是矩阵 A A A的顺序主子式 D i ≠ 0 ( i = 1 , 2 , … , k ) D_i\neq0(i=1,2,\dots,k) Di=0(i=1,2,,k)(挺重要的,挺好证的)。矩阵的初等行变换其实就是左乘一个矩阵。 L ( 1 ) A ( 0 ) = A ( 1 ) , … , L ( n ) A ( n − 1 ) = A ( n ) 。 L = L ( n − 1 ) × ⋯ × L ( 1 ) , U = A ( n ) L^{(1)}A^{(0)}=A^{(1)},\dots,L^{(n)}A^{(n-1)}=A^{(n)}。L=L^{(n-1)}\times\dots\times L^{(1)},U=A^{(n)} L(1)A(0)=A(1),,L(n)A(n1)=A(n)L=L(n1)××L(1)U=A(n) 5.2.3列主元法:我们使用列主元法进行演示。5.2.2矩阵的三角分解:定理(矩阵的LU分解):设 A A A n n n阶矩阵,如果 A A A的顺序主子式 D i ≠ 0 ( i = 0 , 1 , … , n − 1 ) D_i\neq0(i=0,1,\dots,n-1) Di=0(i=0,1,,n1),则 A A A可分解为一个单位下三角矩阵 L L L和一个上三角矩阵 U U U的乘积,且这种分解是唯一的。5.2.1,5.2.3,5.2.2的顺序更有条理。

列主元消去法

我感觉我写得挺好,可以算作通用代码,前提必须保证有解。caozuo1是交换,caozuo2是归0。你把caozuo1删除了,就是高斯消去。这是第五章节例4,书上每步全都采用4位近似,我的更加准确一点。

def caozuo1(lt,x):global ma,b=x,abs(lt[x][x])for i in range(x+1,m):if abs(lt[i][x])>b:a,b=i,abs(lt[i][x])lt[x],lt[a]=lt[a],lt[x]return lt
def caozuo2(lt,x):global m,nfor i in range(x+1,m):k=-lt[i][x]/lt[x][x];lt[i][x]=0for j in range(x+1,n):lt[i][j]+=lt[x][j]*kreturn lt
def solve(lt):global m,nx=[]for i in range(m-1,-1,-1):cnt=lt[i][n-1]for j in range(len(x)):cnt-=lt[i][n-j-2]*x[j]x.append(cnt/lt[i][i])return x[::-1]
m,n=map(eval,input().strip().split())
lt=[]
for _ in range(m):lt.append([eval(_) for _ in input().strip().split()])
for i in range(m-1):lt=caozuo1(lt,i)lt=caozuo2(lt,i)
print(solve(lt))

在这里插入图片描述

矩阵三角分解法

5.3.1直接三角分解法:1.不选主元的三角分解法。(杜利特尔分解法)2.选主元的三角分解法。我们使用杜利特尔分解法进行演示。
我感觉我写得挺好,可以算作通用代码,前提必须保证有解。这是第五章节例5,与书上的一摸一样。

杜利特尔分解法

def L(lt1,lt2,x):for i in range(x+1,n):cnt=0for j in range(x):cnt+=lt1[i][j]*lt2[j][x]lt1[i][x]=(lt[i][x]-cnt)/lt2[x][x]return lt1
def U(lt1,lt2,x):global lt,nfor i in range(x,n):cnt=0for j in range(x):cnt+=lt1[x][j]*lt2[j][i]lt2[x][i]=lt[x][i]-cntreturn lt2
n=int(input("系数方阵的行列数"))
lt1=[[0 for _ in range(n)] for _ in range(n)]
for _ in range(n):lt1[_][_]=1
lt2=[[0 for _ in range(n)] for _ in range(n)]
lt=[]
for _ in range(n):lt.append([eval(_) for _ in input().strip().split()])
for i in range(n-1):lt2=U(lt1,lt2,i)lt1=L(lt1,lt2,i)
lt2=U(lt1,lt2,n-1)
print("===============L===============")
for i in lt1:for j in i:print("{:>8.2f}".format(j),end="")print()
print("===============U===============")
for i in lt2:for j in i:print("{:>8.2f}".format(j),end=" ")print()

在这里插入图片描述
我们使用之前写的列主元消去法求解。y,x如下。
y:
在这里插入图片描述
x:
在这里插入图片描述
5.3.2平方根法。定理:设 A A A n n n阶对称矩阵,且 A A A的所有顺序主子式均不为零,则 A A A可分解为 A = L D L T A=LDL^T A=LDLT,其中 A A A为单位下三角矩阵, D D D为对角矩阵。定理:如果 A A A n n n阶对称正定矩阵,则存在一个实的非奇异下三角矩阵 L L L,使 A = L L T A=LL^T A=LLT,当限定 L L L的对角元素为正时,这种分解是唯一的。我们对它进行演示。

平方根法

自己随便捏的对称正定矩阵。代码变量LT是L的转置意思。

def caozuo(LT,x):global lt,ncnt=0for i in range(x):cnt+=pow(LT[i][x],2)LT[x][x]=pow(lt[x][x]-cnt,0.5)for i in range(x+1,n):cnt=0for j in range(x):cnt+=LT[j][x]*LT[j][i]LT[x][i]=(lt[x][i]-cnt)/LT[x][x]return LT
n=int(input("系数矩阵的行列数"))
lt=[]
for _ in range(n):lt.append([eval(_) for _ in input().strip().split()])
LT=[[0 for _ in range(n)] for _ in range(n)]
for i in range(n):LT=caozuo(LT,i)
for i in LT:for j in i:print("{:>8.2f}".format(j),end=" ")print()

在这里插入图片描述
5.3.3 追赶法:追赶法更简单,我们就不演示。

向量和矩阵的范数

5.4.1向量范数:向量的 p p p范数: ∣ ∣ x ∣ ∣ p = ( ∑ i = 1 n ∣ x i ∣ p ) 1 p , p ∈ [ 1 , ∞ ) ||x||_p=(\sum\limits_{i=1}^n|x_i|^p)^{\frac{1}{p}},p\in[1,\infty) ∣∣xp=(i=1nxip)p1p[1,)。其他东西我们不管。5.4.2 矩阵范数: ∣ ∣ A ∣ ∣ ∞ = max ⁡ 1 ≤ i ≤ n ∑ j = 1 n ∣ a i j ∣ ||A||_{\infty}=\max\limits_{1\leq i\leq n}\sum\limits_{j=1}^n|a_{ij}| ∣∣A=1inmaxj=1naij(行范数)。 ∣ ∣ A ∣ ∣ 1 = max ⁡ 1 ≤ j ≤ n ∑ i = 1 n ∣ a i j ∣ ||A||_1=\max\limits_{1\leq j\leq n}\sum\limits_{i=1}^n|a_{ij}| ∣∣A1=1jnmaxi=1naij(列范数)。 ∣ ∣ A ∣ ∣ 2 = λ max ⁡ ( A T A ) ||A||_2=\sqrt{\lambda_{\max}(A^TA)} ∣∣A2=λmax(ATA) 。其他东西我们不管。求范数的程序简单所以我们不作演示。

误差分析

定义:设 A A A为非奇异矩阵,称数 c o n d ( A ) v = ∣ ∣ A − 1 ∣ ∣ v ∣ ∣ A ∣ ∣ v ( v = 1 , 2 , ∞ ) cond(A)_v=||A^{-1}||_v||A||_v(v=1,2,\infty) cond(A)v=∣∣A1v∣∣Av(v=1,2,)为矩阵A的条件数。 c o n d ( A ) 2 = ∣ ∣ A − 1 ∣ ∣ 2 ∣ ∣ A ∣ ∣ 2 = λ max ⁡ ( A T A ) λ min ⁡ ( A T A ) cond(A)_2=||A^{-1}||_2||A||_2=\sqrt{\frac{\lambda_{\max}(A^TA)}{\lambda_{\min}(A^TA)}} cond(A)2=∣∣A12∣∣A2=λmin(ATA)λmax(ATA) A A A为对称矩阵时 c o n d ( A ) 2 = ∣ λ 1 ∣ ∣ λ 2 ∣ cond(A)_2=\frac{|\lambda_1|}{|\lambda_2|} cond(A)2=λ2λ1 c o n d ( A ) ∞ = ∣ ∣ A − 1 ∣ ∣ ∞ ∣ ∣ A ∣ ∣ ∞ cond(A)_{\infty}=||A^{-1}||_{\infty}||A||_{\infty} cond(A)=∣∣A1∣∣A c o n d ( A ) cond(A) cond(A)越大方程越病态。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_337232.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python 进阶(五):os 模块

❤️ 博客主页:水滴技术 🌸 订阅专栏:Python 入门核心技术 🚀 支持水滴:点赞👍 收藏⭐ 留言💬 文章目录 1. 文件和目录的基本操作1.1 获取当前工作目录1.2 更改当前工作目录1.3 获取目录下所有…

qssh使用

到官网下载qssh的源码QSsh-botan-1,使用qtcreator打开后,直接编译,即可得到qssh的库 头文件将QSsh-botan-1\src\libs\ssh目录下的.h文件拷到include文件夹下,即为库头文件。 qssh有个问题,如果你将qssh的类放在子线程…

致敬图灵!HashData拥抱数据智能新时代!

图1:2023ACM中国图灵大会现场 生于1912年的艾伦图灵被称为“计算机科学之父”、“人工智能之父”。1966年,国际计算机协会(ACM)为了纪念这位卓越的科学家,设立了以其名字命名的ACM图灵奖,以表彰在计算机领…

MySQL | 常用命令示例

MySQL | 常用命令示例 一、启停MySQL数据库服务二、连接MySQL数据库三、创建和管理数据库四、创建和管理数据表五、数据备份和恢复六、查询与优化 MySQL是一款常用的关系型数据库管理系统,广泛应用于各个领域。在使用MySQL时,我们经常需要编写一些常用脚…

【初阶C语言】整数比大小

各位大佬的光临已是上上签 在C语言刷题过程中,一定遇到过很多比大小的题目,那么本节就专门介绍比大小的方法,若大佬们还有更优解,欢迎补充呀! 本节讲解的方法主要有三种:1.条件判断 2.三目操作符 3.函数调…

干翻Dubbo系列第四篇:Dubbo3第一个应用程序细节补充

前言 不从恶人的计谋,不站罪人的道路,不坐亵慢人的座位,惟喜爱耶和华的律法,昼夜思想,这人便为有福!他要像一棵树栽在溪水旁,按时候结果子,叶子也不枯干。凡他所做的尽都顺利。 如…

14 Linux实操篇-进程管理(重点)

14 Linux实操篇-进程管理(重点) 文章目录 14 Linux实操篇-进程管理(重点)14.1 进程的基本操作14.1.1 进程和程序14.1.2 父进程和子进程14.1.3 常见的Linux进程14.1.4 显示系统执行的进程-ps14.1.5 终止进程-kill/killall14.1.6 查…

36.悬浮板

悬浮板 html部分 <div class"container"><div class"square"></div> </div>css部分 *{margin: 0;padding: 0; } body{background-color: #111;height: 100vh;overflow: hidden;display: flex;justify-content: center;align-it…

【小白必看】Python爬虫实战之批量下载女神图片并保存到本地

文章目录 前言运行结果部分图片1. 引入所需库2. 发送请求获取网页内容3. 解析网页内容并提取图片地址和名称4. 下载并保存图片完整代码关键代码讲解 结束语 前言 爬取网络上的图片是一种常见的需求&#xff0c;它可以帮助我们批量下载大量图片并进行后续处理。本文将介绍如何使…

机器学习 | Python实现NARX模型预测控制

机器学习 | Python实现NARX模型预测控制 目录 机器学习 | Python实现NARX模型预测控制效果一览基本介绍研究内容程序设计参考资料效果一览 基本介绍 机器学习 | Python实现NARX模型预测控制 研究内容 贝叶斯黑盒模型预测控制,基于具有外源输入的非线性自回归模型的预期自由能最…

绝美!轮到AI写真爆火了!18种AI视频制作教程;Llama 2微调的极速指南;Nijijourney官方AI绘画课 | ShowMeAI日报

&#x1f440;日报&周刊合集 | &#x1f3a1;生产力工具与行业应用大全 | &#x1f9e1; 点赞关注评论拜托啦&#xff01; &#x1f916; 摄影写真面临AI技术洗牌&#xff0c;一键生成杂志大片的时代来了 软件&#xff1a;midjourney & Stable Diffusion 模型&#xff…

TypeScript基础篇 - TS模块

目录 模块的概念 Export 语法&#xff08;default&#xff09; Export 语法&#xff08;non-default&#xff09; import 别名 Type Export语法【TS】 模块相关配置项&#xff1a;module【tsconfig.json】 模块相关配置项&#xff1a;moduleResolution 小节总结 模块的…

【LLM】大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model

大语言模型学习之LLAMA 2:Open Foundation and Fine-Tuned Chat Model 快速了解预训练预训练模型评估微调有监督微调(SFT)人类反馈的强化学习(RLHF)RLHF结果局限性安全性预训练的安全性安全微调上手就干使用登记代码下载获取模型转换模型搭建Text-Generation-WebUI分发模型…

pytorch的发展历史,与其他框架的联系

我一直是这样以为的&#xff1a;pytorch的底层实现是c(这一点没有问题&#xff0c;见下边的pytorch结构图),然后这个部分顺理成章的被命名为torch,并提供c接口,我们在python中常用的是带有python接口的&#xff0c;所以被称为pytorch。昨天无意中看到Torch是由lua语言写的&…

M 芯片的 macos 系统安装虚拟机 centos7 网络配置

centos 安装之前把网络配置配好或者是把网线插好 第一步找到这个 第二步打开网络适配器 选择图中所指位置 设置好之后 开机启动 centos 第三步 开机以后 编写网卡文件保存 重启网卡就可以了&#xff0c;如果重启网卡不管用&#xff0c;则重启虚拟机即可 “ ifcfg-ens160 ” 这…

【java入门学习】

文章目录 java学习章节目录学习前的准备main函数怎么写&#xff1f;Java程序运行的步骤如何让代码运行起来&#xff1f;java程序由三部分构成&#xff1a;注释注释规范 标识符练习 总结 java学习章节目录 SE语法 初阶段主要来熟悉java的语法&#xff1a; 1.初始java 2.数据类型…

黑苹果如何在macOS Sonoma中驱动博通网卡

准备资源&#xff08;百度&#xff1a;黑果魏叔 下载&#xff09; 资源包中包含&#xff1a;AirportBrcmFixup.kext/IOSkywalkFamily.kext/IO80211FamilyLegacy.kext/OpenCore-Patcher 使用方法&#xff1a; 1.将 csr-active-config 设置为 03080000 全选代码 复制 2.在 …

kafka集群搭建(Linux环境)

zookeeper搭建&#xff0c;可以搭建集群&#xff0c;也可以单机&#xff08;本地学习&#xff0c;没必要搭建zookeeper集群&#xff0c;单机完全够用了&#xff0c;主要学习的是kafka&#xff09; 1. 首先官网下载zookeeper&#xff1a;Apache ZooKeeper 2. 下载好之后上传到…

layui框架学习(33:流加载模块)

Layui中的流加载模块flow主要支持信息流加载和图片懒加载两部分内容&#xff0c;前者是指动态加载后续内容&#xff0c;示例的话可以参考csdn个人博客主页&#xff0c;鼠标移动到页面底部时自动加载更多内容&#xff0c;而后者是指页面显示图片时才会延迟加载图片信息。   fl…

记录vue的一些踩坑日记

记录vue的一些踩坑日记 安装Jq npm install jquery --save vue列表跳转到详情页&#xff0c;再返回列表的时候不刷新页面并且保持原位置不变&#xff1b; 解决&#xff1a;使用keepAlive 在需要被缓存的页面的路由中添加&#xff1a;keepAlive: true, {path: /viewExamine,nam…