一病态线性方程组的算法设计

合集下载

线性方程组的几种求解方法

线性方程组的几种求解方法

甘肃政法学院本科学年论文(设计)题目浅议线性方程组的几种求解方法学号:姓名:指导教师:成绩:__________________完成时间: 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 分解法等,另一类是迭代法(近似法),包括雅克比迭代法、高斯迭代法、超松弛迭代法等。

第四章线性方程组的求解

第四章线性方程组的求解
(行 系 数 i,k ) l
1.2.2
For j=k+1,…, n
aij- aik akj aij(新) bi - aik bk bi (新)
*常用|akk|≤
步骤 2. 步骤 3.
bn /ann xn For k=n-1,…,1 3.1 3.2
(回代)
bk s For j=k+1,…,n
b1( 0 ) (1) b2 (1) bn
注意:若a11(0) =0,因为 det(A)0,在A的第1列元素中至 少有某ai1(0) 0将i行与第1行交换,再作第1步 。
(0 a11 ) 假定已完成k-1步消元, ( 0) ( 0) ( A( k 1) , b( k 1) ) ( A ,b ) (0 a12 ) (1 a22)
迭代法:从一个初始向量出发,按照一定的迭代格 式,构造出一个趋向于真解的无穷序列。
举例
x 2 x2 2 x3 2 例:直接法解线性方程组 1 2 x1 3 x2 3 x3 4 4 x1 x2 6 x3 3
1 2 2 2 ( A, b) 2 3 3 4 4 1 6 3 2 2 1 2 0 1 7 8 0 0 61 61
解:
2 2 1 2 0 1 7 8 0 9 2 11
x3 1 x2 8 7 x3 1 x1 2 2x2 2x3 2
第四章 解线性方程组的直接法
a11 x1 a12 x 2 a1n x n b1 a x a x a x b 21 1 22 2 2n n 2 a n1 x1 a n 2 x 2 a nn x n bn

数值分析实验报告--解线性方程组的迭代法及其并行算法

数值分析实验报告--解线性方程组的迭代法及其并行算法

disp('请注意:高斯-塞德尔迭代的结果没有达 到给定的精度,并且迭代次数已经超过最大迭 代次数max1,方程组的精确解jX和迭代向量X 如下: ') X=X';jX=jX' end end X=X';D,U,L,jX=jX'
高斯-塞德尔的输入为:
A=[10 2 3;2 10 1;3 1 10]; b=[1;1;2]; X0=[0 0 0]'; X=gsdddy(A,b,X0,inf, 0.001,100) A=[10 2 3;2 10 1;3 1 10]; 请注意:因为对角矩阵 D 非奇异,所以此方程组有解.
0.0301 0.0758 0.1834
8.心得体会:
这已经是第三次实验了, 或多或少我已经对 MATLAB 有了更多的了 解与深入的学习。通过这次实验我了解了雅可比迭代法和高斯- 塞德尔迭代法的基本思想,虽然我们不能熟练编出程序,但还是 能看明白的。运行起来也比较容易,让我跟好的了解迭代法的多 样性,使平常手算的题能得到很好的验证。通过这次实验让我对 MATLAB 又有了更深一层的认识,使我对这门课兴趣也更加浓厚。
运行雅可比迭代程序输入: A=[10
b=[1;1;2];X0=[0 0 0]'; X=jacdd(A,b,X0,inf,0.001,100)
2 3;2 10 1;3 1 10];
结果为:
k= 1 X=
0.1000 k= 2 X= 0.0200 k= 3 X= 0.0400 k= 4 X= 0.0276 k= 5 X= 0.0314 k= 6 X= 0.0294 k= 7 X= 0.0301 k= 8 X= 0.0297
6、 设计思想:先化简,把对角线的项提到左边,其它项

线性方程组在工程学中的应用(教学设计)

线性方程组在工程学中的应用(教学设计)

线性方程组在工程学中的应用(教学设计)线性方程组在工程学中的应用(教学设计)1. 引言线性方程组在工程学中是一个非常重要的数学工具,广泛应用于各个工程学科,如机械工程、土木工程、电气工程等。

学生通过了解线性方程组的基本概念和解法,能够在工程实践中准确地建立和解决相应的数学模型,进一步提高工程设计的能力和实践操作的技能。

2. 教学目标- 理解线性方程组的定义和基本概念;- 掌握线性方程组的解法,包括高斯消元法和矩阵法;- 能够应用线性方程组解决实际工程问题。

3. 教学内容3.1 线性方程组的基本概念- 线性方程组的定义与形式;- 方程组的系数矩阵、增广矩阵及其关系。

3.2 线性方程组的解法3.2.1 高斯消元法- 基本思路和步骤;- 化简为最简形式;- 可解与不可解的判定条件;- 存在唯一解、无解和无穷多解的情况。

3.2.2 矩阵法- 线性方程组的矩阵表示;- 矩阵的基本运算与性质;- 利用矩阵方法求解线性方程组。

3.3 工程中的应用案例讲解- 机械工程中的力的平衡问题;- 土木工程中的结构平衡问题;- 电气工程中的电路分析问题。

4. 教学方法在教学过程中,除了传统的讲授与板书之外,还可采用以下教学方法:- 针对线性方程组解法的算法性质,使用示意图进行讲解,帮助学生理解解题思路;- 结合工程实际问题,设计小组活动,让学生在小组合作中应用线性方程组解决问题;- 提供实际案例分析,让学生通过案例分析掌握解题方法;- 利用计算机编程软件进行线性方程组的计算与应用实践。

5. 教学评估为了评估学生对线性方程组在工程学中应用的理解与应用能力,可以采用以下方式进行评估:- 课堂小测验,检查学生对基本概念的掌握程度;- 实际工程问题的解答,检查学生对解法的运用能力;- 课堂小组活动成果评估,检查学生在合作中的表现与解题思路;- 课程设计与实践报告,能够通过学生的实际应用情况考察综合能力。

6. 教学资源- 课程教材及参考书籍,如《工程数学》;- 计算机编程软件,如MATLAB、Python等;- 线性方程组的实例案例和实验数据。

数值分析(hilbert矩阵)病态线性方程组的求解matlab程序

数值分析(hilbert矩阵)病态线性方程组的求解matlab程序

(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。

数值求解Hilbert病态线性方程组

数值求解Hilbert病态线性方程组

病态线性代数方程组的求解理论的分析表明,求解病态的线性代数方程组是困难的。

考虑方程组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、稳定性安全分析:群组病态潮流算法可以用于求解出电力系统在不同负荷变化情况下的稳定性安全性分析,提高电力系统的安全性和可靠性。

最后,结合代数解法、快速病态潮流算法以及群组病态潮流算法,现代电力系统病态潮流算法研究有了显著进展。

病态潮流算法的应用可以帮助电力系统提高可靠性和安全性,可以为其他电力系统的研究和应用的设计提供帮助。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一 病态线性方程组的算法设计
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 练习思考
什么是病态线性方程组,如何判定线性代数方程组是否是病态的?并举例对你的结论进行验证。

相关文档
最新文档