一病态线性方程组的算法设计
- 格式:doc
- 大小:45.00 KB
- 文档页数:1
甘肃政法学院本科学年论文(设计)题目浅议线性方程组的几种求解方法学号:姓名:指导教师:成绩:__________________完成时间: 2012 年 11 月目录第一章引言 (1)第二章线性方程组的几种解法 (1)2.1 斯消元法 (1)2.1.1 消元过程 (1)2.1.2 回代过程 (2)2.1.3 解的判断 (2)2.2 克莱姆法则 (3)2.3 LU分解法 (4)2.4 追赶法 (6)第三章结束语 (8)致谢 (8)参考文献 (9)摘要:线性方程组是线性代数的核心内容之一,其解法研究是代数学中经典且重要的研究课题.下面将综述几种不同类型的线性方程组的解法,如消元法、克莱姆法则、直接三角形法、、追赶法,并以具体例子介绍不同解法的应用技巧. 在这些解法中,高斯消元法方法,具有表达式清晰,使用范围广的特点.另外,这些方法有利于快速有效地解决线性方程组的求解问题,为解线性方程组提供一个简易平台,促进了理论与实际的结合。
关键词:线性方程组;解法;应用Several methods of solving linear equation groupAbstract: The system of linear equations is one of linear algebra core contents, its solution research is in the algebra the classics also the important research topic. This article summarized several kind of different type system of linear equations solution, like the elimination, the Cramer principle, the generalized inverse matrix law, the direct triangle law, the square root method, pursue the law, and by concrete example introduction different solution application skill. In these solutions, the generalized inverse matrix method, has the expression to be clear, use scope broad characteristic. Moreover, these methods favor effectively solve the system of linear equations solution problem fast, provides a simple platform for the solution system of linear equations, promoted the theory and the actual union.Key word: Linear equations; Solution ; Example第一章 引言线性方程组理论是高等数学中十分重要的内容,而线性方程组的解法是利用线性方程组理论解决问题的关键.下面将介绍线性方程组的消元法、追赶法、直接三角形法等求解方法,为求解线性方程组提供一个平台。
线性代数方程组的数值解法讨论解线性方程组的方法,主要分为直接方法和迭代方法两种。
直接法是在没有舍入误差的假设下能在预定的运算次数内求得精确解。
而实际上,原始数据的误差和运算的舍入误差是不可以避免的,实际上获得的也是近似解。
迭代法是构造一定的递推格式,产生逼近精确解的序列。
对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,因此比较受工程人员青睐。
小组成员本着工程应用,讨论将学习的理论知识转变为matlab 代码。
讨论的成果也以各种代码的形式在下面展现。
1 Jacobi 迭代法使用Jacobi 迭代法,首先必须给定初始值,其计算过程可以用以下步骤描述: 步骤1 输入系数矩阵A ,常熟向量b ,初值(0)x ,误差限ε,正整数N ,令1k =.步骤2 (0)11ni i ij jj ii j i x b a x a =≠⎡⎤⎢⎥=-⎢⎥⎢⎥⎣⎦∑,(0)j x 代表(0)x 的第j 个分量。
步骤3 计算11ni i ij j j ii j i y b a x a =≠⎡⎤⎢⎥=-⎢⎥⎢⎥⎣⎦∑,判断1max i i i n x y ε≤≤-<,如果是,则结束迭代,转入步骤5;否则,转入步骤4。
步骤4 判断k N =?如果是,则输出失败标志;否则,置1k k =+,i i x y ⇐,1,2,,i n =,转入步骤2。
步骤5 输出12,,n y y y 。
雅可比迭代代码function [x,k]=Fjacobi(A,b,x0,tol)% jacobi 迭代法 计算线性方程组% tol 为输入误差容限,x0为迭代初值max1= 300; %默认最多迭代300,超过要300次给出警告 D=diag(diag(A)); L=-tril(A,-1);U=-triu(A,1); B=D\(L+U); f=D\b; x=B*x0+f;k=1; %迭代次数while norm(x-x0)>=tol x0=x;x=B*x0+f; k=k+1;if(k>=max1)disp('迭代超过300次,方程组可能不收敛'); return; end%[k x'] %显示每一步迭代的结果 End2 高斯赛德尔迭代由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值,若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量(1)k i x +时,用最新分量11()k x +,12()k x +…(1)1k i x +-代替旧分量)1(k x ', )2(k x …)3(k x 就得到高斯赛德尔迭代格式,其数学表达式为:1(1)(1)()111(1,2,,)i n k k k ii ij j ij j j j i ii xb a x a x i n a -++==+⎛⎫=--= ⎪⎝⎭∑∑具体形式如下:()()()(1)()()()11221331111(1)(1)()()22112332222(1)(1)(1)(1)(1)112233,11111k k k k n n k k k k n n k k k k k n n n n n n n n nnx a x a x a x b a x a x a x a x b a x a x a x a x a x b a ++++++++--=----+=----+⋯⋯⋯⋯⋯⋯=-----+矩阵形式表示为:()(1)1(1)()(0,1,2,,),k k k k n +-+=++=x D Lx Ux b将(1)(1)()(0,1,2,,)k k k k n ++=++=Dx Lx Ux b 移项整理得: (1)1()1()()(0,1,2,,))k k x D L Ux D L b k n +--=-+-=记11(),()--=-=-M D L U g D L b ,则(1)()k k x x +=+M g高斯塞德尔迭代function [x,k]=Fgseid(A,b,x0,tol)%高斯-塞德尔迭代法 计算线性方程组 % tol 为误差容限max1= 300; %默认最高迭代300次D=diag(diag(A)); L=-tril(A,-1); U=-triu(A,1); G=(D-L)\U; f=(D-L)\b; x=G*x0+f;k=1; while norm(x-x0)>=tol x0=x;x=G*x0+f; k=k+1;if(k>=max1)disp('迭代次数太多,可能不收敛'); return; end% [k,x'] %显示每一步迭代结果 End3 超松弛迭代法在工程中最常遇到的问题便是线性代数方程组的求解,而线性代数方程组的求解一般可以分为两类,一类是直接法(精确法),包括克莱姆法则方法、LD 分解法等,另一类是迭代法(近似法),包括雅克比迭代法、高斯迭代法、超松弛迭代法等。
线性方程组在工程学中的应用(教学设计)线性方程组在工程学中的应用(教学设计)1. 引言线性方程组在工程学中是一个非常重要的数学工具,广泛应用于各个工程学科,如机械工程、土木工程、电气工程等。
学生通过了解线性方程组的基本概念和解法,能够在工程实践中准确地建立和解决相应的数学模型,进一步提高工程设计的能力和实践操作的技能。
2. 教学目标- 理解线性方程组的定义和基本概念;- 掌握线性方程组的解法,包括高斯消元法和矩阵法;- 能够应用线性方程组解决实际工程问题。
3. 教学内容3.1 线性方程组的基本概念- 线性方程组的定义与形式;- 方程组的系数矩阵、增广矩阵及其关系。
3.2 线性方程组的解法3.2.1 高斯消元法- 基本思路和步骤;- 化简为最简形式;- 可解与不可解的判定条件;- 存在唯一解、无解和无穷多解的情况。
3.2.2 矩阵法- 线性方程组的矩阵表示;- 矩阵的基本运算与性质;- 利用矩阵方法求解线性方程组。
3.3 工程中的应用案例讲解- 机械工程中的力的平衡问题;- 土木工程中的结构平衡问题;- 电气工程中的电路分析问题。
4. 教学方法在教学过程中,除了传统的讲授与板书之外,还可采用以下教学方法:- 针对线性方程组解法的算法性质,使用示意图进行讲解,帮助学生理解解题思路;- 结合工程实际问题,设计小组活动,让学生在小组合作中应用线性方程组解决问题;- 提供实际案例分析,让学生通过案例分析掌握解题方法;- 利用计算机编程软件进行线性方程组的计算与应用实践。
5. 教学评估为了评估学生对线性方程组在工程学中应用的理解与应用能力,可以采用以下方式进行评估:- 课堂小测验,检查学生对基本概念的掌握程度;- 实际工程问题的解答,检查学生对解法的运用能力;- 课堂小组活动成果评估,检查学生在合作中的表现与解题思路;- 课程设计与实践报告,能够通过学生的实际应用情况考察综合能力。
6. 教学资源- 课程教材及参考书籍,如《工程数学》;- 计算机编程软件,如MATLAB、Python等;- 线性方程组的实例案例和实验数据。
(Hilbert 矩阵)病态线性方程组的求解理论分析表明,数值求解病态线性方程组很困难。
考虑求解如下的线性方程组的求解Hx = b ,期中H 是Hilbert 矩阵,()ij n n Hh ,11ij h i j ,i ,j = 1,2,…,n 1.估计矩阵的2条件数和阶数的关系2.对不同的n ,取(1,1,,1)nx K ?,分别用Gauss 消去,Jacobi 迭代,Gauss-seidel 迭代,SOR 迭代和共轭梯度法求解,比较结果。
3.结合计算结果,试讨论病态线性方程组的求解。
第1小题:condition.m %第1小题程序t1=20;%阶数n=20x1=1:t1;y1=1:t1;for i=1:t1H=hilb(i);y1(i)=log(cond(H));endplot(x1,y1);xlabel('阶数n');ylabel('2-条件数的对数(log(cond(H))');title('2-条件数的对数(log(cond(H))与阶数n 的关系图');t2=200;%阶数n=200x2=1:t2;y2=1:t2;for i=1:t2H=hilb(i);y2(i)=log(cond(H));endplot(x2,y2);xlabel('阶数n');ylabel('2-条件数的对数(log(cond(H))');title('2-条件数的对数(log(cond(H))与阶数n 的关系图');画出Hilbert 矩阵2-条件数的对数和阶数的关系n=200时n=20时从图中可以看出,1)在n小于等于13之前,图像近似直线log(cond(H))~1.519n-1.8332)在n大于13之后,图像趋于平缓,并在一定范围内上下波动,同时随着n的增加稍有上升的趋势第2小题:solve.m%m第2小题主程序N=4000;xGauss=zeros(N,1);xJacobi=zeros(N,1);xnJ=zeros(N,1);xGS=zeros(N,1);xnGS=zeros(N,1);xSOR=zeros(N,1);xnSOR=zeros(N,1);xCG=zeros(N,1);xnCG=zeros(N,1);for n=1:N;x=ones(n,1);t=1.1;%初始值偏差x0=t*x;%迭代初始值e=1.0e-8;%给定的误差A=hilb(n);b=A*x;max=100000000000;%可能最大的迭代次数w=0.5;%SOR迭代的松弛因子G=Gauss(A,b);[J,nJ]=Jacobi(A,b,x0,e,max);[GS,nGS]=G_S(A,b,x0,e,max);[S_R,nS_R]=SOR(A,b,x0,e,max,w);[C_G,nC_G]=CG(A,b,x0,e,max);normG=norm(G'-x);xGauss(n)=normG;normJ=norm(J-x);nJ;xJacobi(n)=normJ;xnJ(n)=nJ;normGS=norm(GS-x);nGS;xGS(n)=normGS;xnGS(n)=nGS;normS_R=norm(S_R-x);nS_R;xSOR(n)=normS_R;xnSOR(n)=nS_R;normC_G=norm(C_G-x);nC_G;xCG(n)=normC_G;xnCG(n)=nC_G;endGauss.m%Gauss消去法function x=Gauss(A,b)n=length(b);l=zeros(n,n);x=zeros(1,n);%消去过程for i=1:n-1for j=i+1:nl(j,i)=A(j,i)/A(i,i);for k=i:nA(j,k)=A(j,k)-l(j,i)*A(i,k);endb(j)=b(j)-l(j,i)*b(i);endend%回代过程x(n)=b(n)/A(n,n);for i=n-1:-1:1c=A(i,:).*x;x(i)=(b(i)-sum(c(i+1:n)))/A(i,i);endJacobi.m%Jacobi迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m 可能最大的迭代次数function [x,n]=Jacobi(A,b,x0,e,m)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=D\(L+U);f=D\b;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('Jacobi迭代次数过多,迭代可能不收敛');break;endendG_S.m%Gauss-Seidel迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数function [x,n]=G_S(A,b,x0,e,m)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=(D-L)\U;f=(D-L)\b;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('Gauss-Seidel迭代次数过多,迭代可能不收敛');break;endendSOR.m%SOR超松弛迭代,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数,w松弛因子function [x,n]=SOR(A,b,x0,e,m,w)n=length(A);D=diag(diag(A));U=-triu(A,1);L=-tril(A,-1);B=(D-w*L)\((1-w)*D+w*U);f=(D-w*L)\b*w;x=B*x0+f;n=1;while norm(x-x0)>ex0=x;x=B*x0+f;n=n+1;if n>mdisp('SOR超松弛迭代次数过多,迭代可能不收敛');break;endendCG.m%CG共轭梯度法,x0表示迭代初值,e表示允许误差(迭代停止条件),n表示迭代次数,m可能最大的迭代次数function [x,n]=CG(A,b,x0,e,m)r=b-A*x0;p=r;alpha=(r'*r)/(p'*(A*p));x=x0+alpha*p;r1=b-A*x;n=1;while norm(r1)>ebelta=(r1'*r1)/(r'*r);p=r1+belta*p;r=r1;x0=x;alpha=(r'*r)/(p'*(A*p));x=x0+alpha*p;r1=b-A*x;n=n+1;if n>mdisp('CG共轭梯度法迭代次数过多,迭代可能不收敛');break;endend。
病态线性代数方程组的求解理论的分析表明,求解病态的线性代数方程组是困难的。
考虑方程组Hx = b 的求解,其中H 为Hilbert 矩阵,n n ij h H ⨯=)(,11-+=j i h ij ,n j i ,...,2,1,=1. 估计Hilbert 矩阵2-条件数与阶数的关系;2. 选择问题的不同维数,分别用Gauss 消去法,Jacobi 迭代,GS 迭代和SOR 迭代求解,比较结果;3. 讨论病态问题求解的算法。
解: 1、取Hilbert 矩阵阶数最高分别为n=20和n=100。
采用Hilbert 矩阵的2-条件数作为实验的比较对象,画出的曲线如下图所示:lg(())n cond H n从图中可以看出,在n ≤13之前,图像接近直线,在n >13之后,图像趋于平缓,在一定的范围内上下波动。
为了比较图像的线性部分,作出一条直线与已知曲线进行比较。
比较直线的关系式为:833.1519.1))(lg(-=n H cond n ,结果下图所示。
nl g (c o n d (H n ))lg(cond(Hn))~n 关系图从图2中可以看出,当n 较小时,n H cond n ~))(lg(之间近似满足线性关系。
当n 继续增大到100时,n H cond n ~))(lg(关系图下图所示:从图中可以看出,图像的走势符合在n=20时的猜想,在n 大于一定的值之后,图像趋于平缓,且在一定范围内震荡,同时又有一定上升趋势,但上升速度很慢。
2、选择不同的阶数n ,设方程组的精确解为xz=(1,1,…,1)T进行计算,用四种方法解x_Guass1、x_Jacobi1、x_GS1、x_SOR1对比表如下nl g (c o n d (H n ))lg(cond(Hn))~n关系图nl g (c o n d (H n ))lg(cond(Hn))~n 关系图Gauss消去法求解:选择问题的阶数为3~8时,用Gauss消去法求得的解与精确解一致,当阶数为9~14时,解开始出现偏差,而且n越大,偏差越大。
现代电力系统病态潮流算法的研究近年来,以病态潮流为基础的电力系统算法研究受到越来越多的关注。
本文着重介绍现代电力系统病态潮流算法的研究现状。
一、现有的病态潮流算法1、代数解法:代数解法是最常用的病态潮流算法之一,其核心概念是建立电力系统的多元线性方程组,通过矩阵消元方法求解线性方程组。
2、快速病态潮流算法:快速病态潮流算法是综合几种数值解法,使用广义步进快速收敛方法,并考虑电力系统约束,实现病态潮流分析。
3、群组病态潮流算法:群组病态潮流算法主要是把电力系统划分为多个节点群组,分别计算各个群组的电力量,最后统计处理求解整个电力系统的病态潮流解。
二、代数解法的局限性1、求解复杂度大:电力系统的多元线性方程组求解复杂度比较大,当电力系统有较多节点时,求解压力会比较大。
2、元件无线性特性:电力系统中的元件有可能不具有线性特性,这种情况下代数解法求解效率会降低。
三、快速病态潮流算法优势1、计算效率高:快速病态潮流算法采用了快速收敛方法,因此在求解效率上胜过其他病态潮流算法。
2、考虑系统约束:快速病态潮流算法考虑了电力系统约束,求解得到的结果更加精确准确。
3、应用范围广:快速病态潮流算法的应用范围非常广泛,可以用于电力系统分析和控制、电力系统优化设计以及故障分析等方面。
四、群组病态潮流算法应用1、电力系统状态变化分析:群组病态潮流算法可以用于电力系统状态变化分析,可以预估电力系统的稳定状态,提高电力系统的可靠性。
2、稳定性安全分析:群组病态潮流算法可以用于求解出电力系统在不同负荷变化情况下的稳定性安全性分析,提高电力系统的安全性和可靠性。
最后,结合代数解法、快速病态潮流算法以及群组病态潮流算法,现代电力系统病态潮流算法研究有了显著进展。
病态潮流算法的应用可以帮助电力系统提高可靠性和安全性,可以为其他电力系统的研究和应用的设计提供帮助。
文献综述信息与计算科学线性方程组解法的研究线性代数不仅是大学数学专业的一门重要的基础课程,也是本专科高校中各类专业的一门公共基础课,对后续知识的学习及学生的运算能力、逻辑推理能力、抽象概括能力的培养等都起着非常重要的作用。
线性代数理论有着悠久的历史和丰富的内容。
近年来随着科学技术的发展,特别是电子计算机使用的日益普遍,作为重要的数学工具之一。
线性代数的应用已经深入到自然科学、社会科学、工程技术、经济和管理等各个领域。
而求解线性方程组是线性代数的核心内容之一,也是它的最重要的应用领域之一。
线性方程组理论及其求解无论在工程计算和理论研究中都占有非常重要的地位,许多实际问题最终都可以化为一个线性方程组的求解问题。
线性方程组是指由一次方程所组成的方程组,对于它的研究主要是在解法问题上的探究,它有很多非常有效的解法,如高斯消元法、约当消元法、迭代法等,对一些特殊的线性方程组还有更有效的算法。
通常情况下,对于二元一次及三元一次方程组,采用的是加减消元法或带入消元法来求解。
至于多元线性方程组,大多采用的是高斯消元法、迭代法、主元素消去法等。
著名的克莱姆法则一般用在未知数个数和方程个数相等的情况下,用它求解方程组有个缺点,就是计算量比较大。
最初的线性方程组来源于生活,产生在实践中,正是一些实际问题刺激了这门学科的诞生和发展。
因此,线性方程组和我们的生活息息相关,人们对线性方程组的研究也在不断的深入,线性方程组理论及其解法更是不断的被应用在实际问题中。
对于线性方程组的解法,中国古代就有比较完整的论述。
在《九章算术方程》中,描述了相当于现在的高斯消元法,就是利用方程组的增广矩阵实行初等变换从而消去未知量的方法。
在印度,于梵藏的著作中最早出现一次方程组。
而西方,法国数学家彪特于1559年提出了三元一次方程组的解法,这也是欧洲最早出现的关于三元一次方程组的解法。
此后直到17世纪后期,由莱布尼茨开创了对线性方程组的研究,他当时研究的是含两个未知量的三个线性方程组组成的方程组,而且通过对线性方程组的研究还导致了他发明了行列式。
数值实验3_3 病态的线性方程组求解
自动化系李琳琳 2004211068
1.选择问题的维数为6,分别用Gauss消去法、J迭代方法、GS迭代方法和SOR 迭代方法求解并与问题的解比较,所得结果见下表
2.逐步增大问题的维数,仍用上述方法求解,结果如下:
由上述计算结果可以看出:
病态方程组的数值求解必须小心进行,否则得不到所要求的准确度或不稳定。
由本题中所做的数值实验可以看出,对于系数矩阵为Hilbert矩阵的病态方程组,Guass(即LU分解)方法和J迭代法都是无效的,结果发散。
而GS迭代和SOR迭代方法则较有效的解决了这个问题,得到较为精确的结果。
另一方面,也可以说明GS方法和SOR方法在收敛性方面更有优势。
其中,当系数矩阵A对称正定时,GS法一定收敛,而J法却不一定;且采用最优松弛因子的SOR方法要比GS法和J法收敛快得多。
解线性方程组的迭代法Haha送给需要的学弟学妹摘要:因为理论的分析表明,求解病态的线性方程组是困难的,但是实际情况是否如此,需要我们来具体检验。
系数矩阵H 为Hilbert 矩阵,是著名的病态问题。
因而决定求解Hx b =此线性方程组来验证上述问题。
详细过程是通过用Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法四种方法求解Hx b =线性方程组。
关键词:病态方程组、Gauss 消去法、J 迭代法、GS 迭代法、SOR 迭代法目录:一、问题背景介绍二、建立正确额数学模型 三、求解模型的数学原理1、Gauss 消去法求解原理2、Jacobi 迭代法求解原理3、G-S 迭代法求解原理4、SOR 迭代法求解原理5、Jacobi 和G-S 两种迭代法收敛的充要条件 四、计算过程(一)Hilbert 矩阵维数n=6时1、Gauss 消去法求解2、Jacobi 迭代法求解3、G-S 迭代法求解4、SOR 迭代法求解(二)Hilbert 矩阵维数n=20、50和100时1、G-S 迭代法求解图形2、SOR 迭代法求解图形 五、编写计算程序 六、解释计算结果1、Gauss 消去法误差分析2、G-S 迭代法误差分析3、SOR 迭代法误差分析G-S 迭代法与SOR 迭代法的误差比较 七、心得体会正文:一、问题背景介绍。
理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?二、建立正确的数学模型。
考虑方程组Hx b =的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(), , ,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。
通过首先给定解(为方便计算,笔者取x 的各个分量等于1),再计算出右端,b Hx =这样Hx b =的解就明确了,再用Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法四种方法分别求解,Hx b =将求解结果与给定解比较,而后求出上述四种方法的误差,得出哪种方法比较好。
2024年研究生考试试卷数学一、选择题(每题1分,共5分)1.设矩阵A为3阶可逆矩阵,矩阵B为A的伴随矩阵,则矩阵B 的行列式值为()。
A.|A|^3B.|A|^2C.|A|D.1A.存在ξ∈(0,1),使得f(ξ)=0B.存在ξ∈(0,1),使得f'(ξ)=0C.存在ξ∈(0,1),使得f''(ξ)=0D.存在ξ∈(0,1),使得f'''(ξ)=03.设函数f(x)=e^xsin(x),则f(x)在x=0处的泰勒展开式为()。
A.x+x^3/6+o(x^3)B.x+x^3/3!+o(x^3)C.x+x^3/2+o(x^3)D.x+x^3+o(x^3)4.设矩阵A为对称矩阵,则矩阵A的特征值()。
A.必为实数B.必为正数C.必为负数D.可以为复数5.设函数f(x)=x^33x,则f(x)在x=0处的拉格朗日中值定理的结论为()。
A.存在ξ∈(0,1),使得f'(ξ)=0B.存在ξ∈(0,1),使得f''(ξ)=0C.存在ξ∈(0,1),使得f'''(ξ)=0D.存在ξ∈(0,1),使得f(ξ)=0二、判断题(每题1分,共5分)1.若矩阵A为对称矩阵,则矩阵A的逆矩阵也为对称矩阵。
()2.若函数f(x)在区间[0,1]上单调递增,则f'(x)在区间[0,1]上恒大于0。
()3.若矩阵A的行列式值为0,则矩阵A不可逆。
()4.若函数f(x)在区间[0,1]上连续,则f(x)在区间[0,1]上可积。
()5.若矩阵A的特征值为λ,则矩阵A+kI的特征值为λ+k。
()三、填空题(每题1分,共5分)1.设矩阵A为3阶矩阵,矩阵B为A的伴随矩阵,则矩阵B的行列式值为______。
2.设函数f(x)=x^33x,则f(x)在x=0处的泰勒展开式为______。
3.若矩阵A为对称矩阵,则矩阵A的特征值______。
1 / 8数值分析实验六:解线性方程组的迭代法2016113 张威震1 病态线性方程组的求解1.1 问题描述理论的分析表明,求解病态的线性方程组是困难的。
实际情况是否如此,会出现怎样的现象呢?实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,,,1(),,,1,2,,1i j n n i j H h h i j n i j ⨯===+-这是一个著名的病态问题。
通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。
实验要求:(1)选择问题的维数为6,分别用Gauss 消去法、列主元Gauss 消去法、J 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数(至少到100),仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么?(3)讨论病态问题求解的算法1.2 算法设计首先编写各种求解方法的函数,Gauss 消去法和列主元高斯消去法使用实验5中编写的函数myGauss.m 即可,Jacobi 迭代法函数文件为myJacobi.m ,GS 迭代法函数文件为myGS.m ,SOR 方法的函数文件为mySOR.m 。
1.3 实验结果1.3.1 不同迭代法球求解方程组的结果比较选择H 为6*6方阵,方程组的精确解为x* = (1, 1, 1, 1, 1, 1)T ,然后用矩阵乘法计算得到b ,再使用Gauss 顺序消去法、Gauss 列主元消去法、Jacobi 迭代法、G-S 迭代法和SOR 方法分别计算得到数值解x1、x2、x3、x4,并计算出各数值解与精确解之间的无穷范数。
Matlab 脚本文件为Experiment6_1.m 。
迭代法的初始解x 0 = (0, 0, 0, 0, 0, 0)T ,收敛准则为||x(k+1)-x(k)||∞<eps=1e-6,SOR方法的松弛因子选择为w=1.3,计算结果如表1。
《科学与工程计算》实验报告学号:姓名:一、实验内容:考虑方程组Hx=b 的求解,其中系数矩阵H 为Hilbert 矩阵,nj i j i h h H j i n n j i ,,2,1,,11,)(,, =-+==⨯这是一个著名的病态问题。
通过首先给定解(例如取为各个分量均为1)再计算出右端b 的办法给出确定的问题。
实验要求:(1)选择问题的维数为6,分别用Jacobi 迭代法、GS 迭代法和SOR 迭代法求解方程组,其各自的结果如何?将计算结果与问题的解比较,结论如何?(2)逐步增大问题的维数,仍然用上述的方法来解它们,计算的结果如何?计算的结果说明了什么? (3)讨论病态问题求解的算法。
二、程序设计的基本思想、原理和算法描述:1、 算法 Jacobi 迭代法若A 为稀疏矩阵,只需遍历非零元素GS 迭代法若A 为稀疏矩阵,只需遍历非零元素每步迭代计算量相当于一次矩阵与向量的乘法;不需要保留上一步的迭代解,与Jacobi 迭代法计算量一样。
SOR 迭代法(稠密矩阵)2、 函数组成double max(double array[100]) 求数组中的最大值函数3、 输入/输出设计对于方程组Hx=b 的求解,系数矩阵H 为Hilbert 矩阵,矩阵中的数由下列函数生成。
nj i j i h h H j i n n j i ,,2,1,,11,)(,, =-+==⨯X*取一个特解[1,1,1, (1)b 数组由矩阵的每行元素相加得来。
4、符号名说明double c[100] 用来存储第k+1次和第k 次迭代结果的差值的绝对值 double x[100] 第k+1次迭代结果,储存解数组 double x0[100] 初始向量double r 第k+1次和第k 次迭代结果的差值的绝对值的最大值 double sum 矩阵方程变换后右侧值的和 int k 迭代次数double a[100][100] 存储Hilbert 矩阵 double b[100] 存储b 向量三、源程序及注释:Jacobi 迭代法#include<iostream> #include<math.h> #include <iomanip> #include <stdio.h> using namespace std; int n;double max(double array[100])//求最大值函数 {double a=array[0]; int i;for(i=1; i<n; i++) {if(a<array[i]) a=array[i]; return a; } }double c[100]= {0.0};double x[100]= {0.0}; //第k+1次迭代结果,储存解数组 double x0[100]= {0.0}; //初始向量double r,sum=0; int main(){double s=0;int i,k,j;//k为迭代次数double a[100][100];double b[100]= {0.0};cout<<"请输入维数:"<<endl;cin>>n;cout<<"输出a数组:"<<endl;double max(double array[100]);for(i=0; i<n; i++){for(j=0; j<n; j++){a[i][j]=1.0/(i+j+1);printf("%10.6lf ",a[i][j]);//矩阵中的数精确到六位}cout<<endl;}cout<<"输出b数组:"<<endl;for(i=0; i<n; i++){for(j=0; j<n; j++){b[i]+=a[i][j];//矩阵每行的和}cout<<b[i]<<" ";}cout<<endl;cout<<"输入精度:"<<endl;cin>>s;for(k=1;; k++){for(i=0; i<n; i++){for(j=0; j<n; j++){sum=a[i][j]*x0[j]+sum;}x[i]=x0[i]+((b[i]-sum)/a[i][i]);//雅克比迭代方法计算方式c[i]=fabs(x[i]-x0[i]);//求差值的绝对值x0[i]=x[i];sum=0;r=max(c);if(r<s)//输出迭代次数{for(i=0; i<n; i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(10)<<endl;cout<<"迭代次数:"<<k<<endl;return 0;}}return 0;}GS迭代法#include<iostream>#include<math.h>#include <iomanip>#include <stdio.h>using namespace std;int n;double max(double array[100])//求最大值函数{double a=array[0];int i;for(i=1;i<n;i++){if(a<array[i])a=array[i];}return a;}main() {double s=0;double max(double array[100]);double c[100]={0.0};double x[100]={0.0};//第k+1次迭代结果,储存解数组double x0[100]={0.0};//初始向量int i,k,j;double r,sum=0;double a[100][100];double b[100]= {0.0};cout<<"请输入维数:"<<endl;cout<<"输出a数组:"<<endl;for(i=0; i<n; i++){for(j=0; j<n; j++){a[i][j]=1.0/(i+j+1);printf("%10.6lf ",a[i][j]);//矩阵中的数精确到六位}cout<<endl;}cout<<"输出b数组:"<<endl;for(i=0; i<n; i++){for(j=0; j<n; j++){b[i]+=a[i][j];//矩阵每行的和}cout<<b[i]<<" ";}cout<<endl;cout<<"输入精度:"<<endl;cin>>s;for(k=1;;k++){for(i=0;i<n;i++){for(j=0;j<n;j++){sum=a[i][j]*x0[j]+sum;}x[i]=x0[i]+((b[i]-sum)/a[i][i]);//gs迭代方法计算方式c[i]=fabs(x[i]-x0[i]);//求差值的绝对值x0[i]=x[i];sum=0;}r=max(c);if(r<s)//输出迭代次数{for(i=0;i<n;i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(10)<<endl;cout<<"迭代次数:"<<k<<endl;return 0;}}}SOR迭代法#include<iostream>#include<math.h>#include <iomanip>#include <stdio.h>using namespace std;int n;double max(double array[100]){double a=array[0];int i;for(i=1;i<n;i++){if(a<array[i])a=array[i];}return a;}int main() {double s=0,w=0;int i,k,j;//k为迭代次数double max(double array[100]);double c[100]= {0.0}; //double x[100]= {0.0}; //第k+1次迭代结果,储存解数组double x0[100]= {0.0}; //初始向量int i,k,j;double r,sum=0;double a[100][100];double b[100]= {0.0};cout<<"请输入维数:"<<endl;cin>>n;cout<<"输出a数组:"<<endl;for(i=0; i<n; i++){for(j=0; j<n; j++){a[i][j]=1.0/(i+j+1);printf("%10.6lf ",a[i][j]);//cout<<a[i][j]<<" ";}cout<<endl;}cout<<"输出b数组:"<<endl;for(i=0; i<n; i++){for(j=0; j<n; j++){b[i]+=a[i][j];}cout<<b[i]<<" ";}cout<<endl;cout<<"输入精度:"<<endl;cin>>s;cout<<"输入松弛因子:"<<endl;cin>>w;for(k=1;;k++){for(i=0;i<n;i++){for(j=0;j<n;j++){sum=a[i][j]*x0[j]+sum;}x[i]=x0[i]+(w*(b[i]-sum)/a[i][i]);//sor迭代方法的计算公式c[i]=fabs(x[i]-x0[i]);//求差值的绝对值x0[i]=x[i];sum=0;}r=max(c);if(r<s)//输出迭代次数{for(i=0;i<n;i++)cout<<"x"<<i<<" = "<<x[i]<<setprecision(10)<<endl; cout<<"迭代次数:"<<k<<endl;return 0;}}}四、运行输出结果:JacobiGSSOR五、结果比较分析:说明:Hx=b,H矩阵可以由函数hi,j=1/(i+j-1)直接由程序生成,为了设定参考解,我们先设x为分量全1的向量,求出b,然后将H和b作为已知量,求x,与设定的参考解对比。
病态线性方程组的求解理论分析表明,数值求解病态线性方程组很困难。
考虑求解如下的线性方程组的求解Hx = b ,期中H 是Hilbert 矩阵,()ij n n H h ⨯=,11ij h i j =+-,i ,j = 1,2,…,n1. 估计矩阵的2条件数和阶数的关系2. 对不同的n ,取(1,1,,1)n x =∈ ,分别用Gauss 消去,Jacobi 迭代,Gauss-seidel 迭代,SOR 迭代和共轭梯度法求解,比较结果。
3. 结合计算结果,试讨论病态线性方程组的求解。
1)估计矩阵的2-条件数和阶数的关系矩阵的2-条件数定义为:1222()Cond A A A-=⨯,将Hilbert 矩阵带入有:1222()Cond H H H -=⨯。
使用MA TLAB 自带的cond2函数进行计算并画出log10(cond2)和阶数n 的关系曲线如下:可见当n 小于13的时候,条件数的对数与阶数有较好的线性关系,但是随着阶数的提高,条件数趋于“稳定”地振荡。
但是事实上,n较大时,H矩阵已经奇异,直接使用cond函数计算结果可能存在不准确性。
原因是对于条件数过大的矩阵使用inv函数求逆矩阵是不可靠的,应该使用invhilb函数进行求逆,并代入定义式中求解,生成的结果如下所示。
线性度较好,可知,Hilbert矩阵的2-条件数会随其阶数n的增加呈指数增大趋势,因此当n 较大时Hilbert矩阵将是严重病态的。
对不同的n,采用各种方法求解方程编写程序,选取n=2,3,5,10,15,20,迭代条件为迭代100000次或者是计算精度达到1e-6,若迭代次数少于设定最大值,表示相邻两次迭代达到精度要求,或者是计算结果超出范围。
X0取零向量,w取1.2,计算结果如下所示:由上可见,当n大于2时,Jacobi法已经不收敛,故其迭代次数已经没有意义。
当n=15时,Gauss消去法已经不收敛。
并且随着阶数的上升,gauss消去法的误差也随之上升。
嘉兴学院南湖学院(2011届)本科毕业论文(设计)题目:线性方程组的求解及其应用专业:数学与应用数学班级学号:姓名:指导教师:完成日期: 2011.5.5诚信声明我声明,所呈交的论文(设计)是本人在老师指导下进行的研究工作及取得的研究成果.据我查证,除了文中特别加以标注和致谢的地方外,论文(设计)中不包含其他人已经发表或撰写过的研究成果,也不包含为获得嘉兴学院或其他教育机构的学位或证书而使用过的材料.我承诺,论文(设计)中的所有内容均真实、可信.论文(设计)作者签名:签名日期:年月日授权声明学校有权保留送交论文(设计)的原件,允许论文(设计)被查阅和借阅,学校可以公布论文(设计)的全部或部分内容,可以影印、缩印或其他复制手段保存论文(设计),学校必须严格按照授权对论文(设计)进行处理,不得超越授权对论文(设计)进行任意处置.论文(设计)作者签名:签名日期:年月日线性方程组的求解及其应用***(**学院)摘要:线性方程组是线性代数中一个最基础的内容,它在科学和工程计算等领域都发挥着重要的作用.本文主要讨论线性方程组解的基本结构,并运用克拉默法则,高斯消元法和追赶法等来求解.另外还研究了它在解析几何,高等代数,运筹学等学科以及其他学科领域中的一些简单的应用.通过线性方程组的求解及其应用,使很多繁琐的问题变得方便快捷.关键词:线性方程组;克拉默法则;高斯消元法;LU分解;应用The Solution of Linear System of Equations and It’s Application***(** University)Abstract:Linear system of equations is one of the most basic content in linearalgebra. It plays an important role in many areas, for example in science and engineering calculation. This article discusses the basic structure solution of linear equations, and use Cramer's rule, Gauss-elimination and chase way to find solutions. In addition, it also examines it’s in analytic geometry, higher algebra, operations research, as well as other areas of some simple applications. By the solution of linear system of equations and it’s application, we can make a lot of complicated problems becoming more convenient.Key words:Linear equations; Cramer's rule; Gauss-elimination; LU-decomposition;Application目录1 引言 (1)2 线性方程组求解 (2)2.1 概念 (2)2.2 解的情况及其通解 (3)2.3 克拉默法则 (5)2.4 高斯消元法 (7)2.5 追赶法 (9)2.5.1 LU分解 (9)2.5.2 追赶法 (10)3 线性方程组的应用 (13)3.1 在解析几何中的应用 (13)3.2 在高等代数中的应用 (13)3.3 在运筹学中的应用 (14)3.4 在化学中的应用 (15)3.5 在经济学中的应用 (16)3.6 在控制科学中的应用 (18)4 结束语 (21)致谢 (22)参考文献 (23)1 引言线性方程组即各个方程关于未知量均为一次的方程组.对线性方程组的研究,中国比欧洲至少早1500年,记载在公元初《九章算术》方程章中.线性方程组是线性代数的主要内容,它主要包括线性方程组有解性的判定、线性方程组的求解和线性方程组解的结构等.而且随着现代工业的发展,线性方程组的应用出现在各个领域,伴随着大量方程和多未知数的出现,寻找简便而且准确的求解方法就显得十分重要而且具有现实意义.因此对线性方程组解法的研究就显得十分必要[]1.本文主要内容是讨论了线性方程组解的几种基本情况,以及有不唯一解时的通解表示形式.其次还介绍了线性方程组当解唯一时的三种求解方法,分别是:1、克拉默法则;2、高斯消元法;3、追赶法.另外本文还介绍了线性方程组在高等代数,解析几何,运筹学等数学领域以及在其他学科领域中的一些基本的应用.2 线性方程组求解线性方程组的核心问题是研究它何时有解,以及解是什么.本节主要对线性方程组解的情况进行讨论,给出当解不唯一时通解的表示形式.另外还介绍了几种特殊的线性方程组的求解方法.线性方程组可以分成两类,一类是未知量个数与方程的个数相等,另一类是未知量个数与方程的个数不等.对于前一类特殊的线性方程组,我们可以采用克拉默法则,对于后一种线性方程组我们可以采用高斯消元法.而追赶法是数值计算中解线性方程组的一种直接法,它能在无舍入误差存在的情况下,经过有限步运算即可求得方程组的精确解的算法.2.1 概念错误!未找到引用源。
实验一 误差分析实验1(病态问题)实验目的:算法有“优”与“劣”之分,问题也有“好”与“坏”之别。
对数值方法的研究而言,所谓坏问题就是问题本身对扰动敏感者,反之属于好问题。
通过本实验可获得一个初步体会。
数值分析的大部分研究课题中,如线性代数方程组、矩阵特征值问题、非线性方程及方程组等都存在病态的问题。
病态问题要通过研究和构造特殊的算法来解决,当然一般要付出一些代价(如耗用更多的机器时间、占用更多的存储空间等)。
问题提出:考虑一个高次的代数多项式)1.1()()20()2)(1()(201∏=-=---=k k x x x x x p显然该多项式的全部根为1,2,…,20共计20个,且每个根都是单重的。
现考虑该多项式的一个扰动)2.1(0)(19=+x x p ε其中ε是一个非常小的数。
这相当于是对(1.1)中19x 的系数作一个小的扰动。
我们希望比较(1.1)和(1.2)根的差别,从而分析方程(1.1)的解对扰动的敏感性。
实验内容:为了实现方便,我们先介绍两个MATLAB 函数:“roots ”和“poly ”。
roots(a)u =其中若变量a 存储n+1维的向量,则该函数的输出u 为一个n 维的向量。
设a 的元素依次为121,,,+n a a a ,则输出u 的各分量是多项式方程01121=+++++-n n n n a x a x a x a的全部根;而函数 poly(v)b =的输出b 是一个n+1维向量,它是以n 维向量v 的各分量为根的多项式的系数。
可见“roots ”和“poly ”是两个互逆的运算函数。
))20:1((;)2();21,1(;000000001.0ve poly roots ess ve zeros ve ess +===上述简单的MATLAB 程序便得到(1.2)的全部根,程序中的“ess ”即是(1.2)中的ε。
实验要求:(1)选择充分小的ess ,反复进行上述实验,记录结果的变化并分析它们。
实验一 病态线性方程组的算法设计
1 实验目的
① 初步了解常规方法在求解病态线性方程组时遇到的困难。
② 针对病态问题设计求解算法并验证算法的有效性。
2 实验内容
Hilbert 矩阵是一个典型的病态矩阵,定义如下
11/21/1/21/31/(1)()1/1/(1)
1/(21)n ij n n H h n n n ⎡⎤⎢⎥+⎢⎥==⎢⎥⎢⎥+-⎣⎦ (1) 其中1(1)ij h i j =+-,
它是一个对称正定矩阵,并且()n cond H 随着n 的增加迅速增加,其逆矩阵1()n ij H a -=,其中
2(1)(1)!(1)!(1)[(1)!(1)!]()!()!
i j ij n i n j a i j i j n i n j +-+-+-=+----- 考虑线性方程组
n H x b = (2)
其中11
(,,),(1,2,,)n
T
n i ij j b b b b h i n ====∑。
易见()1,,1T x =为方程组(2)的精确解。
编程完成以下题目:
(1) 用列主元高斯消去算法和高斯-赛德尔迭代算法求解线性方程组(2),与精确解进行比较,
写出你的结论,并分析原因。
(线性方程组的阶数3,5,10,20,40n =)
(2) 设计一种可对方程组(2)进行求解的有效算法。
(3,5,10,20,40n =)
3 练习思考
什么是病态线性方程组,如何判定线性代数方程组是否是病态的?并举例对你的结论进行验证。