论文全部材料 - 图文

更新时间:2024-04-11 11:57:01 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

学科分类号 0000

本科生毕业论文

题目:线性方程组的数值解法及Matlab实现

Numerical solutions of the system of linear equation

and its implementation in Matlab

学生姓名: 唐珍珍 学 号: 1009402033 系 别: 数学与应用数学 专 业: 数学与应用数学 指导教师: 刘建国 讲师 起止日期: 2012.12——2013.5

2014 年 5月 10日

怀化学院本科毕业论文诚信声明

作者郑重声明:所呈交的本科毕业论文,是在指导老师的指导下,独立进行研究所取得的成果,成果不存在知识产权争议.除文中已经注明引用的内容外,论文不含任何其他个人或集体已经发表或撰写过的成果.对论文的研究做出重要贡献的个人和集体均已在文中以明确的方式标明.本声明的法律结果由作者承担.

本科毕业论文作者签名:

年 月 日

怀化学院本科毕业论文任务书

论文题目 学生姓名 唐珍珍 系别 刘建国 线性方程组的数值解法及Matlab实现 数学与应用数学系 职称 专业 数学与应用数学 讲师 指导老师姓名 题目来源 1.科学技术 √ 2.生产实践 □ 3.社会经济 □ 4.自拟 □ 5.其他 □ 毕业论文(设计)内容要求: 总结和讨论线性方程组的几种数值解法,并采用数学软件matlab编程实现。主要比较线性方程组的不同数值解法的优缺点,探究线性方程组各种解法的Matlab代码及算例分析。 论文的结构要严谨,结论要正确,技术用语、翻译要准确;语句通畅;图表完备。正文内容不少于8000字;摘要不少于200字;参考文献不少于10篇。 主要参考资料: [1] 首都师范大学数学系组编.数值分析[M].北京:科学出版社,2005,12-21. [2] 李庆扬.王能超.易大义.数值分析[M].4版.武汉:华中科技大学出版社,2006,29-36. [3] 朱金寿.线性代数[M].2版.北京:科学出版社,1998,107-119. [4] 张德丰.MATLAB数值分析(第二版)[M].北京: 机械工业出版社,2009,69-86. [5] 刘萍.计算方法[M].北京:人民邮电出版社,2002,71. [6] 王能超.计算方法[M].北京:高等教育出版社,2006,156-197. [7] 杨民生.线性方程组迭代收敛充分条件的改进[J],安庆师范学报,1995,1(2):45-46. [8] 范爱华、汪忠志.关于线性方程组理论的若干注记[J],唐山师范学院学报,2004,26(26): 41-43. [9] 郑亚敏.迭代法解线性方程组的收敛性比较[J],江西科学,2009,27(5):56. [10]吴新元.改进的割线法及其范围收敛性[J],南京大学学报,1994,30(4):26-29. [11]魏焕彩、郑修才.解线性代数方程组的一种行处理方法[J],北京联合大学学报,1999,13(4): 17. 毕业论文(设计)工作计划: 2013年11月:选题,下达任务书. 2013年12月10日前完成开题报告. 2013年12月—2014年3月:收集资料,完成初稿. 2014年3月—2014年5月:三次修改论文. 2013年5月:定稿,准备答辩. 接收任务日期 2013 年 11 月 14 日 要求完成任务日期 2014 年 5 月 1 日 学 生 (签名) 年 月 日 指 导 教 师 (签名) 年 月 日 系 主 任 (签名) 年 月 日 说明:本表为学生毕业论文(设计)指导性文件,由指导教师填写,一式两份,一份交系中存档备查,一份发给学生

本科生毕业论文 开 题 报 告 书

题 目 线性方程组的数值解法及

Matlab实现

学生姓名 唐珍珍 学 号 1009402033 系 别 数学与应用数学 专 业 数学与应用数学 指导教师 刘建国 讲师

2013年 11 月 25 日

论文题目 线性方程组的数值解法及Matlab实现 一、选题的目的、意义及相关研究动态和自己的见解: 本课题的主要目的是运用所学的数学专业知识对线性方程组的数值解法进行整理及研究,以便进一步掌握线性方程组的各种数值解法。 在自然科学和工程实际应用中,有许多问题的求解最终都转化为线性方程组的求解问题。例如,电学中的网络问题,曲线拟合中常见的最小二乘法、样条函数插值、解非线性方程组、求解偏微分方程的差分法、有限元法和边界元法以及目前工程实践中普遍存在的反演问题等。另外在图像恢复、模型参数估计、地震勘探、结构力学、流体力学等众多领域,也都需要求解线性方程组。 在高等代数中我们学过用解析法求解线性方程组Ax?b,如高斯消元法、克莱姆法则、矩阵变化法等,但实际问题中的线性方程组一般没有解析解,有的即使有解析解,计算量也很大,根本无法求解,因此采用数值方法求解是唯一的途径。另外随着计算机技术的不断发展,对求解线性方程组速度和精确度方面的要求越来越高,又由于实际工程的需要,所要求的线性方程组也越来越复杂,解析法求解线性方程组已远远满足不了实际运算的需要。为了解决这一问题,各种数值方法被科学家们研究出来,解决了许多计算的难题。此后数值解法成为了求解线性方程组有效而高效的方法。 近几十年来直接法在求解大型稀疏矩阵方程组方面取得了较大进展,对迭代算法的研究也已经较为成熟,但对线性方程组各种方法的比较及适用条件的的研究较少。因此本文对求解线性方程组的多种数值解法作归纳、总结并比较和讨论各种数值解法的优缺点,总结出规律,并给出具体算例及Matlab实现,以便进一步理解线性方程组的数值解法,更好地运用其解决实际工程问题。 二、课题的主要内容: 本文主要讨论了线性方程组的几种数值解法,并探讨了这些解法的主要思想、具体解法以及它们各自的特点,针对几种解法对于不同条件下的线性方程组的求解进行了一定的分析,并给出了具体算例。通过算例的计算与Matlab程序的实现,再结合这些方法的优缺点进行了比较,以此来促进对线性方程组数值解法的理解。 三、研究方法、设计方案或论文撰写提纲: 1.研究方法:主要运用文献资料法、综合分析法、对比分析法等理论寻求解决问题的最佳方案。 2.设计方案:针对线性方程在生活实践中的应用,对其不同解法进行逐个分析渗透。 3.论文撰写提纲: 第一部分:简述线性方程组的数值解法和Matlab的相关知识和概念; 第二部分:探究线性方程组直接解法的基本理论及其Matlab程序,给出具体算例; 第三部分:探究线性方程组迭代解法基本理论及其Matlab程序,并给出具体算例; 第四部分:比较线性方程组各种数值解法的优缺点及应用条件。

四、完成期限和预期进度: 2013年12月4日之前搜集相关资料,完成开题报告。 2014年1月-3月查阅资料,规划论文的结构,完成初稿。 2014年4月再次查阅相关专著,完善论文的内容并修改论文的格式。 2014年5月下旬定稿,准备答辩。 五、主要参考文献(不少于10篇): [1] 首都师范大学数学系组编.数值分析[M].北京:科学出版社,2005,12-21. [2] 李庆扬.王能超.易大义.数值分析[M].4版.武汉:华中科技大学出版社,2006,29-36. [3] 朱金寿.线性代数[M].2版.北京:科学出版社,1998,107-119. [4] 张德丰.MATLAB数值分析(第二版)[M].北京: 机械工业出版社,2009,69-86. [5] 刘萍.计算方法[M].北京:人民邮电出版社,2002,71. [6] 王能超.计算方法[M].北京:高等教育出版社,2006,156-197. [7] 杨民生.线性方程组迭代收敛充分条件的改进[J],安庆师范学报,1995,1(2): 45-46. [8] 范爱华、汪忠志.关于线性方程组理论的若干注记[J],唐山师范学院学报,2004,26(26):41-43. [9] 郑亚敏.迭代法解线性方程组的收敛性比较[J],江西科学,2009,27(5):56. [10]吴新元.改进的割线法及其范围收敛性[J],南京大学学报,1994,30(4):26-29. [11]魏焕彩、郑修才.解线性代数方程组的一种行处理方法[J],北京联合大学学报,1999,13(4):17. 六、指导教师意见: 签名: 年 月 日 七、开题报告会纪要 时间 与 会 人 员 2013年11月25日 姓名 周志强 申进 刘建国 职务(职称) 副教授 讲师 讲师 地点 姓名 李启勇 何伟 E1B-501 职务(职称) 讲师 讲师 会议记录摘要: 问:请简要谈谈研究该课题的意义? 答:因为解线性方程组在生活中有广泛应用,研究线性方程组数值解法及其MATLAB实现具有一定的理论价值及现实意义,并且研究不同线性方程组的数值解法既可以加深对其各种算法的深入了解,并有利于将其进一步推广,因此我选择这个课题。 问:简要叙述论文提纲. 我打算从以下几个方面入手:1、简述线性方程组数值解法和Matlab的其相关概念;2、总结线性方程组直接解法的基本理论及其算法;3、探讨采用Matlab软件编写线性方程组数值解法的代码程序,并给出各种解法的具体算例分析;4、总结线性方程组不同数值解法的优缺点和适用条件。 问:你的Matlab编程基础如何? 答:Matlab是一种重要的数学软件,应用非常广泛,特别是在数值计算方面功能 非常强大。我选修过Matlab课程,能用Matlab变成进行数值计算,有一定的基础。 会议主持人: 会议记录人: 年 月 日 八、开题答辩小组意见: 负责人签名: 年 月 日 九、系(部)意见: 负责人签名: 单位(盖章) 年 月 日 怀化学院本科毕业论文指导教师指导情况记录表

数学 系 数学与数应数学 专业 学生姓名 唐珍珍 指导教师 刘建国 论文(设计)题目 线性方程组的数值解法及Matlab实现 开题时间 2013 年 11 月 25 日 1、 确定论文题目改为线性方程组的数值解法及Matlab实现; 第一次 指导记录 2、 修改文章结构,目录章部分我已经给你改好,按照执行,节部分自己重新组织; 指导教师签名: 学生签名: 年 月 日 年 月 日 1、前言应该包括研究意义、研究现状,我们做什么这样三个问题;你的前几段算是研究意义,研究现状太少,没有提出问题,在写研究现状的时候应该是总结别人第二次 指导记录 做了什么,有什么不足,再引出你本文研究的内容; 2、第二部分归纳不全,并要给出Matlab程序; 3、第三部分应该列出所有的数值解法,包括直接和迭代法,为下一步比较和讨论做准备; 指导教师签名: 学生签名: 年 月 日 年 月 日 1、线性方程组的数值解法要写Matlab程序,文章所有例题也要写Matlab程序; 2、优缺点的比较是论文的重点,要比较各个方法的优缺点,并给出各个方法的第三次 指导记录 适用条件,并给出具体算例; 3、应用举例中例子太少,至少一种方法一个例子,你再加几个例子; 4、Matlab的简介中要加上matlab在数值求解方面的强大功能; 指导教师签名: 学生签名: 年 月 日 年 月 日 1、文中所有的公式及符号有问题,所有符号都要用公式形式出现,公式的字体太大,特别是标号的格式,修改文中的所有公式; 2、文中所有的数字和符号都要用Times New Roman字体,文中的公式后面要添第四次 指导记录 加符号; 4、再次熟悉论文内容,准备答辩; 指导教师签名: 学生签名: 年 月 日 年 月 日 注:此表在毕业论文(设计)工作进行期间由指导教师保管,毕业论文(设计)工作结束时由指导教师交系(部)教务干事,系(部)教务干事分专业集中存档。

怀化学院本科毕业论文成绩评定表(一)

(理工医农学类专业适用) 指导教师评分用表 毕业论文题目:线性方程组的数值解法及Matlab实现 姓名 系别 评价项目 学习态度 与工作量 唐珍珍 数学与应用数学系 评 价 指 标 ①学习态度认真,自觉遵守纪律;②工作作风严谨务实,具有良好的团队精神;③工作量饱满,按期圆满完成规定的任务。 ①能独立查阅文献和从事其他形式调研;②能较好理解课题任务并提出实施方案;③具有收集、整理各种信息及获取新知识的能力,查阅文献有一定广泛性;④文献综述撰写规范,外文翻译符合规定要求,译文准确,质量好;⑤文献综述、外文翻译与研究课题密切相关,文献数量符合相关要求。 ①能独立开展研究工作;②能熟练掌握和运用所学专业基本理论、基本知识和基本技能分析解决相关理论和实际问题;③实验设计合理,实验数据准确可靠,理论分析与计算正确;④有较强的实际动手能力、经济分析能力和现代技术应用能力。 ①论文结构严谨,层次清晰,结论正确,技术用语准确;②行文流畅,语句通畅;③论文格式符合规范要求;④图表完备、整洁,符号统一,编号齐全。 ①具有一定的学术水平或应用价值;②对与课题相关的理论或实际问题有较深刻的认识,有新的见解,有一定的创新。 学号 专业 1009402033 数学与应用数学 分值 10 评分 9 文献综述与外文翻译 20 18 研究水平与实际能力 30 27 论文撰写 质 量 学术水平 与创新 30 26 10 8 总分: 88 指导教师评定意见: 唐珍珍同学学习态度认真,学习刻苦,查阅了大量有关线性方程组数值解法的参考文献,具有扎实的数值计算方法基础和较强的数学软件应用能力。论文工作量饱满,较系统地总结和比较了线性方程组不同数值方法的优缺点和适应性,具有一定的应用性,是一篇较好的本科毕业论文,同意提交评审。 指导教师签名: 年 月 日 怀化学院本科毕业论文成绩评定表(二)

(理工医农学类专业适用) 评阅教师评分用表 毕业论文题目:线性方程组的数值解法及Matlab实现 姓名 系别 评价项目 选题质量 唐珍珍 数学与应用数学系 评 价 指 标 ①选题符合专业培养目标要求;②与科学研究、工程或生产实际紧密结合;③有一定创新性和应用价值;④难度适中。 ①能独立查阅文献和从事其他形式调研;②能较好理解课题任务并提出实施方案;③具有收集、整理各种信息及获取新知识的能力,查阅文献有一定广泛性;④文献综述撰写规范,外文翻译符合规定要求,译文准备,质量好;⑤文献综述、外文翻译与研究课题密切相关,文献数量符合相关要求。 ①能独立开展研究工作;②能熟练掌握和运用所学专业基本理论、基本知识和基本技能分析解决相关理论和实际问题;③实验设计合理,实验数据准确可靠,理论分析与计算正确;④有较强的实际动手能力、经济分析能力和现代技术应用能力。 ①论文结构严谨,层次清晰,结论正确,技术用语准确;②行文流畅,语句通畅;③论文格式符合规范要求;④图表完备、整洁,符号统一,编号齐全。 ①具有一定的学术水平或应用价值;②对与课题相关的理论或实际问题有较深刻的认识,有新的见解,有一定的创新。 学号 专业 1009402033 数学与应用数学 分值 10 评分 9 文献综述与外文翻译 20 18 研究水平与实际能 30 25 论文撰写 质 量 学术水平 与创新 30 26 10 8 总分: 86 评阅意见: 该生选题合理,符合数学与应用数学专业培养目标,查阅了大量有关线性方程组的数值解法的参考文献,熟练掌握了数学软件Matlab的应用。论文较系统地总结了线性方程组数值解法和适应性,具有一定的应用性,是一篇合格的本科毕业论文,同意答辩。 评阅教师签名: 年 月 日

怀化学院本科毕业论文成绩评定表(三)

(理工医农学类专业适用) 答辩小组老师评分用表 一、毕业论文(设计)答辩记录 论文题目 作者姓名 指导教师 姓名、职称 线性方程组的数值解法及Matlab实现 唐珍珍 所属系(部)、专业、年级 数学 系(部) 数应 专业 10 年级 刘建国 讲师 答 辩 会 纪 要 时间 答 辩 小 组 成 员 刘建国 姓 名 周志强 申进 职务(职称) 副教授 讲师 讲师 地点 姓 名 李启勇 何伟 职务(职称) 讲师 讲师 答辩中提出的主要问题及回答的简要情况记录: 1、请简要叙述迭代法的基本思想? 答:迭代法的基本思想是对于给定的线性方程组Ax?B ,我们可以用不同的方法把它变为与之?0??k?1??k?x等价形为x?Bx?f的方程组.将上式改写成迭代式x 反复不断地?Bx?f ,选定初始值使用迭代式校正方程组根的近似值,并在此过程中求取符合计算精度要求的方程组的近似值。 2、研究这个课题的目的是什么? 本课题的主要目的是利用所学的数学专业知识对线性方程组的数值解法进行整理及研究,以便进一 步掌握线性方程组的数值解法。 3、全文的基本框架、基本结构是如何安排的? 第一部分:简述线性方程组的数值解法和Matlab的相关知识和概念; 第二部分:探究线性方程组直接解法的基本理论及其Matlab程序,并给出具体算例; 第三部分:探究线性方程组迭代解法的基本理论及其Matlab程序,并给出具体算例; 第四部分:比较线性方程组各种数值解法的优缺点及应用条件; 会议主持人: 记 录 人: 年 月 日 二、毕业论文答辩小组成绩评定 评价项目 选题质量 评 价 指 标 ①选题符合专业培养目标要求;②与科学研究、工程或生产实际紧密结合;③有一定创新性和应用价值;④难度适中。 ①能独立开展研究工作;②能熟练掌握和运用所学专业基本理论、基本知识和基本技能分析解决相关理论和实际问题;③实验设计合理,实验数据准确可靠,理论分析与计算正确;④有较强的实际动手能力、经济分析能力和现代技术应用能力。 ①论文结构严谨,层次清晰,结论正确,技术用语准确;②行文流畅,语句通畅;③论文格式符合规范要求;④图表完备、整洁,符号统一,编号齐全。 ①具有一定的学术水平或应用价值;②对与课题相关的理论或实际问题有较深刻的认识,有新的见解,有一定的创新。 ①能简明扼要阐述论文主要内容,思路清晰,语言表达准确、顺畅,分析归纳科学、合理,结论严谨;②回答问题有理论根据,基本概念清楚,逻辑性强,能抓住要点,对主要问题回答准确、有深度;③仪态端庄,自然得体。 分值 10 评分 8 研究水平与实际能力 30 26 论文撰写 质 量 学术水平 与创新 30 27 10 8 答辩 20 18 总分: 87 评语: 选题合理,具有扎实的数值计算方法基础和较强的数学软件应用能答辩小组意见 力。论文工作量饱满,具有一定的应用性,答辩中回答问题准确,态度积极,是一篇较好的本科毕业论文。 答辩负责人: 年 月 日 评语: 系(部) 学位 委员会最终评定成绩: 意见 最终评定等级: 负责人(签名): 系(部)(公章) 年 月 日 注:毕业论文(设计)最终评定成绩由系(部)学位委员会根据指导教师评定成绩(30%),评阅教

师评定成绩(30%)和答辩成绩(40%)综合确定。

目 录

摘 要 ......................................................................................................................................... I 关 键 字 ..................................................................................................................................... I Abstract ........................................................................................................................................ I Key words .................................................................................................................................... I 1 前言 ...................................................................................................................................... 1 2 线性方程组数值解法与Matlab简介 ................................................................................. 2

2.1 线性方程组数值解法的简介 .................................................................................... 2 2.2 Matlab简介 ................................................................................................................ 2 3 线性方程组的直接解法及Matlab实现 ............................................................................. 3

3.1 高斯消元法 ................................................................................................................ 3

3.1.1 高斯消元法 ...................................................................................................... 3 3.1.2 高斯列主元素消元法 ...................................................................................... 6 3.1.3 高斯消元法的Matlab实现 ............................................................................ 7 3.2 矩阵三角分解法 ........................................................................................................ 8

3.2.1 直接三角分解法 .............................................................................................. 8 3.2.2 追赶法 ............................................................................................................ 10 3.2.3 直接三角分解法的Matlab实现 .................................................................. 11 3.3 应用举例 .................................................................................................................. 12 4 线性方程组的迭代解法及Matlab的实现 ..................................................................... 15

4.1 雅克比(Jacobi)迭代法 ........................................................................................ 16 4.2 高斯—塞德尔(Gauss — Seidel)迭代法 ............................................................ 16 4.3 迭代法的Matlab实现 ............................................................................................. 17 4.4 应用举例 .................................................................................................................. 18 5 线性方程组数值方法比较 ................................................................................................ 20

5.1 高斯消元法和高斯列主元消元法的比较 .............................................................. 20 5.2 LU分解法和高斯消元法的比较 ............................................................................ 23 5.3 追赶法 ...................................................................................................................... 25 5.4 Jacobi迭代法和Seidel迭代法的比较 ................................................................... 27 5.5 总结 .......................................................................................................................... 29 6 结束语 ................................................................................................................................ 30 参考文献 .................................................................................................................................. 30 致 谢 ........................................................................................................................................ 32

线性方程组的数值解法及Matlab实现

摘 要

线性方程组是最基础的数学知识,但一般我们只能在有限的情况下获得线性方程组的解析解,因此数值求解线性方程组十分必要.而当前计算机的发展为数值求解线性方程组提供了非常有力的工具.

本文主要讨论了线性方程组的几种数值解法,并探讨了这些解法的主要思想、具体解法以及它们各自的特点,针对几种解法对于不同条件下的线性方程组的求解进行了一定的分析,并给出了具体算例.通过算例的计算与Matlab程序的实现,再结合这些方法的优缺点进行了比较,以此来促进对线性方程组数值解法的理解.

关 键 字

线性代数方程组;高斯消去法;迭代法;矩阵三角分解法 ;Matlab

Numerical solutiongs of the system of linear equation

and its implementation in Matlab

Abstract

The system of linear equations is the most basic mathematical knowledge, but generally we can only in limited circumstances to obtain the analytical solution of the linear equations, so it is quite necessary to solve the linear equations in numerical solution. And the development of the current computer provides a very powerful tool for numerical solving the linear equations.

Several different umerical methods of solving the linear equations are given in this paper.The main ideas of these umerical methods, their respective characteristics and specific method are discussed. To solve the system of linear equations in different conditions, several different umerical methods are analyzed by presenting specific examples. Through the calculation of examples and systematic linear implementation of Matlab, as well as the compared advantages and disadvantages of different umerical methods, we can deepen the understanding of the numerical methods of solving linear equations.

Key words

System of linear equations; Gaussian elimination method; iteration method; matrix triangle decomposition method; Matlab

Il

1 前言

在自然科学和工程实际应用中,有许多问题的求解最终都转化为线性方程组的求解问题.例如,电学中的网络问题,曲线拟合中常见的最小二乘法、样条函数插值、解非线性方程组、求解偏微分方程的差分法、有限元法和边界元法以及目前工程实践中普遍存在的反演问题等.另外在图像恢复、模型参数估计、地震勘探、结构力学、流体力学等众多领域,也都需要求解线性方程组.

在高等代数中我们学过用解析法求解线性方程组Ax?b,如高斯消元法、克莱姆法则、矩阵变化法等,但实际问题中的线性方程组一般没有解析解,有的即使有解析解,计算量也很大,根本无法求解,因此采用数值方法求解是唯一的途径.另外随着计算机技术的不断发展,对求解线性方程组速度和精确度方面的要求越来越高,又由于实际工程的需要,所要求的线性方程组也越来越复杂,解析法求解线性方程组已远远满足不了实际运算的需要.为了解决这一问题,各种数值方法被科学家们研究出来,解决了一个又一个计算的难题.此后数值解法成为了求解线性方程组有效而高效的方法.

线性方程组的数值解法是线性代数和数值分析中的重要内容.线性方程组的求解从理论上可分为两类:直接法和迭代法。直接法是不考虑计算过程中的舍入误差,经过有限次的运算得到方程组精确解的方法,常见的方法是高斯顺序消去法、高斯列主元消去法和矩阵的LU分解法.迭代法是采用某种极限过程,用线性代数方程组的近似解逐步逼近精确解的方法.迭代法中常见的方法有简单迭代法、J-迭代法、GS-迭代法和SOR-迭代法.

直接法和迭代法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用.直接法可以求得精确解是指就计算公式而言保证得到精确解,但计算机计算过程中的舍入误差是不可避免的,这种误差对解的精度影响会不会太大,也就是计算的稳定性,是要考虑的问题,对于迭代法,其收敛性则是要考虑的问题.

由于线性方程组问题在理论上的重要性和在工程实际应用中的大量存在,多年来人们在这方面做了广泛深入的研究和探讨,并取得了许多有价值的成果.近几十年来直接法在求解大型稀疏矩阵方程组方面取得了较大进展,对迭代算法的研究也已经较为成熟,但对线性方程组各种方法的比较及适用条件的的研究较少.因此本文对求解线性方程组的多种数值解法作归纳、总结并比较和讨论各种数值解法的优缺点,总结出规律,并给出具体算例及Matlab实现,以便进一步理解线性方程组的数值解法,更好地运用其解决实际工程问题.

1

[3]

[3]

[2]

[1]

2 线性方程组数值解法与Matlab简介 2.1 线性方程组数值解法的简介

n阶线性方程组的一般形式为

?a11x1?a12x2?????a1nxn?b1?ax?ax?????ax?b?2112222nn2 ? (2.1)

?????????????an1x1?an2x2??annxn?bn[3]

用矩阵表示为

AX?B,

其中,A称为系数矩阵,X称为解向量,B称为右端常向量,它们分别为

??? a1n ??a11 a12  ?x1??b1???????a a  ???  ax21222n2?,X???,B??b2?. A??????   ???   ????????????????????xa a  ???  an2nn??n??bn??n1由线性代数的知识可知,如果矩阵A非奇异,即A的行列式值det(A)?0,则根据克莱姆法则,方程组有唯一解

xi?Di,i?1,2,???,n, DD?det(A),其中,Di表示D中第i列换成B后所得的行列式值.对于这样的线性方程组,

我们通常是用克莱姆法则或求逆矩阵的方法来求解.从理论上讲,这两种方法求解是理想的,但在实际问题中,对于较大的n,用这两种方法来求解计算量大得惊人,比如用克莱姆法则求解一个n阶线性方程组要做N?n!(n?1)?n次乘除法,当n很大时,用这两种方法已无法实践了,因此用数值法求解已成为求解线性方程组的一种重要方法.

线性方程组的数值解法一般分为两类:直接法和迭代法.直接法是在不考虑舍入误差影响的前提下,经过有限次四则运算能得到精确解的方法,而实际上,由于受计算机字长的限制,舍入误差客观存在,只能得到近似解.迭代法是用某一极限过程去逼近精确解的方法,实际上是给定一初始精确解,然后按一定法则逐步求出满足一定精度要求的近似解.在电子计算机出现的今天,数值方法是解线性方程组的一种非常有效的方法. 2.2 Matlab简介

Matlab语言是1980年由美国的Cleve Moler博士研发的,它以矩阵运算为基础,把计算、可视化、程序设计融合到一个简单易用的交互式工作环境中,可实现工程计算、算法研究、符号运算、建模和仿真、原型开发、数据分析及可视化、科学和工程绘图、

2

应用程序设计等功能.Matlab具有强大的数值分析、矩阵运算、信号处理、和图形显示功能,其强大的数据处理能力和丰富的工具箱使得它的编程极为简单,也成为目前世界上应用最为广泛的科学计算软件之一.

Matlab的基本数据单位是矩阵,它的指令表达式与数学、工程中常用的形式十分相似,故用Matlab来解算问题要比用C、FORTRAN等语言完相同的事情简捷得多,并且mathwork也吸收了像Maple等软件的优点,使Matlab成为一个强大的数学软件.在新的版本中也加入了对C、FORTRAN、C++ 、JAVA的支持.可以直接调用,用户也可以将自己编写的实用程序导入到Matlab函数库中方便自己以后调用.

Matlab是一个包含大量计算算法的集合,其拥有600多个工程中要用到的数学运算函数,可以方便地实现用户所需的各种计算功能.函数中所使用的算法都是科研和工程计算中的最新研究成果,而前经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C++ ,在计算要求相同的情况下,使用Matlab的编程工作量会大大减少.Matlab的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数.函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等. 3 线性方程组的直接解法及Matlab实现 3.1 高斯消元法

高斯消元法(Gauss Elimination Method)是一种规则化的加减消元法.其基本思想是通过逐次消元计算把需要求解的线性方程组转化为上三角形方程组,也就是把线性方程组的系数矩阵转化为上三角矩阵,从而使一般线性方程组的求解转化为等价(同解)的上三角形方程组的求解. 3.1.1 高斯消元法

为方便起见,将方程组(2.1)改写成如下形式

?1??1???1??a11x1?a12x2???a1?1x?bnn1??1??1??1??1?x2???a2x?b?a21x1?a22nn2 (3.1) ??????????????1??1??1??1??an1x1?an2???annxn?bn3 [4][4]

[8]

简记为A(1)x?b(1),其中A(1)?A,b(1)?b. 其增广矩阵为:

1??1??1??1??a11?  a12  ? a1?n b1  ?1????1??1??1??a  a22  ?? a2n b2  ?A?1?,b?1????21?, ???   ?   ?   ????1??a?1?  a?1?   a?1? b?n2nnn ??n1(1)消元过程:

(1)(1)第一步消元:设a11?0,记li1?ai(1)1/a11(i?2,3,?n),做运算

(2)(1)(1)(2)(1)(1)aij?aij?li1a1,b?b?lbjiii11(i,j?2,3,?,n).

(1)将增广阵第一列中a11以下元素消去使其为零,得到与原方程组等价的方程组A(2)x?b(2).

这一过程的实现需要对增广矩阵的第i(i?2,3,?,n)行(用ri表示)施行行的初等变换:

ri?(?li1)r.从矩阵运算的观点看,相当于用矩阵

?100??l?2110L1???l3101????????ln100左乘矩阵[A(1),b(1)]??A,b?,即

(1)?a11?0 [A(2),b(2)]?L1[A(1),b(1)]???????0?0??0???0?

?????1??(1))a12?a1(1n(2)(2)a22?a2n??(2)(2)an?ann2b1(1)?(2)?b2? . ??(2)?bn??一般地,设第k?1步后得等价方程组A(k)x?b(k),其增广矩阵为

(1)?a11??0?(k)(k)??A,b?????????0?(1)a12(2)a22???a1(1)n(2)a2n??0(k)(k)akk?akn??(k)(k)ank?ann(1)?a11(2)?b2????. (k)bk????(k)?bn?第k(k)(k)(k)步消元:设akk?0,记lik?aik/akk(i?k?1,?n).做运算

ai(k?j1?)ak?i(j?(k)l),ka?ik?bkj(k1ik()(k)k列中akk,将增广矩阵的第以下的b()?,li?b?,jk,k)ni1ik4

元素消为零,得同解方程组A(k?1)x?b(k?1).第k步消元,相当于用矩阵

?1????1Lk???lk?1 k?0????lnk??左乘矩阵A(k),b(k).

?????

1????01??0??按上述作法,完成n?1次消元后,方程组(3.1)化成同解的上三角方程组

11?1??1??1??a11x1?a12x2?a13x3???a1?n?xn?b1????2??2??2??2?x2?a23x3???a2?   a22nxn?b2??3??3??3??      a33x3???a3nxn?b3, ???        ?          ???n??n??           ax?bnnnn?记为A(n)x?b(n),其增广矩阵为

(1)?a11?(n)(n)???A,b???????0(1)a12?a1(1)n(2)(2)a22?a2n??(n)annb1(1)?(2)?b2??L[A(n?1),b(n?1)]

n?1??(n)?bn??

?n?1??n?1???Ln?1Ln?2?L1?A,b?. ?因为Lk(k?1,2,?,n?1)均为非奇异阵,故它们的逆矩阵存在.容易求出

?1       0 ??  ?????    1? 1L????, k1?0 lk?1k  ??     ??    ???    l  0    1??nk??令

5

?1       ?    0??l 1     ??   021???l31    1   ?    0??1?11L?L1L2?L?=??, n?1?  ?  ?      ????  ?       1    0???l l l ? l  1  ?n1?n2n3nn?1??于是有

?1??1???1?1?1?A(n),b?n??, A,b?LL???L?A,b???12n?1????即

?A,b??[LA(n),Lb(n)].

因为L为单位下三角阵,A(n)为上三角阵,A?LA(n),故消元过程实际上是把系数矩阵A分解成单位下三角阵与上三角阵的乘积的过程.

(2)回代过程:

按向量的逆序逐步回代得方程组(2.1)的解

(n)(n)?xn?bn/ann ?n. ?(k)(k)(k)?xk?(bk??aklxl)/akk (k?n?1,n?2,?,1)l?k?1?3.1.2 高斯列主元素消元法

给定线性方程组Ax?b,设

 a12    ? a1n    b?a11  1???a a  ? a b21  222n  2  ? (3.2) ?A,b?????  ??   ?   ??? an2    ? ann  b?n??an1  ?列主元Gauss消元法的具体过程如下:

第一步:首先在增广矩阵(3.2)的第1列中选取绝对值最大的元,比如为ai11,则

ai1?maxai1.将(3.2)中第1列与第i1列互换.然后进行第一次消元,得矩阵

11?i?n?1??1??a?1?  a?1?  ?? a1n  b11121???2??2??2???? a2n  b2?A?2?,b?2????   a22  ?, ???   ?    ?   ????2??2???   a?2?  ? ann  bn2n ??6

(k)(k)?第k步:在矩阵?A,b??的第k列中选主元,如

ai(kkk),使

ai(kkk)?maxaik(k).将

k?i?n(k)(k)i??A,b??的第k行与第k行互换,进行第k次消元.

如此经过n?1步,增广矩阵(3.2)被化成上三角形,最后由回代过程求解.容易证明,

(k)只要det(A)? 0,列主元素法就可以顺利完成,即不会出现主元素akk?0的情形.

3.1.3 高斯消元法的Matlab实现 (1)高斯消去法的Matlab程序如下:

% gauss1.m

function x = gauss1(a, b,flag)

% 用途:顺序Gauss消去法解线性方程组ax=b

% 格式:x = gauss1(a, b,flag) a为系数矩阵,b为右端列向量,flag若为0,则显 % 示中间过程,否则不显示,默认值为0,x为解向量 if nargin<3,flag=0;end n = length(b); a=[a,b]; % 消元

for k = 1 : (n-1)

a((k+1):n,(k+1):(n+1))=a((k+1):n,(k+1):(n+1)-a((k+1):n,k)/a(k,k)*a(k,(k+1):(n+1));

a((k+1):n,k)= zeros(n-k,1)

if flag==0,a, end end % 回代 x=zero(n,1); x(n)=a(n,n+1)/a(n,n); for k=n-1:-1:1

x(k,:)=(a(k,n+1)-a(k,(k+1):n)*x((k+1):n))/a(k,k); end

(2)高斯列主元消去法的Matlab程序如下:

% gauss2.m

function x = gauss2(a, b,flag)

% 用途:列主元Gauss消去法解线性方程组ax=b

% 格式:x = gauss2(a, b,flag) a为系数矩阵,b为右端列向量,flag若为0,则显

7

% 示中间过程,否则不显示,默认值为0,x为解向量 if nargin<3,flag=0;end n = length(b); a=[a,b]; for k = 1 : (n-1) % 选主元

[ap,p]=max(abs(a(k:n,k)));p=p+k-1; if p>k

t=a(k,:);a(k,:)=a(p,:);a(p,:)=t; t=b(k);b(k)=b(p);b(p)=t; end % 消元

a((k+1):n,(k+1):(n+1))=a((k+1):n,(k+1):(n+1)-a((k+1):n,k)/a(k,k)*a(k,(k+1):(n+1));

a((k+1):n,k)= zeros(n-k,1)

if flag==0,a, end end % 回代 x=zeros(n,1); x(n)=a(n,n+1)/a(n,n) for k=n-1:-1:1

x(k,:)=(a(k,n+1)-a(k,(k+1):n)*x((k+1):n))/a(k,k); end

3.2 矩阵三角分解法 3.2.1 直接三角分解法

如果方程组Ax?b的系数矩阵A能分解成

A=LU,

其中, L下三角矩阵, U是上三角矩阵,这时方程组就可化为两个容易求解的三角形方程组

Ly?b,Ux?y,

先由Ly?b解出向量y,再由Ux?y解出向量x,这就是原方程组Ax?b的解.若是单位下三角阵,则称相应的分解为 Doolittle分解(也称为LU分解).

定理 3.1 矩阵A??aii?n?n有唯一的Doolittle分解的充分必要条件是A的前n?1个

8

顺序主子式Dk?0(k?1,2,???n?1).

.

设矩阵A??aii?n?n非奇异,且A的前n?1个顺序主子式都不为零.则A有Dool-ittle分解

?  0??1  0  ?l  ?1  ?   021 ?, A?LU????  ?  ?   ????l ?  l1?n,n?1  ??n1 ?由矩阵的乘法可知

A?LU,

aij?u1j,j?1,2,?,n;   ai1?li1u11,i?2,?,n.

当k?2,3???,n时有

akj??lktutj?ukj,j?k,k?1,?,n,t?1nk?1aik??litutu??litutk?likukk,i?k?1,k?2,?,n,t?1t?1k?1

对于Doolittle分解算法,我们知道: (1) 对k?1

uij?aij,j?1,2,???,n, ai1lii?,i?2,???,n,u11(2) 对k?2,???,n

akj??lkrurj,j?k,k?1,?,n,r?1k?1lik?aik??litutkt?1k?1

ukk,i?k?1,k?2,?,n,其中可以利用LU分解求解线性方程组的算法, 则可以先求解Ly?b,即

?y1?b1?ly?y?b?2112, ??  ????ln1y1?ln2y2???ln,n?1yn?b9

所以

?y1?b1?k?1, ??yk?bk??lktytt?1?再求解Ux?y,即

?u11x1?u12x2???u1nxn?y1?ux???ux?y?2222nn2, ?????unnxn?yn回代求解

yn?x??nunn??n. ?y?ux?jttj?t?j?1?xj?,j?n?1,n?2,?,1u?jj?3.2.2 追赶法

设n元线性方程组Ax?b的系数矩阵为非奇异矩阵,A的三对角矩阵

?a1  c1  0  0  0??d  a c  ?0   02 2  2  ??A??0  ?  ?  ?  ? 0?,

??0  0 ?  ?  ? cn?1???0  0  0 d  a?nn??这种方程组称为三对角线性方程组.

这类方程组具有许多明显的应用背景,在求微分方程数值解、三次样条函数等问题中, 都会遇到这样的线性方程组.

设A的前n?1个顺序主子式都不为零,则A有唯一的LU分解,并且A的LU分解有如下形式:

??1 0  0  0   0  ??u v  0  0  0  11??l 1 0 0   0??0 u  v  0  022??2??A?LU??0  ?  ? 0 0??0 0  ?   ?   0?,

????0  0   ? ?  00 0  0    ? vn?1???????0 0  0  0   u?0 0 0 ln  0???n?其中

10

vi?ci,ui?ai,  i?1,2,?,n?1;li?di/ui?1,ui?ai?livi?1, i?2,3,?,n;三对角方程组的追赶法

(1) 向前\追\的过程

.

ui?ai,vi?ci,yi?bi,

对i?2,3,???,n计算

li?di,ui?ai?livi?1,ui?1

vi?ci,yi?bi?liyi?1,(2) 往回\赶\的过程

xn?yn, un对i?n?1,n?2,?,1,计算

xi?yi?cixi?1. ui3.2.3 直接三角分解法的Matlab实现

(1)直接三角分解法的Matlab程序如下:

% nalu.m

function [1,u]= nalu(a)

% 用途:用LU分解法解方程组ax=b

% 格式:[1,u]= nalu(a) a为可逆方阵,l为单位下三角矩阵,u为上三角矩阵

n=length(a);

u=zeros(n,n);l=eye(n,n);

u(1,:)=a(1,:);l(2:n,1)=a(2:n,1)/u(1,1); for k=2:n

u(k,k:n)=a(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);

l(k+1:n,k)=(a(k+1:n,k)-l(k+1:n,1:k-1)*u(1:k-1,k))/u(k,k); end

(2)追赶法的Matlab程序如下:

% nalu2.m

function [ x,L,U]=thomas(a,b,c,f) n=length(b);

% 对A进行分解

11

u(1)=b(1); for i=2:n

if(u(i-1) ~=0)

l(i-1)=a(i-1)/u(i-1); u(i)=b(i)-l(i-1)*c(i-1); else

break; end end

L=eye(n)+dig(l,-1); U=diag(u)+diag(c,l); x=zeros(n,l); y=x

% 求解Ly=b y(1)=f(l); for i=2:n

y(i)=f(i)-l(i-1)*y(i-1); end

% 求解Ux=y if(u(n))~=0

x(n)=y(n)/u(n); end

for i=n-1:-1:1

x(i)=(y(i)-c(i)*x(i+1)/u(i)); end 3.3 应用举例

例3.1 解线性方程组:

10   0    -3?2    ??x1??10???????-4   -12   13    ?-3   ??x2??5? ??? ???1    ?x2    3   -4?2???3????4    ??x??7?14   9   -13???4???解法一 用高斯消去法得到的Matlab程序如下:

A??2 10 0 ?3;?3 ?4 ?12 13;1 2 3 ?4;4 14 9 ?13?; ; b??10 5 ?2 7?'x?gauss1(A,b),

x?

1 2 3 4

解法二 用高斯列主元消去法得到的Matlab程序如下:

A??2 10 0 ?3;?3 ?4 ?12 13;1 2 3 ?4;4 14 9 ?13?;

12

; b??10 5 ?2 7?'x?gauss2(A,b)

x?

1.0000 2.0000 3.0000 4.0000 解法三 用直接分解法得到的Matlab程序如下:

A??2 10 0 ?3;?3 ?4 ?12 13;1 2 3 ?4;4 14 9 ?13?; ; b??10 5 ?2 7?'?x1,ll,u1??nalu?A,b?;

Ans?

1 2 3 4

ll?

1.0000 0 0 0 -1.5000 1.0000 0 0 0.5000 -0.2727 1.00000 1.0000

u1?

2.0000 10.0000 0 -3.0000 0 11.0000 -12.0000 8.5000 0 0 -0.2727 -0.1818 0 0 0 -4.0000

例3.2 求解下列线性方程组

?x1?x2?x3?6???x1+3x2?x3?4 ?2x?6x?x??523?1解法一 用高斯消去法得到的Matlab程序如下:

A??1  1  1;?1 3 1;2 -6 14; -5?; ?; b??6; x=gauss1(A,b) a=

1 1 1 6 0 4 2 10 0 -8 -1 -17 a=

1 1 1 6 0 4 2 10

13

0 0 3 3 x= 3 2 1

解法二 用高斯列主元消去法得到的Matlab程序如下:

A??1  1  1;?1 3 1;2 -6 14; -5?; ?;b??6; x=gauss2(A,b) a=

2.0000 -6.0000 1.0000 -5.0000 0 0 1.5000 1.5000 0 4.0000 0.5000 8.5000 a=

2.0000 -6.0000 1.0000 -5.0000 0 4.0000 0.5000 8.5000 0 0 1.5000 1.5000 x= 3 2 1

解法三 用直接分解法得到的Matlab程序如下:

A??1  1  1;?1 3 1;2 -6 1?; [l,u]=nalu[A] l=

1 0 0 -1 1 0 2 -2 1 u=

1 1 1 0 4 2

0 0 3

例3.3 用追赶法求解下列线性方程组

14

?3  1      ??x1??1????x???2  3  1 ???2???0? ?  2   3  1??x3??1?????x???0?     1 3???4???解 追赶法求解此线性方程组的Matlab程序如下: >>a?[2,2,1]';

>>b?[3,3,3,3]'; >>c?[1,1,1]';

>>f?[1,0,1,0]';

>>[x,L,U]=thomas(a,b,c,f)

x=

21/38 -25/38 33/38 -11/38 L=

1 0 0 0

2/3 1 0 0 0 6/7 1 0 0 0 7/15 1 U=

3 1 0 0 0 7/3 1 0 0 0 15/7 1 0 0 0 38/15

4 线性方程组的迭代解法及Matlab的实现

解线性方程组时,直接法比较适用于中小型方程组,对于高阶方程组,即使系数矩阵是稀疏的,但在运算中很难保持稀疏性.与直接法相比,迭代法解线性方程组能保持矩阵的稀疏性,具有计算简单,编制程序容易的优点,并在许多情况下收敛较快,在求解阶数较高且零系数较多的大型稀疏线性代数方程组时,迭代法是很有效的.

迭代法的基本思想是对于给定的线性方程组Ax?B我们可以用不同的方法把它变为与之等价的,形为

x?Bx?f

的方程组.将上式改写成迭代式

x?k?1??Bx?k??f,

15

选定初始值x?0?反复不断地使用迭代式校正方程组根的近似值,并在此过程中求取

符合计算精度要求的方程组的近似值.本节介绍常用的雅可比迭代法、高斯—赛德尔迭代法.

4.1 雅克比(Jacobi)迭代法

设方程组:

?a11x1?a12x2?????a1nxn?b1?ax?ax?????ax?b?2112222nn2, ????an1x1?an2x2?????annxn?bn分别从上式n个方程中分离出n个变量,如下:

1?x??a12x2?????a1nxn?b1??1a?    11?1?x??????a2nxn?b2??2a??a21x1?   22?????     ????      , ????    ?1?bn??xn???an1x1?an2x2????    a?nn?    ???    其中aii?0(i?1,2,???n)建立迭代格式:

??k?1?1?k??k??k?x?    ?ax?ax?????ax?b111221331nn?a11?1??k?1??k??k?x??a21x1?k?    ?a23x3?????a2nxn?b2  ?2a22, ?????     ???      ????1??k?1??k??k?x??ax?  ???  ?ax?bnnn11nn?1n?1     ?ann???????

称为雅可比(Jacobi)迭代法又称简单迭代法. 4.2 高斯—塞德尔(Gauss — Seidel)迭代法

在Jacobi迭代中,用已有的迭代新值代替旧值,建立迭代格式:

16

??k?1?1?k??k??k?x?    ?ax?ax?????ax?b111221331nn?a11?1??k?1??k?1??k??k?x??ax    ?ax?????ax?22112332nn?b2a22, ???????k?11?k?1??k?1?x??ax?  ??? ?ax     ?bnn11nn?1n?nann?

称为高斯—塞德尔(Gauss — Seidel)迭代法,或缩写为:

??????xi?k?1??bi??aijx?jk?1??j?1i?1j?j?1?ax??,

kijji?1,2,???n.4.3 迭代法的Matlab实现

(1)雅克比迭代法的Matlab程序如下: % Jacobi.m

function y=Jacobi(a,b, x0) D=diag(diag(a)); U=-triu(a,1); L=-triu(a,-1); B=D﹨(L+U); f=D﹨b y=B*x0+f;n=1;

while norm(y-x0)>=1.0e-6

x0=y

y=B*x0+f;n=n+1; end y n

(2)高斯—塞德尔的Matlab程序如下: % Seidel.m

function y=seidel (a,b,x0) D=diag(diag(a)); U=-triu(a,1);

17

L=-triu(a,-1); G=(D-L)﹨U; f=(D-L)﹨b y=G*x0+f;n=1;

while norm(y-x0)>=1.0e-6

x0=y

y=B*x0+f;

n=n+1; end y n 4.4 应用举例

例4.1 用迭代法求解下列方程组,设x(0)=0,精度为10?6.

?10x1?x2?9???x1?10x2?2x3?7 ??2x?10x?623?解法一 用雅克比迭代法得到的Matlab程序如下:

?1  0;-1 10 -2;0 -2 10 ]; A?[10  b?[9;7;6];

Jacobi(a,b,[0; 0; 0]) y=

0.9958 0.9579 0.7916 n= 11

解法二 用高斯—塞德尔迭代法得到的Matlab程序如下:

A?[10  ?1  0;-1 10 -2;0 -2 10 ]; b?[9;7;6];

seidel(a,b,[0; 0; 0]) y=

18

0.9958 0.9579 0.7916 n=

7

例4.2 对下列方程组,若分别用Jacobi迭代法和Gauss — Seidel迭代法求解.

2  ?2??x1??9??1  ??????1 1  1???x2???7? ?2  ????2   1????x3??6?解法一 用Jacobi迭代法得到的Matlab程序如下:

; a??1  2  ?2 ;1 1 1;2 2 1? b??9; 7;  6?; Jacobi(a,b,[0;0;0]) y= -27 26 8 n= 4

解法二 用Gauss — Seidel迭代法得到的Matlab程序如下:

; a??1  2  ?2 ;1 1 1;2 2 1? b??9; 7;  6?; Seidel(a,b,[0;0;0]) y= NaN NaN NaN n= 1012

19

5 线性方程组数值方法比较

5.1 高斯消元法和高斯列主元消元法的比较

高斯列主元消去法特点是每次在系数矩阵中依次按列在主对角线以下的元素中,选取绝对值最大的元素作为主元,将它调至主对角线上,然后用它去消去对角线以下的元素,最后变为同解的上三角形方程组求解.如果那一列的所有元素都为0,则说明该方程组解不唯一.

高斯列主元消去法较高斯消元法计算简单,工作量大为减少,且计算经验与理论分析均表明,它具有良好的数值稳定性,故列主元法是求解中小型稠密线性方程组的最好方法之一.

下面以高斯消元法和高斯列主元消元法解下面两题,通过具体的例子来比较高斯消元法和高斯列主元消元法的优缺点和适用条件.

例5.1 求解以下方程组.

?0.0003x1?3.0000x2?2.0001 ??1.0000x1?1.0000x2?1.0000解法一 高斯消元法

消元后的同解方程组为:

?0.0003x1?3.0000x2?2.0001 ???9999x2??6666回代求解得

?x2?0.6667 ?x?0?1与准确解

1?x???13 ?2?x?2?3?相差很大.

解法二 高斯列主元消元法

对调过程

?1.0000x1?1.0000x2?1.0000 ?0.0003x?3.0000x?2.0001?1220

消元后的同解方程组为

?1.0000x1?1.0000x2?1.0000 ??2.9997x2?1.9998回代求解得

?x1?0.3333 ?x?0.6667?2与准确解

1?x???13 ?2?x?2?3?相差很小.

得到的Matlab程序如下:

解法一 用高斯消去法得到的Matlab程序如下:

A??0.0003 3.0000 ;1.0000 1.0000;?; ; b??2.0001 1.0000 ?'x2?gauss1(A,b), x2?

0 0.6667

解法二 用高斯列主元消去法得到的Matlab程序如下:

A??0.0003 3.0000 ;1.0000 1.0000;?; ; b??2.0001 1.0000 ?'x3?gauss2(A,b) x3?

0.3333 0.6667

从上题可以看出:当用绝对值很小的数做主元时,误差会很大,所以当a11很

小时,我们一般用列主元消去法更好.

例5.2 解方程组

21

?0.001  2.000  3.000??x1??1.000??-1.000 3.712  4.623??x???2.000? ???2??????2.000 1.072  5.643????3.000???x3???四位有效数字精确解为

x*???0.4904,?0.05104,0.3675?

T解法一 高斯消元法

?0.001  2.000  3.000  1.000?? ?1.000  3.712  4.623  2.0000?A/b??????.072  5.643  3.000???2.000  1??0.001  2.000  3.000  1.000?? 0    2004   3005  1002 ??????0    4001   6006  2003???0.001  2.000  3.000  1.000?? 0    2004   3005  1002 ??????0    0    5.000  2003??

x???0.400,?0.09989,0.4000?

T四位有效数字精确解为

x*???0.4904,?0.051040,0.3675?

T解法二 高斯列主元消去法

1.072   5.643  3.000??2.000  ?? ?1.000  3.712   4.623  2.000?A/b???????2.000 3.000 1.000  ?0.001   ? 10.0  72 5  .64 3??2.00?3?   0  3.176 1.801 0.500 ?????0  2.001  3.003 1.002??  ? 10.0  72 5  .64 3??2.00?3?   0  3.176 1.801 0.500 ?????0   0    1.868 0.867??  ?

x???0.4895,?0.05118,0.3678?

T四位有效数字精确解为

22

x*???0.4904,?0.05104,0.3675?

T得到的Matlab程序如下:

解法一 用高斯消去法得到的Matlab程序如下:

A??0.001 2.000 3.000 ;?1.000 3.712 4.623 ;?2.000 1.072 5.643 ?; ; b??1.000 2.000 3.000?'x?gauss1(A,b)

x?

-0.400 -0.9989 0.4000

解法二 用高斯列主元消去法得到的Matlab程序如下:

A??0.001 2.000 3.000 ;?1.000 3.712 4.623 ;?2.000 1.072 5.643 ?; ; b??1.000 2.000 3.000?'x?gauss2(A,b)

x?

-0.4895 -0.05118 0.3678

由此,我们会发现对于这种用绝对值很小的数作除数,舍入的误差会增大,同时会严重影响计算结果的精度.因此,我们要选择绝对值最大的元素做主元素,可以避免消元时消元系数绝对值大于1(即避免放大舍入误差).因此,我们用高斯列主消元法可以更精确的解用绝对值很小的数作除数的线性方程组,我们一般用高斯列主元消元法. 5.2 LU分解法和高斯消元法的比较

矩阵的三角分解法是高斯消去法紧凑格式的矩阵表示,它在解方程组的直接法中起着重要的作用,系数矩阵的LU分解与右端项无关.因而在计算多个系数矩阵为A而右端不同的线性方程组系是,用LU分解法更为简便.

LU分解法可以使用于任何矩阵,从使用范围来说LU分解法优点相当明显.从编程

繁简程度来说, LU分解法来得简单. LU分解法在适用范围、编写繁简以及运算速度方面都比较优越.

LU分解其实与高斯消去法在原理上是等价的,高斯消去法的运算量为:

N3/3?N2?N/3;而LU分解法的运算量为:N3/3?N2/2?N/6,两者运算量之差为:

N?N?1?/2,所以在N比较大的情况下,LU分解法的计算的速度就很可能比高斯消去法快很多.这种差异,主要是由于LU分解的时候,每次只是计算跟主元同行和同列、标

23

号在主元之后的元,而高斯消去法是标号在主元之后的每个元都要计算.

例5.3 利用Doolittle分解求解以下方程组

所以

回代求解??4x1?2x2?x3?5x4??2??8x1?7x2?2x3?10x4??7?4x1?8x2?3x3?6x4??7 ??12x1?6x2?11x3?20x4??3? 4  2   1   5   ??-2?A/b??? 8  7   2      10-7??? ? 4  8   3  6   -7??12  6    2110   -3????4  2  1  5  -2?u1j?a1j,y1?b???LU分解??2  0  0  0  0?1???1  0  0  0  0??j?1,2,3,4?

?3  0  0  0  0??li1?ai1u,i?2,3,411??4  2  1  5  -2?uij?a2j?l21u1j,???LU分解??2  3  0  0  -3?j?2,3,4??1  2  0  0  0??y2?b2?l21y1 ?3  0  0  0  0??l?ai2?li1u12i2u,i?3,421??4  2  1  5  -2?u3j?a3j?l31u1j?l32u2j,j???LU分解??2  3  0  0  -3??3,4??y3?b3?l31y1?l32y2?1  2  2  1  1??3  0  4  0  0??l?a43?l41u13?l42u2343u32?4  ?2  1  5  -2????LU分解??2  3  0  0  -3???1  2  2  1  1?? ?3  0  4  1  -1????4  2  1  ?5?x1?????2 ?0  3  0  ??0??x?2??3??0  0  2  ?1?x???3??1?? ?0  0  0  ??1??x???4????124

x??2,?3,1,?1?.

T得到的Matlab程序如下:

A??4 2 1 5;8 7 2 10;4 8 3 6;12 6 11 20?; ; b??-2 -7 ?7 -3?'?x1,ll,u1??nalu?A,b?;

Ans?

2 -3 1 -1

由此可知,矩阵分解中的直接三角分解法是以LU分解为基础进行矩阵分解,以上则是运用Doolittle分解求解线性方程组的解题过程. 5.3 追赶法

追赶法主要应用于三对角方程组中.

下面通过具体实例来分析一下追赶法解线性方程组的算法及适用条件. 例5.4 设4阶方程组Ax?B为

-1  0  0??x1??6??2  ?-1  ??x??1?3  -2  0???2???? ?0  -2  4  -3??x3???2???????0  0  -3  5???x4??1?这就是一个三对角方程组,既系数矩阵除了对角线的\三斜线\以外的元素均为0.用追赶法求解三对角方程组的一种做法是把系数矩阵A写成下列形式的LU分解(这里采用Doolittle分解): 解

-1  0  0?0  0  0??u1  -1  0  0??1  ?2  ???0 u  ?-1  ??l  1  0  0-2  0 3  -2  02? ????=?2??0  ?0  1  0  -2  4  -3??0 l3  0 u3  -3???????0  0  -3  50  0 l  10  0  0 u???4??4?即L为单位上三角阵,两斜行、主对角线元素为1,其下方的斜行元素待定;U为上三角阵,也是两斜行,主对角线元素待定,其上方斜行的元素与A对应的斜行元素相同(直接验算可知道). 利用矩阵乘法规则按顺序依次考虑A的

a11?a21?a22?a32?a33?a43,并对比两端可得

25

2?u2    ? u1?2?1?l2u1   ? l2??1/u1??1/23??l2?u1  ? u2?3?l2?5/2?2?l3u2   ? l3??2/u2??4/54??2l3?u3  ? u3?4?2l3?12/5?3?l4u3   ? l4??3/u3??5/45??3l4?u4  ? u4?5?3???5/4??5/4

即得分解

?2  ?-1  0  0??1    0   0   0??2  -1    0  ?-1  3  -2  0??-1/2   1   ??0  5/2  -2  ??0  -2  4  -3??=? 0   0?0    -4/5  1   ???0  0  -3  5???0??0  0   12/5 ?0    0   -5/4   1????0  0    0   于是用前推过程求解下三角方程组

??1   0    0   0??y1??6??-1/2  1    0   0  ????y?2?1???0   -4/5  1  0??????0   0   ?5/4  1????y3??y????2??4??1?得

??y1?6??y2?1?1/2y1?4?y3??2?4/5y2?6/5 ??y4?1?5/4y3?5/2再用回代过程求解上三角方程组

??2  -1   0   0??x1??6??0  2  5/-2   0????x??4??0  0   12/5  -3??2???? ?0  0   0   5/4????x3??6/5??x??4??5/2??得

??x4??5/2?/?5/4??2??x3??6/5?3x4?/?12/5??3?4?2x4 ?x2?3?/?5/2????x1??6?x2?/2?5即的方程组的解

x??5,4,3,2?T.

26

0?0? -3 ??5/4??

得到的Matlab程序如下:

a?[?1,?2,?3]'; b?[2,3,4,5]'; c?[?1,?2,?3]'; f?[6,1,?2,1]';

[x,L,U]=thomas(a,b,c,f) x= 5 4 3 2 L=

1 0 0 0

-1/2 1 0 0 0 -4/5 1 0 0 0 -5/4 1 U=

2 -1 0 0 0 5/2 -2 0 0 0 12/5 -3 0 0 0 5/4

5.4 Jacobi迭代法和Seidel迭代法的比较

迭代法具有循环的计算式,方法简单,程序实现方便,能充分利用系数的稀疏性,适宜解大型稀疏矩阵方程组.迭代法不存在误差累积问题,使用迭代法的关键问题是其收敛性与收敛速度,收敛性与迭代初值的选取无关.

Jacobi迭代和Seidel迭代可能同时发散,也可能同时收敛,但一个快,一个慢,能一个收敛,而另一个发散.它的收敛范围并不重合,但两者都收敛时,在很多情况下Seidel迭代确实比Jacobi迭代收敛快得多.对于敛散性问题,若x*为原方程组的精确解,则x*满足方程组,即满足等价的方程组x*?Bx*?f,而迭代公式为x?k??Bx?k?1??f ,误差向量序列,则迭代法是否收敛和收敛的快慢取决于

?????是否收敛于零和收敛于零的快慢.

k2?B?k??2?k?????B?0???前式-后式得??k??B??k?1?(1,2???),则????Bkk?1??,而x0是任取,即

??0?任取,??k??0取决于B的特性.

下面通过具体实例来比较jacobi迭代法和Seidel迭代法的优缺点及适用条件. 例5.5 求解下列方程组

27

?10x1?x2?2x3?7.2???x1?10x2?2x3?8.3 ??x?x?5x?4.23?12解法一 雅可比迭代法

将方程组按雅可比方法写成

0.1x2?0.2x3?0.72?x1?   ?+0.2x3?0.83 ?x2?0.1x1   ?x?0.2x?0.2x   +0.8412?3取初始值x?0??x1,x2,x3??0??0??0??T??0,0,0?按迭代公式

T?k??k??x1?k?1??   0.1x2?0.2x3?0.72???k?1?k?k??0.1x1??   ?0.2x3?0.83 ?x2??k?1??k??k?x?0.2x?0.2x   +0.84312??进行迭代,其计算结果如表5.1所示.

表5.1 k kx1?? 0 0 0 0 1 0.72 0.83 0.84 2 0.971 1.070 1.150 3 1.057 4 1.0853 5 1.0951 1.1951 1.2941 6 1.0983 1.1983 1.2980 7 … … … ?k? x2?k? x31.1571 1.1853 1.2482 1.2828

解法二 塞德尔迭代法 取初始值x?0??x1,x2,x3??0??0??0??T??0,0,0?,按迭代公式

T?k??k??x1?k?1??    0.1x2?0.2x3?0.72???k?1??k?1??k??0.2x3?0.83 ?x2?0.1x1    ??k?1??k?1??k?1?x?0.2x?0.2x   ?0.8412??3进行迭代,其计算结果如下表5.2所示. 表5.2

k kx1?? 0 0 0 0 1 0.72 0.902 2 1.04308 1.16719 3 4 5 1.09989 1.19993 1.29996 6 1.09999 1.19999 1.3 7 1.1 1.2 1.3 1.09313 1.09913 1.19572 1.19947 1.29777 1.29972 x2?k? ?k? x31.1644 1.28205 28

得到的Matlab程序如下:

解法一 用雅克比迭代法得到的Matlab程序如下: A?[10;  ?  1-2;-1 10 -2;-1 -1 5 ]

b?[7.2;8.3;4.2];

Jacobi(a,b,[0; 0; 0]) y=

1.9883 0.1983 1.2980 n= 11

解法二 用高斯—塞德尔迭代法得到的Matlab程序如下:

A?[10  ?1  -2;-1 10 -2;-1 -1 5 ]; b?[7.2;8.3;4.2];

seidel(a,b,[0; 0; 0]) y=

1.1 1.2 1.3 n= 7

从此例看出,高斯—塞德尔迭代法比雅可比迭代法收敛快(达到同样的精度所需迭代次数少),但这个结论在一定条件下才是对的,甚至有这样的方程组,雅可比方法收敛,而高斯—塞德尔迭代法却是发散的. 5.5 总结

通过上述具体实例及Matlab的实现,我们知道线性方程组的各个数值解法之间有着一定的联系,同时也存在不同之处.矩阵直接三角分解法是高斯消元法的变形方法.高斯消元法有多种变形,有的是高斯消元法的改进,有的是用于某种特殊系数矩阵的化简.高斯消元法解线性方程组先消元,然后再带回.当用矩阵描述时,是对系数矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积,即LU分解.因此,高斯消元法与矩阵三角分解法中的LU分解是一致的.当然,针对线性方程组不同的形式与所具备的条件所选择的方法也是有区别的.

29

6 结束语

线性方程组的各个数值解法之间有着一定的联系,同时也存在不同之处. 矩阵直接三角分解法是高斯消元法的变形方法.高斯消元法有多种变形,有的是高斯消元法的改进,有的是用于某种特殊系数矩阵的化简.高斯消元法解线性方程组先消元,然后再带回.当用矩阵描述时,是对系数矩阵分解为一个上三角矩阵和一个下三角矩阵的乘积,即LU分解.因此,高斯消元法与矩阵三角分解法中的LU分解是一致的.当然,针对线性方程组不同的形式与所具备的条件所选择的方法也是有区别的.

高斯消元法的基本思想是通过行变换,逐步消元,把方程组化为系数矩阵为三角形矩阵的等价的方程组,然后用回代法解此三角形方程组得原方程组的解.对于高斯顺序消元法,标记元素的绝对值很小时,若用它作除数,则根据数值运算中\用绝对值很小的数作除数,舍入误差会增大,而且严重影响计算结果的精度\的原则,表明这种方法在一定程度上是具有局限性的.因此,在高斯顺序消元法的基础上,我们引进了高斯列主元消元法.它是在高斯消元法的消去过程中第k步?k?1,2,???,n?1?增加选主元操作,成为首先在第k列中,从ak,k,ak?1,k,???,an,k中选出绝对值最大的元素.经过行交换(把绝对值最大者所在的行与第k行交换)把绝对值最大的元素换到akk的单位中;然后做高斯顺序消去法的消去过程中第k步,初等变换产生第k列的n?k个零元素.

对于非奇异矩阵的方阵A,我们则利用直接三角分解法推导得到的公式(Doolittle分解公式或者Crout分解公式)进行求解.追赶法是针对带状矩阵(尤其是三对角矩阵)这一大稀疏矩阵的特殊结构,得出的一种保带性分解的公式推导,进行求解线性方程组.

通过比较线性方程组不同数值解法的优缺点,对我们进一步选择不同数值法解线性方程组,遇到实际问题取合适的数值解法具有重要意义.今后,为了更好更快地求解线性方程组和更有效地解决实际问题,我们应该根据线性方程组的特点,选择合适的方法进行求解.

参考文献

[1] 首都师范大学数学系组编.数值分析[M].北京:科学出版社,2005,12-21.

[2] 李庆扬.王能超.易大义.数值分析(第四版)[M].武汉:华中科技大学出版社,2006,29-36. [3] 朱金寿.线性代数[M].2版.北京:科学出版社,1998,107-119.

[4] 张德丰.MATLAB数值分析(第二版)[M].北京: 机械工业出版社, 2009,69-86. [5] 刘萍.计算方法[M].北京:人民邮电出版社,2002,71. [6] 王能超.计算方法[M].北京:高等教育出版社,2006,156-197.

30

?k?1??k?1??k?1?[7] 杨民生.线性方程组迭代收敛充分条件的改进[J],安庆师范学报,1995,1(2):45-46.

[8] 范爱华、汪忠志.关于线性方程组理论的若干注记[J],唐山师范学院学报,2004,26(26):41-43. [9] 郑亚敏.迭代法解线性方程组的收敛性比较[J],江西科学,2009,27(5):56. [10]吴新元.改进的割线法及其范围收敛性[J],南京大学学报,1994,30(4):26-29.

[11]魏焕彩、郑修才.解线性代数方程组的一种行处理方法[J],北京联合大学学报,1999,13(4):17.

31

致 谢

从开始选论文题目到现在论文的结束,差不多5个多月的时间.从刚开始的茫然不知所措,到现在能将论文完成,经历了许多,也学到了很多东西.

首先,感谢我的指导老师——刘建国老师.以前所学的专业知识,只是知道怎么计算数学题目,根本没想过真真正正地解决身边的问题.在写论文之初,没想法、没思路、没资料,我向刘建国老师请教论文该怎样写,老师非常耐心的解答我的疑问,并教我写论文的大致思路,给推荐了很多资料,让我在以后的论文撰写过程,更加的顺利.

其次感谢我的同学,对于论文格式的修改,写论文过程中软件的操作给予我很大的帮助.

32

致 谢

从开始选论文题目到现在论文的结束,差不多5个多月的时间.从刚开始的茫然不知所措,到现在能将论文完成,经历了许多,也学到了很多东西.

首先,感谢我的指导老师——刘建国老师.以前所学的专业知识,只是知道怎么计算数学题目,根本没想过真真正正地解决身边的问题.在写论文之初,没想法、没思路、没资料,我向刘建国老师请教论文该怎样写,老师非常耐心的解答我的疑问,并教我写论文的大致思路,给推荐了很多资料,让我在以后的论文撰写过程,更加的顺利.

其次感谢我的同学,对于论文格式的修改,写论文过程中软件的操作给予我很大的帮助.

32

本文来源:https://www.bwwdw.com/article/fzcp.html

Top