线性方程组的数值解法1.ppt_第1页
线性方程组的数值解法1.ppt_第2页
线性方程组的数值解法1.ppt_第3页
线性方程组的数值解法1.ppt_第4页
线性方程组的数值解法1.ppt_第5页
已阅读5页,还剩114页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第4章 线性方程组的数值解法 4.1 引言 在工程技术和科学研究中,很多科学计算的问题往往直 接或间接地归结为求解线性代数方程组。常见的线性代数 方程组是方程个数和未知量个数相同的阶线性方程组,它 的一般形式是 其中, 、 为常数, 为待求的未知量 (4.1) 用矩阵形式表示是 其中: 一般 。当系数矩阵 非奇异(行列式不为零),即 时 ,方程组(4.1)有惟一解。 对于线性代数方程组的解法大致可分为两类,即直接 解法和迭代解法。直接解法是指在假设没有舍入误差的条 件下,经过有限次算数运算就能求得方程组精确解的方法 。 然而实际计算中由于舍入误差的影响,这类方法也只 能求得近似解;迭代解法就是从一个已知的初始近似值开 始,按一定的法则逐步求出解的各个更准确的近似值的方 法,它是用某种极限过程去逐步逼近精确解的方法。 在本章中主要介绍高斯消去法、列主元高斯消去法、 约当消去法、三角分解法等直接解法以及雅可比、高斯 赛德尔和超松弛等迭代解法。 4.2 高斯(Gauss)消去法 4.2.1 高斯消去法的基本思想 高斯消去法是最古老的求解线性代 数方程组的方法之一,高斯消去法是消 去法的一种特殊形式,它包括消元与回 代两个过程。 设 ,对行计算乘数 用 乘以第 个方程后加到第 个方程到第 个方程中 ,消去 第个方程到第 个方程的未知数 ,得到 只要设 就可以继续进行消元,直到经过 次消元后 ,将线性方程组(4.1)化为(4.2)所示上三角方程组(以上计算过程称 为消元过程)。 (4.2) 消元过程结束后,只要设 ,对上三角方程组就可以自下 而上逐步回代,依次求得 ,即 4.2.2 实现高斯消去法的基本步骤 (1) 输入方程组的阶数 n ,系数矩阵A和右端常数矩阵b 。 (2) 消元过程: 设 ,对 ,计算: (3) 回代过程 (4) 输出方程组的解。 (5) 结束。 例4.1 用高斯消去法求解线性方程组,式中 #define N 3 /* N为方程组系数矩阵的阶数 */ int Gauss(float aNN,float bN) int i,j,k,flag=1; float t; for(i=0;i=0;i-) xi=bi; for(j=i+1;jmax_fab) l=j; max_fab=fabs(aji); if(i #define N 4 /* N为方程组系数矩阵的阶数 */ main() float aNN=1.003,0.333,1.504,-0.333,-2.011,1.455,0.506,2.956, 4.329,-1.952,0.006,2.087,5.113,-4.004,3.332,-1.112; float bN=3.005,5.407,0.136,3.772; float xN=0,0,0,0; int i,j; zg_matric(a,b); ColGauss(a,b); xN-1=bN-1/aN-1N-1; /* 回代过程开始 */ for(i=N-2;i=0;i-) xi=bi; for(j=i+1;j=0;k-) /* 计算Ux=y中的x */ xk=yk; for(j=k+1;j #define N 4 /* N为方程组系数矩阵的阶数 */ void chodec(float aNN,float lNN) int i,j,k; float s; for(i=0;i=0;k-) s=bk; for(j=k+1;j=0;i-) xi=yi-ri*xi+1; main() float aN=0.0,90.860, -67.590,46.260;/*主对角线左下方元素*/ float bN=136.01,98.81,132.01,177.17;/*主对角线元素*/ float cN=90.860,-67.590,46.260,0.0;/*主对角线右上方元素 */ float dN=-33.254,49.709,28.067,-7.3244;/*右端常数项元素*/ float rN,yN; /* 存放中间变量数组 */ float xN; /* 存放方程组的解向量的数组 */ int i; clrscr(); zhuigan(a,b,c,d,r,y); solve(r,y,x); for(i=0;i #define N 5 /* N为方程组系数矩阵的阶数 */ void sgaus(float aNN,float bN) float q; int i,j,k; for(k=0;k=0;k-) s=bk; for(j=k+1;j #include #define N 3 /* N为方程组系数矩阵的阶数 */ #define MAX_N 100 /* 最大迭代次数 */ #define epsilon 1e-6 /* 容许误差 */ int yacobi(float aNN,float bN,float xN) float d,s,max,yN; int i,j,k,flag; k=0; for(i=0;i=MAX_N) /* 当k=MAX_N时反馈失败信息,结束迭代 */ flag=0; break; return(flag); void zg_matric(float aNN,float bN) /*输出增广矩阵*/ int i,j; for(i=0;i #include #define N 4 /* N为方程组系数矩阵的阶数 */ #define MAX_N 100 /* 最大迭代次数 */ #define epsilon 1e-6 /* 给定精度要求 */ int seidel(float aNN,float bN,float xN) float d,s,max,temp; int i,j,k,flag; k=0; for(i=0;i=MAX_N) flag=0; break; return(flag); void zg_matric(float aNN,float bN) /*输出增广矩阵*/ int i,j; for(i=0;i #include #define N 5 /* N为方程组系数矩阵的阶数 */ #define MAX_N 100 /* 最大迭代次数 */ #define epsilon 1e-5 /* 容许误差 */ void zg_matric(float aNN,float bN) /*输出增广矩阵*/ int i,j; for(i=0;i=2) /* 必须保证松弛因子 */ printf(“w must between 1 and 2.n“); else break; zg_matric(a,b); k=sqr(w,a,b,x); if(k=1) /* 输出方程组的解 */ for(i=0;iN;i+) printf(“ x%d=%11.7fn“,i+1,xi); else printf(“after %d repeat, no result!n“,MAX_N);/*输出失败信息*/ 程序运行结果: input the w value:1.1 4.000000 -1.000000 0.000000 -1.000000 0.000000 2.000000 -1.000000 4.000000 -1.000000 0.000000 -1.000000 1.000000 0.000000 -1.000000 4.000000 -1.000000 0.000000 2.000000 -1.000000 0.000000 -1.000000 4.000000 -1.000000 1.000000 0.000000 -1.000000 0.000000 -1.000000 4.000000 2.000000 x1= 0.9999989 x2= 0.9999990 x3= 0.9999994 x4= 0.9999993 x5= 0.9999996 本 章 小 结 目前线性代数方程组的解法大致可分直接法 和迭代法两类。直接法是指在假设没有舍入误差 的条件下,经过有限次算数运算就能求得方程组 精确解的方法;迭代法是从一个已知的初始近似 值开始,按一定的法则逐步求出解的各个更准确 的近似值的方法,它是用某种极限过程去逐步逼 近精确解的方法。 在本章中直接法主要介绍了高斯消去法、列 主元高斯消去法、约当消去法、Courant分解法、 乔里斯基分解法、追赶法及对称高斯法;迭代法 主要介绍了雅可比、高斯赛德尔法以及超松弛 迭代法。 本章要求 高斯消去法是解线性方程组的最基本的方 法,而且高斯消去法程序也是具有代表性的数 值计算方法程序,读者应从程序总体结构和程 序设计方法上重点掌握。同时为了保证高斯消 去法的顺利进行并提高解的精度,必须采用主 元消去法,这是也是本章重点掌握的内容之一 。 在本章要了解的主要内容有: 1)了解高斯消去法由消去过程和回代过程组成; 2)了解列主元高斯消去法有两个用途: (1)为保证算法顺利进行,避免对角线上的元素为0。 (2)为减小舍入误差的产生,避免对角线上的元素为很小。 4)了解当系数矩阵为三对角阵时,用追赶法求解线性方程组是非常简单的; 3)了解如果需要重复地求解系数矩阵相同,而右端常数项不同的线性方 程组时,三角分解法是很有效的; 5)了解高斯赛德尔迭代法与雅可比迭代法的区别,即在雅可比迭代法 中,每次迭代时只用到上次的值,而高斯赛德尔迭代法中充分利用 了最新得到的迭代值。这也是迭代法中常用的一种技巧。 6)理解超松弛迭代法的意义。松弛因子 的取值对迭代公式的收敛速度 影响极大,在实际应用时,可以根据方程组的系数矩阵的性质,或结 合实践计算的经验来选定合适的松弛因子。 习 题 4.1 用高斯消去法求解线性方程组 4.2 用列主元高斯消去法求解线性方程组 4.3 用约当消去法求

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论