lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

合集下载

高斯消元法与lu分解的关系

高斯消元法与lu分解的关系

高斯消元法与lu分解的关系
高斯消元法与LU分解是线性代数中两个重要的概念,它们在解决线性方程组的问题中起着至关重要的作用。

虽然它们有着不同的计算方式,但是它们之间有着密切的联系。

高斯消元法是一种基本的线性方程组求解方法,它通过对系数矩阵进行初等变换,将其化为上三角矩阵,然后通过回代求解得到方程组的解。

高斯消元法的优点是简单易懂,容易实现,但是它的缺点是当系数矩阵的行列式为0时,无法求解。

LU分解是一种将系数矩阵分解为下三角矩阵L和上三角矩阵U的方法,即A=LU。

通过LU分解,可以将原来的线性方程组转化为两个简单的方程组,从而更容易求解。

LU分解的优点是可以避免高斯消元法中的数值误差,同时可以在多次求解同一系数矩阵的线性方程组时,节省计算时间。

虽然高斯消元法和LU分解有着不同的计算方式,但是它们之间有着密切的联系。

事实上,高斯消元法可以看作是LU分解的一种特殊情况。

当系数矩阵的LU分解存在时,高斯消元法就可以通过对系数矩阵进行初等变换,将其化为上三角矩阵U,然后将U的对角线元素作为L的对角线元素,将L的非对角线元素设置为初等变换的系数,即可得到LU分解。

因此,可以说高斯消元法和LU分解是线性代数中两个密不可分的
概念。

在实际应用中,我们可以根据具体的问题选择使用高斯消元法或LU分解来求解线性方程组,以达到更好的计算效果。

同时,我们也可以通过理解它们之间的联系,更好地掌握线性代数的知识,为以后的学习和应用打下坚实的基础。

常见的线性代数求解方法

常见的线性代数求解方法

常见的线性代数求解方法
1.列主元消去法
列主元消去法是一种经典的求解线性方程组的方法。

它通过将
方程组转化为上三角矩阵的形式来求解。

这个方法的关键在于选取
主元的策略。

一种常见的选取主元的策略是选择当前列中绝对值最
大的元素作为主元,然后进行消去操作,直到将矩阵转化为上三角
矩阵。

2.高斯-约当消去法
高斯-约当消去法是另一种常见的线性方程组求解方法。

它通
过消去矩阵的下三角部分来将线性方程组转化为上三角矩阵的形式。

这个方法也需要选择主元,常见的选择策略是选取当前行中绝对值
最大的元素作为主元,然后进行消去操作。

3.LU分解法
LU分解法是将矩阵分解为一对矩阵的乘积的方法。

这个方法的思想是先将矩阵分解为一个下三角矩阵和一个上三角矩阵,然后通过求解上三角矩阵和下三角矩阵的两个方程组来求解原始的线性方程组。

4.Jacobi迭代法
Jacobi迭代法是一种迭代求解线性方程组的方法。

它通过将原始的线性方程组转化为一个对角矩阵和另一个矩阵的乘积的形式,然后通过迭代求解这个对角矩阵和另一个矩阵的方程组来逼近线性方程组的解。

5.Gauss-Seidel迭代法
Gauss-Seidel迭代法是另一种迭代求解线性方程组的方法。

它与Jacobi迭代法类似,但是在每一次迭代中,它使用前一次迭代得到的部分解来更新当前的解。

这个方法通常比Jacobi迭代法收敛得更快。

以上是一些常见的线性代数求解方法。

每种方法都有其特点和适用范围,我们可以根据具体情况选择合适的方法来求解线性方程组的问题。

分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组

分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组

分别用 jacobi 迭代法和 gauss-seidel 迭代法,求解方程组【jacobi 迭代法和 gauss-seidel 迭代法分别应用于方程组的求解】1. 引言在数学领域中,方程组的求解一直是一个重要的课题。

为了解决复杂的线性方程组,人们提出了各种迭代方法,其中 jacobi 迭代法和gauss-seidel 迭代法是两种常见的方法。

本文将探讨这两种迭代方法在求解方程组中的应用。

2. jacobi 迭代法的原理和应用jacobi 迭代法是一种基于逐次逼近的迭代方法。

对于线性方程组AX=B,其中 A 是系数矩阵,X 是未知数向量,B 是已知向量。

我们可以通过以下公式进行逐次逼近:X(k+1) = D^(-1)*(B - (L+U)X(k))其中,D、L、U 分别是 A 的对角线、下三角和上三角矩阵。

jacobi 迭代法的优点在于易于理解和实现,但在收敛速度上较慢,需要进行多次迭代才能得到精确解。

在实际应用中,需要根据实际情况选择合适的迭代次数。

3. gauss-seidel 迭代法的原理和应用与 jacobi 迭代法类似,gauss-seidel 迭代法也是一种基于逐次逼近的迭代方法。

不同之处在于,gauss-seidel 迭代法在计算 X(k+1) 时利用了已经得到的 X(k) 的信息,即:X(k+1)_i = (B_i - Σ(A_ij*X(k+1)_j,j≠i))/A_ii这种方式使得 gauss-seidel 迭代法的收敛速度较快,通常比 jacobi 迭代法更快,尤其是对于对角占优的方程组。

4. 分别用 jacobi 迭代法和 gauss-seidel 迭代法求解方程组为了更具体地说明 jacobi 迭代法和 gauss-seidel 迭代法的应用,我们分别用这两种方法来求解以下方程组:2x1 + x2 = 9x1 + 3x2 = 11我们将该方程组写成矩阵形式 AX=B:|2 1| |x1| |9||1 3| * |x2| = |11|我们根据 jacobi 迭代法和 gauss-seidel 迭代法的原理,依次进行迭代计算,直到满足收敛条件。

线性方程组求解的常用方法与技巧

线性方程组求解的常用方法与技巧

线性方程组求解的常用方法与技巧线性方程组是数学中常见的问题,它的求解在各个领域都有广泛的应用。

本文将介绍线性方程组求解的常用方法与技巧。

一、高斯消元法高斯消元法是线性方程组求解最常用的方法之一。

它通过化简矩阵,将线性方程组转化为阶梯形式,从而求解未知数的值。

具体步骤如下:1. 将线性方程组表示为增广矩阵形式。

2. 选择一个主元,通常选择第一列的首个非零元素。

3. 通过初等变换,将主元所在列的其他元素消成零。

4. 重复步骤2和3,直到转化为阶梯形式。

5. 回代求解未知数,得出线性方程组的解。

高斯消元法的优点是简单易行,适用于任意规模的线性方程组。

然而,该方法在面对大规模线性方程组时会面临计算复杂度高的问题。

二、雅可比迭代法雅可比迭代法是另一种常用的线性方程组求解方法,它通过迭代逼近的方式求解未知数的值。

具体步骤如下:1. 将线性方程组表示为矩阵形式,即AX=B。

2. 对矩阵A进行分解,将其分解为D、L和U三个矩阵,其中D是A的对角线矩阵,L是A的下三角矩阵,U是A的上三角矩阵。

3. 利用雅可比迭代公式,依次迭代计算未知数的值,直到满足收敛条件。

4. 得到线性方程组的解。

雅可比迭代法的优点是适用于稀疏矩阵,且收敛性较好。

然而,它的迭代次数通常较多,计算效率较低。

三、LU分解法LU分解法是线性方程组求解的一种常见方法,它将矩阵A分解为两个矩阵L和U的乘积。

具体步骤如下:1. 将线性方程组表示为矩阵形式,即AX=B。

2. 对矩阵A进行LU分解,其中L是单位下三角矩阵,U是上三角矩阵。

3. 将方程组AX=B转化为LUx=B,再分别解得Ly=B和Ux=y两个方程组的解。

4. 得到线性方程组的解。

LU分解法的优点是可以重复利用分解后的LU矩阵求解不同的线性方程组,从而提高计算效率。

然而,该方法对于具有大量零元素的矩阵不适用。

四、克拉默法则克拉默法则是一种用于求解n元线性方程组的方法,它通过计算行列式的方式求解未知数的值。

数值分析实验报告

数值分析实验报告
end
%消元过程
fori=k+1:n
m=A(i,k)/A(k,k);
forj=k+1:n
A(i,j)=A(i,j)-m*A(k,j);
end
b(i)=b(i)-m*b(k);
end
det=det*A(k,k);
end
det=det*A(n,n);
%回代过程
ifabs(A(n,n))<1e-10
flag='failure';return;
*x=(x0,x1….,xn),插值节点
*y=(y0,y1,…,yn);被插函数f(x)在插值节点处的函数值
*t求插值函数Pn(x)在t处的函数值
*返回值 插值函数Pn(x)在t处的函数值
*/
procedureNewton
forj=0to n
d1jyj;
endfor
forj=1to n
fori=j to n
[n,m]=size(A);nb=length(b)
%当方程组行与列的维数不相等时,停止计算,并输出出错信息
ifn~=m
error('The row and columns of matrix A must beepual!');
return;
end
%当方程组与右端项的维数不匹配时,停止计算,并输出错误信息
clear
fprintf('gauss-seidel迭代法')
x1_(1)=0;
x2_(1)=0;
x3_(1)=0;
fori=1:9
x1_(i+1)=7.2+0.1*x2_(i)+0.2*x3_(i);

列主元素Gauss消去法Jacobi迭代法原理及计算方法

列主元素Gauss消去法Jacobi迭代法原理及计算方法

一、 列主元素Gauss 消去法、Jacobi 迭代法原理及计算方法1. 列主元素Gauss 消去法:1.1 Gauss 消去法基本原理设有方程组Ax b =,设A 是可逆矩阵。

高斯消去法的基本思想就是将矩阵的初等行变换作用于方程组的增广矩阵[]B A b = ,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。

1.2 列主元Gauss 消去法计算步骤将方程组用增广矩阵[]()(1)ijn n B A b a ⨯+== 表示。

1). 消元过程对1,2,,1k n =-(1) 选主元,找{},1,,k i k k n ∈+ 使得 ,max k i k ik k i na a ≤≤= (2) 如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行(3)。

(3) 如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ↔,,,1j k n =+ 。

(4) 消元,对,,i k n = ,计算/,ik ik kk l a a =对1,,1j k n =++ ,计算.ij ij ik kj a a l a =-2). 回代过程(1) 若0,nn a =则矩阵奇异,程序结束;否则执行(2)。

(2) ,1/;n n n nn x a a +=对1,,2,1i n =- ,计算,11/n i i n ij j ii j i x a a x a +=+⎛⎫=- ⎪⎝⎭∑2. Jacobi 迭代法2.1 Jacobi 迭代法基本原理Jacobi 迭代法的基本思想是对n 元线性方程组b Ax =,.,n n R b R A ∈∈将其变形为等价方程组f Bx x +=,其中.,,n n n n R x R f R B ∈∈∈⨯B 成为迭代矩阵。

从某一取定的初始向量)0(x 出发,按照一个适当的迭代公式 ,逐次计算出向量f Bx x k k +=+)()1( ( 1,0=k ),使得向量序列}{)(k x 收敛于方程组的精确解.(1)输入1,,,,)0(=k n xb A ε,. (2) )(1,1)0()1(∑≠=-=n j i i j ij i iii x a b a x )1,0(n i = (3)判断 ε≤--≤≤)0()1(10max i i n i x x ,若是,输出1)1(2)1(1,,n x x x ,若否,置1+=k k ,)1()0(i i x x =,)2,1(n i =。

数值分析5LU分解法

数值分析5LU分解法

数值分析5LU分解法LU分解法是一种常用的数值分析方法,用于解线性方程组。

本文将详细介绍LU分解法的原理、算法步骤、优缺点以及应用领域,以期能够全面地掌握这一方法。

一、LU分解法原理LU分解法是将一个方程组的系数矩阵A分解为两个矩阵L和U的乘积的形式,其中L是下三角矩阵,U是上三角矩阵,通过分解可以简化方程组的求解过程。

LU分解法的基本思想是将原始方程组Ax=b分解为Ly=b和Ux=y两个方程组,其中L和U是通过A分解得到的矩阵。

二、算法步骤1.首先,将系数矩阵A分解为两个矩阵L和U。

L是下三角矩阵,主对角线元素均为1,而U是上三角矩阵。

2.然后,将原始方程组Ax=b转化为Ly=b,求解y的值。

3.最后,将解y代入Ux=y,求解x的值,即可得到方程组的解。

三、算法优缺点1.优点:LU分解法将原始方程组的系数矩阵分解为两个形式简单的矩阵,简化了方程组的求解过程。

对于重复使用系数矩阵A的情况,只需要进行一次LU分解,然后根据新的b值求解新方程组,提高了计算效率。

2.缺点:LU分解法需要进行矩阵分解计算,计算量较大,因此对于规模较大的方程组计算效率较低。

此外,当系数矩阵A存在奇异性或病态时,LU分解法可能会失败。

四、应用领域LU分解法在科学计算领域有着广泛的应用,特别是在求解线性方程组方面。

例如,在工程领域中,常需要通过数值方法求解复杂的结构力学问题,此时可以使用LU分解法求解由有限元方法离散得到的大规模线性方程组。

另外,LU分解法还可以用于解非线性方程组、求逆矩阵、计算矩阵的行列式等。

总结:LU分解法是一种常用的数值分析方法,用于求解线性方程组。

通过将系数矩阵A分解为两个矩阵L和U的乘积形式,可以简化方程组的求解过程。

LU分解法的优点是提高了方程组的求解效率,适用于重复使用系数矩阵A的情况。

然而,LU分解法也存在一定的缺点,如计算量较大、对奇异性和病态问题的处理较为困难。

LU分解法在科学计算领域有着广泛的应用,可以用于求解工程问题中的大规模线性方程组,解非线性方程组,求逆矩阵等。

高斯消元法与LU分解法的比较及应用

高斯消元法与LU分解法的比较及应用

高斯消元法与LU分解法的比较及应用在数学领域中,解线性方程组是一个基本问题。

对于大多数初学者来说,最容易理解的方法可能就是高斯消元法。

而在高等数学领域中,还有一种更为高效的方法——LU分解法。

本文将介绍高斯消元法和LU分解法的基本原理及其比较,同时概述它们的应用。

一、高斯消元法高斯消元法是解线性方程组的最基本方法之一,它的基本思路是通过列主元消元的方法,将n个未知数的线性方程组化为上三角矩阵,然后反向代入求解。

具体而言,它通过如下的几个步骤来求解线性方程组:1、将线性方程组的增广矩阵写成方程组形式2、选取主元(即该列中绝对值最大的元素),并通过消元操作将该列其余元素化为03、重复上述操作,直至整个矩阵化为上三角矩阵4、用反向代入法依次求解出各个未知数的值高斯消元法是非常直观和易于理解的方法,在实际应用中得到了广泛的应用。

然而,它还是存在一些问题的。

首先,高斯消元法并不能很好地解决出现多解或无解问题的情况。

其次,在消元的过程中,如果主元为0,则需要进行行交换操作,这样可以影响运算的速度和精度。

此外,如果对于某些系数矩阵较为复杂的线性方程组,高斯消元法往往会受到很大的计算压力,从而导致求解效率低下。

二、LU分解法LU分解法是线性代数领域中一种非常重要的分解方法。

它将原始矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积。

公式如下:A=LU其中,A为原始矩阵,L为下三角矩阵,U为上三角矩阵。

LU分解法的基本思路是,将原始矩阵进行消元操作,得到一个下三角矩阵L和一个上三角矩阵U,使原始矩阵A=LU,然后将Ax=b的线性方程组化为Ly=b和Ux=y两个方程组,以此求解出x。

LU分解法的优点在于:1、通过将矩阵分解成上下三角矩阵,可以避免了高斯消元法的行交换操作,从而更具有稳定性2、统计证明,LU分解法的耗时低于高斯消元法,可以更快地求解出结果3、LU分解法可以非常方便地求解一个系数矩阵不变的多个线性方程组,从而节约了计算时间需要注意的是,LU分解法对于原始矩阵A的限制要比高斯消元法要严格。

lu分解原理

lu分解原理

LU分解是一种矩阵分解方法,可以将一个矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积。

这种分解方法在数值计算中非常常用,可以用于求解线性方程组、求矩阵的行列式和逆矩阵等问题。

LU分解的原理比较简单,本文将对其进行详细介绍。

1. LU分解的定义LU分解是将一个矩阵A分解为一个下三角矩阵L和一个上三角矩阵U的乘积的过程,即A=LU。

其中,L是一个下三角矩阵,U是一个上三角矩阵。

下三角矩阵指除主对角线及其上方的元素外,其他元素均为0的矩阵;而上三角矩阵则是指除主对角线及其下方的元素外,其他元素均为0的矩阵。

2. LU分解的实现方法LU分解的实现方法有很多种,这里我们介绍其中的高斯消元法和克洛内克积分法。

(1)高斯消元法高斯消元法是一种经典的线性代数求解方法,它可以通过不断消元来把一个矩阵变成一个上三角矩阵。

具体来说,高斯消元法的过程如下:①首先将待分解的矩阵A赋值给一个新的矩阵U。

②初始化一个下三角矩阵L为单位矩阵。

③从第一行开始,对每一行做如下操作:a. 将该行的第一个非零元素除以该元素所在的系数,使其成为1。

b. 将该行的第一个元素下方的所有元素消为0,即对该行下面的所有行做如下操作:i. 将该行下面的行的第一个元素除以当前行第一个元素的值,使其变成0;ii. 将当前行乘以该行第一个元素的值,减去该行下面的行。

④最终得到的矩阵U就是原矩阵A的上三角矩阵,而L则是通过每一次操作中的系数变换所得到的下三角矩阵。

(2)克洛内克积分法克洛内克积分法是一种比较高效的LU分解方法,它采用矩阵的Kronecker积来进行分解。

具体来说,克洛内克积分法的过程如下:①首先将待分解的矩阵A赋值给一个新的矩阵U。

②将下三角矩阵L初始化为单位矩阵。

③对于每一列j,做如下操作:a. 将矩阵U的第j列中j行及其下方的元素除以U(j,j),使U(j,j)为1。

b. 将矩阵U的第j列下方的所有元素消为0,即对该列下面的所有列做如下操作:i. 将该列下面的列的第j行的元素除以当前列第j 行的元素值,使其变成0;ii. 将当前列乘以该列第j行的元素值,减去该列下面的列。

lu分解迭代求精法matlab

lu分解迭代求精法matlab

LU分解迭代求精法是一种经典的数值计算方法,在MATLAB中的应用也非常广泛。

LU分解迭代求精法的核心思想是将矩阵分解为一个下三角矩阵和一个上三角矩阵的乘积,并通过迭代逐步求解线性方程组,从而得到更加精确的解。

在这篇文章中,我将以从简到繁、由浅入深的方式来探讨LU分解迭代求精法在MATLAB中的应用,以便读者能够更深入地理解这一经典的数值计算方法。

让我们来了解一下LU分解迭代求精法的基本原理。

LU分解是将一个矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积,即A=LU。

在MATLAB中,可以通过lu函数来实现LU分解,具体的语法是[L,U]=lu(A)。

得到L和U之后,就可以通过迭代的方式逐步求解线性方程组Ax=b,从而得到精确的解。

在MATLAB中,可以使用迭代法来求解线性方程组,常见的迭代方法包括雅可比法、高斯-赛德尔法等。

接下来,让我们来看一个简单的例子,来说明LU分解迭代求精法在MATLAB中的应用。

假设有一个线性方程组Ax=b,其中矩阵A是一个3x3的矩阵,向量b是一个3维的列向量。

我们可以先通过lu函数将矩阵A分解为下三角矩阵L和上三角矩阵U,然后利用迭代方法逐步求解线性方程组。

这样就可以得到精确的解x。

在实际应用中,LU分解迭代求精法在MATLAB中的应用非常广泛。

它不仅可以用于求解线性方程组,还可以用于求解矩阵的逆、计算行列式等。

由于MATLAB自带了丰富的数值计算函数和工具箱,因此可以非常方便地实现LU分解迭代求精法,并得到高精度的数值结果。

LU分解迭代求精法是一种经典的数值计算方法,在MATLAB中有着广泛的应用。

通过对矩阵进行LU分解,然后利用迭代方法逐步求解线性方程组,可以得到更加精确的数值解。

在实际应用中,我们可以利用MATLAB提供的丰富函数和工具箱,非常方便地实现LU分解迭代求精法,并得到高精度的数值计算结果。

对于个人而言,我认为掌握LU分解迭代求精法在MATLAB中的应用是非常重要的。

gauss seidel迭代法

gauss seidel迭代法

Gauss Seidel迭代法简介Gauss Seidel迭代法是一种用于求解线性方程组的迭代算法。

它是Jacobi迭代法的改进版本,通过逐次更新未知数的估计值,逐渐逼近方程组的精确解。

本文将详细介绍Gauss Seidel迭代法的原理、算法步骤以及应用领域。

原理Gauss Seidel迭代法基于以下原理:对于线性方程组Ax = b,其中A是一个n×n 的矩阵,x和b是n维向量。

我们可以将矩阵A分解为L、D和U三个矩阵的和,其中L是A的下三角部分(不包括对角线),D是A的对角线部分,U是A的上三角部分(不包括对角线)。

则方程组可以重写为:(A = L + D + U)(L + D + U)x = b(L + D)x + Ux = b将上式中的x视为已知量,将(L + D)x视为已知量的估计值,我们可以得到迭代公式:x^(k+1) = -D^(-1)(Lx^(k+1) + Ux^(k)) + D^(-1)b其中,x(k)表示第k次迭代的估计值,x(k+1)表示第(k+1)次迭代的估计值,D^(-1)表示矩阵D的逆矩阵。

算法步骤Gauss Seidel迭代法的算法步骤如下:1.初始化估计值向量x^(0)为任意非零向量。

2.根据迭代公式计算x^(k+1)。

3.判断是否满足终止条件,如果满足则停止迭代,输出x^(k+1)作为线性方程组的近似解;否则,令k=k+1,返回第2步。

终止条件通常有以下几种方式: - 迭代次数达到预设的最大值。

- 两次迭代之间的误差小于预设的阈值。

- 迭代估计值与精确解之间的误差小于预设的阈值。

应用领域Gauss Seidel迭代法在科学计算和工程领域有广泛的应用。

下面列举了一些常见的应用领域:电力系统分析Gauss Seidel迭代法可以用于电力系统的潮流计算。

潮流计算是电力系统分析的基础,用于确定电力系统各节点的电压幅值和相角。

通过迭代计算节点电压,可以实现电力系统的稳态分析和潮流优化。

解线性方程组的列主元素高斯消去法和lu分解法

解线性方程组的列主元素高斯消去法和lu分解法

数值试验报告分析一、实验名称:解线性方程组的列主元素高斯消去法和LU 分解法二、实验目的及要求:通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。

三、算法描述:本次试验采用的是高斯列主元消去法和LU 分解法求解线性方程组的解。

其中,高斯消去法的基本思想是避免接近于零的数作分母;能进行到底的条件:当A 可逆时,列主元Gauss(高斯)消去法一定能进行到底。

优点:具有很好的数值稳定性;具有与顺序Gauss 消去法相同的计算量。

列主元Gauss(高斯)消去法的精度显著高于顺序Gauss(高斯)消去法。

注意:省去换列的步骤,每次仅选一列中最大的元。

矩阵的三角分解法是A=LU,L 是下三角阵,U 是上三角阵,Doolittle 分解:L 是单位下三角阵,U 是上三角阵;Crout 分解:L 是下三角阵,U 是单位上三角阵。

矩阵三角分解的条件 是矩阵A 有唯一的Doolittle 分解的充要条件是A 的前n-1顺序主子式非零;矩阵A 有唯一的Crout 分解的充要条件是A 的前n-1顺序主子式非零。

三角分解的实现是通过(1)Doolittle 分解的实现; (2)Doolittle 分解的缺点:条件苛刻,且不具有数值稳定性。

(3)用Doolittle 分解求解方程组: AX=b LUX=b LY=bA=LU UX=Y ;四、实验内容:解下列两个线性方程组(1) ⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x (2) ⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x a 、用你熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量x.b 、将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x及detA,并与(1)中结果比较。

Jacobi 迭代法与Gauss-Seidel迭代法算法比较

Jacobi 迭代法与Gauss-Seidel迭代法算法比较

Jacobi 迭代法与Gauss-Seidel迭代法算法比较目录1 引言 (1)1.1Jacobi迭代法 (2)1.2Gauss-Seidel迭代法 (2)1.3逐次超松弛(SOR)迭代法 (3)2算法分析 (3)3 结论 (5)4 附录程序 (5)参考文献 (8)Jacobi 迭代法与Gauss-Seidel 迭代法比较1 引言解线性方程组的方法分为直接法和迭代法,直接法是在没有舍入误差的假设下,能在预定的运算次数内求得精确解,而迭代法是构造一定的递推格式,产生逼近精确值的序列。

这两种方法各有优缺点,直接法普遍适用,但要求计算机有较大的存储量,迭代法要求的存储量较小,但必须在收敛性得以保证的情况下才能使用。

对于高阶方程组,如一些偏微分方程数值求解中出现的方程组,采用直接法计算代价比较高,迭代法则简单又实用,所以比较受工程人员青睐。

迭代法求解方程组就是构造一个无限的向量序列,使它的极限是方程组的解向量。

即使计算机过程是精确的,迭代法也不能通过有限次算术运算求得方程组的精确解,而只能逐步逼近它。

因此迭代法存在收敛性与精度控制的问题。

迭代法是常用于求解大型稀疏线性方程组(系数矩阵阶数较高且0元素较多),特别是某些偏微分方程离散化后得到的大型稀疏方程组的重要方法。

设n 元线性微分方程组b Ax = (1)的系数矩阵A 非奇异,右端向量0≠b ,因而方程组有唯一的非零解向量。

而对于这种线性方程组的近似解,前辈们发展研究了许多种有效的方法,有Jacobi 迭代法、Gauss —Seidel 迭代法,逐次超松弛迭代法(SOR 法),这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A 分解成两个矩阵N 和P 的差,即P N A -=;其中N 为可逆矩阵,线性方程组(1)化为:b x P N =-)(b Px Nx +=b N Px N x 11--+=可得到迭代方法的一般公式:d Gx xk k +=+))1(( (2)其中:P N G 1-=,b N d 1-=,对任取一向量)0(x 作为方程组的初始近似解,按递推公式产生一个向量序列)1(x ,)2(x ,...,)k x(,...,当k 足够大时,此序列就可以作为线性方程组的近似解。

数值计算实验报告----LU分解、追赶法、迭代法(高斯-赛德尔Gauss_Seidel、雅。。。

数值计算实验报告----LU分解、追赶法、迭代法(高斯-赛德尔Gauss_Seidel、雅。。。

数值计算实验报告----LU分解、追赶法、迭代法(⾼斯-赛德尔Gauss_Seidel、雅。

数值实验报告----------------------个⼈作业,如果有后辈的作业习题⼀致,可以参考学习,⼀起交流,请勿直接copy⼀、实验⽬的1. 了解并分析LU分解法的优点;2. 追赶法的应⽤与其与LU分解法的对⽐;3. 认识迭代法收敛的含义以及迭代法初值和⽅程组系数矩阵性质对收敛速度的影响。

⼆、实验题⽬三、实验原理l LU分解:·如果对A(0)x = b(0)施⾏第⼀次消元后化为A(1)x = b(1),则存在L1,使得L1A(0)=A(1),L1b(0)= b(1)⼀般地,进⾏k次消元化后为A(k)x = b(k), 则有L k A(k-1)=A(k),L k b(k-1)= b(k)重复这⼀过程,最后得到L n-1…L2L1A(0) = A(n-1)L n-1…L2L1b(0) = b(n-1)将上三⾓形矩阵A(n-1)记为U,则 A=LU ,其中为下三⾓矩阵。

利⽤⾼斯消元法实质上产⽣了⼀个将A分解为两个三⾓形矩阵相乘的因式分解,称为A的三⾓形分解或LU分解。

·矩阵分解不⼀定采⽤⾼斯消元法,以下为直接计算的计算公式:把增⼴矩阵A 采⽤LU 分解格式,即可得到与原⽅程同解的⽅l 追赶法:求解Ax = b 等价于解两个⼆对⾓线⽅程组Ly = bUx =y⾃上⽽下解⽅程组Ly = b 形象地被称为“追”。

y1 = b1/l11y i =b i-l ii-1y i-1/l ii, i = 2, 3, … ,n⾃下⽽上解⽅程组Ux = y 形象地被称为“赶”。

x n=y nx i =y i-u ii+1x i+1, i = n-1, … ,2,1习惯上,上述求解⽅法称为“追赶法”。

l 迭代法:·雅克⽐迭代雅克⽐迭代法基本思想与迭代法相同是⼀种逐次逼近的⽅法。

⾸先给定⼀个较粗糙的初值,然后采⽤迭代公式,进⾏多次迭代,直到满⾜所要求的精度为⽌。

高斯消元法与lu分解的关系

高斯消元法与lu分解的关系

高斯消元法与lu分解的关系高斯消元法和LU分解都是解线性方程组的常用方法。

它们之间有密切的关系。

高斯消元法是一种基于初等变换的方法,用于将系数矩阵化为上三角矩阵。

具体来说,它通过一系列的初等行变换,将线性方程组的系数矩阵变换成上三角矩阵,并相应地将常数向量进行变换,最后利用回代法求解得到方程组的解集。

然而,高斯消元法的一个重要问题是,它的计算复杂度随着矩阵规模的增加而增加,因为在消元的过程中涉及到许多除法运算。

对于大规模稠密矩阵,高斯消元法需要大量的计算时间和存储空间,往往不太实用。

LU分解是一种更加高效的方法,它将系数矩阵分解为一个下三角矩阵L和一个上三角矩阵U的乘积。

通过LU分解,可以将线性方程组的求解转化为两个步骤:首先用前代法求出L*y=b的解y,然后再用回代法求出U*x=y的解x。

LU分解的主要优点在于,它只需要进行一次分解操作,之后就可以快速地求解多个不同的常数向量的线性方程组。

LU分解和高斯消元法之间存在着明显的联系。

事实上,高斯消元法就是LU分解的一种特殊情况。

当系数矩阵A可以分解为A=L*U时,高斯消元法可以分解为以下两个步骤:(1)进行LU分解,将矩阵A分解为L和U的乘积。

(2)利用前代回代法求解Ly=b和Ux=y。

从这个角度来看,高斯消元法就是LU分解的一个实现方式。

相比于直接使用LU分解,高斯消元法的计算复杂度较高,但是它的实现比较简单,因此在某些特殊情况下仍然具有较高的实用性。

综上所述,高斯消元法和LU分解都是解线性方程组的常用方法,它们之间存在着密切的关系。

高斯消元法是LU分解的一种特殊情况,可以通过LU分解来更加高效地求解线性方程组。

因此,在实际应用中,我们需要根据具体情况选择合适的方法来求解线性方程组,以获得更好的计算效率。

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

lu分解法、列主元高斯法、jacobi迭代法、gaussseidel法的原理及matlab程序

一、实验目的及题目1.1 实验目的:(1)学会用高斯列主元消去法,LU 分解法,Jacobi 迭代法和Gauss-Seidel 迭代法解线性方程组。

(2)学会用Matlab 编写各种方法求解线性方程组的程序。

1.2 实验题目:1. 用列主元消去法解方程组:1241234123412343421233234x x x x x x x x x x x x x x x ++=⎧⎪+-+=⎪⎨--+=-⎪⎪-++-=⎩2. 用LU 分解法解方程组,Ax b =其中4824012242412120620266216A --⎛⎫⎪-⎪= ⎪ ⎪-⎝⎭,4422b ⎛⎫ ⎪ ⎪= ⎪- ⎪-⎝⎭ 3. 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解方程组:1232341231234102118311210631125x x x x x x x x x x x x x -+=-⎧⎪-+=-⎪⎨-+=⎪⎪-+-+=⎩二、实验原理、程序框图、程序代码等2.1实验原理2.1.1高斯列主元消去法的原理Gauss 消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式:1111221122222n n n n nn n nb x b x b x g b x b x g b x g +++=⎧⎪++=⎪⎨⎪⎪=⎩这个过程就是消元,然后再回代就好了。

具体过程如下: 对于1,2,,1k n =-,若()0,k kk a ≠依次计算()()(1)()()(1)()()/,,1,,k k ik ik kk k k k ij ij ik kjk k k i i ik k m a a a a m a b b m b i j k n++==-=-=+然后将其回代得到:()()()()()1/()/,1,2,,1n n n n nn n k k k k k kj j kk j k x b a x b a x a k n n =+⎧=⎪⎨=-=--⎪⎩∑以上是高斯消去。

lu分解法 高斯消元法

lu分解法 高斯消元法

lu分解法高斯消元法以"LU分解法与高斯消元法"为标题的文章一、引言在线性代数中,矩阵的分解方法是解决线性方程组的重要工具之一。

LU分解法和高斯消元法是两种常用的矩阵分解方法。

本文将介绍这两种方法的原理和应用。

二、高斯消元法高斯消元法是一种将线性方程组转化为阶梯形矩阵的方法。

其基本思想是通过一系列的行变换将方程组化为上三角形式,从而求解出方程组的解。

具体步骤如下:1. 首先,将线性方程组的系数矩阵与常数向量合并成增广矩阵。

2. 选取主元素,即矩阵的第一行第一列元素作为主元素。

3. 通过行变换,将主元素下方的元素全部消为零。

4. 选取下一个主元素,重复步骤3,直到将矩阵转化为上三角形式。

5. 反向代入,求解出方程组的解。

高斯消元法的优点是简单易懂,适用于小规模的线性方程组。

然而,当方程组的规模较大时,高斯消元法的计算量会很大,效率较低。

三、LU分解法LU分解法是一种将矩阵分解为下三角矩阵和上三角矩阵的方法。

其基本思想是通过一系列的行变换将矩阵分解为一个下三角矩阵和一个上三角矩阵,从而求解出方程组的解。

具体步骤如下:1. 首先,将线性方程组的系数矩阵进行LU分解,得到一个下三角矩阵L和一个上三角矩阵U。

2. 将方程组Ax=b转化为LUx=b,令y=Ux,则Ly=b。

3. 解得Ly=b,再解得Ux=y,即可求得方程组的解。

LU分解法的优点是可以重复使用LU分解的结果,适用于多次求解相同系数矩阵的线性方程组,提高了计算效率。

此外,LU分解法还可以用于求矩阵的行列式和逆矩阵等。

四、应用示例下面通过一个具体的例子来说明LU分解法和高斯消元法的应用。

考虑如下线性方程组:2x + 3y + z = 54x + 5y + 2z = 116x + 7y + 4z = 17我们可以使用高斯消元法将线性方程组转化为上三角形式。

通过一系列的行变换,得到如下增广矩阵:1 1.5 0.5 2.50 1 0.2 1.80 0 1 1然后,我们可以使用LU分解法对系数矩阵进行分解。

gauss seidel迭代法

gauss seidel迭代法

gauss seidel迭代法一、概述Gauss Seidel迭代法是一种求解线性方程组的方法,它是Jacobi迭代法的改进版。

与Jacobi迭代法不同的是,在Gauss Seidel迭代法中,每次更新未知数时,都使用该方程组中已经计算出来的最新值。

二、算法原理1.算法流程Gauss Seidel迭代法的算法流程如下:(1)设线性方程组为Ax=b,其中A为系数矩阵,b为常数向量;(2)初始化未知数向量x0;(3)对于每个未知数xi,使用已经计算出来的最新值更新它:xi(k+1)=(bi-Σ(aij*xj(k)))/aii;(4)重复执行步骤3直到收敛或达到最大迭代次数。

2.收敛性分析当系数矩阵A满足严格对角占优条件时,Gauss Seidel迭代法是收敛的。

严格对角占优条件指对于第i行,aii>Σ|aij|(j≠i)。

三、代码实现以下是使用Python实现Gauss Seidel迭代法的代码:```pythonimport numpy as npdef gauss_seidel(A, b, x0, max_iter=1000, tol=1e-6):n = len(b)x = x0.copy()for k in range(max_iter):for i in range(n):x[i] = (b[i] - np.dot(A[i,:i], x[:i]) - np.dot(A[i,i+1:], x0[i+1:])) / A[i,i]if np.linalg.norm(x - x0) < tol:return xx0 = x.copy()return x```四、示例应用以下是一个使用Gauss Seidel迭代法求解线性方程组的示例:$$\begin{cases} 3x_1-x_2+x_3=1 \\ 2x_1+4x_2+x_3=4 \\ -x_1+5x_2-2x_3=-5 \end{cases}$$将该方程组转化为矩阵形式得到:$$\begin{pmatrix} 3 & -1 & 1 \\ 2 & 4 & 1 \\ -1 & 5 & -2 \end{pmatrix}\begin{pmatrix} x_1 \\ x_2 \\ x_3\end{pmatrix}=\begin{pmatrix} 1 \\ 4 \\ -5 \end{pmatrix}$$ 使用Gauss Seidel迭代法求解该方程组的Python代码如下:```pythonA = np.array([[3, -1, 1], [2, 4, 1], [-1, 5, -2]])b = np.array([1, 4, -5])x0 = np.zeros(3)x = gauss_seidel(A, b, x0)print(x)```运行结果为:```[ 0.99999485 0.99999889 -1.00000148]```五、总结Gauss Seidel迭代法是一种求解线性方程组的有效方法,它在Jacobi 迭代法的基础上增加了每次更新未知数时使用已经计算出来的最新值的步骤,从而加速了收敛过程。

列主元高斯消去 LU分解 迭代法

列主元高斯消去  LU分解  迭代法

数学与信息科学学院实验报告课程名称:《数值计算方法》实验名称:数值积分实验类型:验证性■综合性□设计性□实验室名称:数学实验室班级学号: 090721学生姓名:任课教师(教师签名):成绩:实验日期:2012-4-27一、实验目的及题目熟悉线性方程组求解原理,运用列主消元高斯消去法,LU 分解法及Jacobi 迭代法与Gauss-Seidel 迭代法丢出线性方程的解 实验题目:1、用列主元消去法解方程组:⎪⎪⎩⎪⎪⎨⎧=-++--=+--=+-+=++4323331243432143214321421x x x x x x x x x x x x x x x2、用LU 分解法界方程组b Ax =,其中⎪⎪⎪⎪⎪⎭⎫ ⎝⎛--=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----=2244,1626622060121224121202448b A3、分别用jacobi 迭代法和gauss-seidel 迭代法求解方程组:⎪⎪⎩⎪⎪⎨⎧=+-+-=+--=+--=+-2511361021138112104321321432321x x x x x x x x x x x x x二、实验原理、程序框图、程序代码等实验原理:1、列主元高斯消去原理:每次消去中,选取每列的绝对值最大的元素作为消去对象并作为主元素。

然后换行使之变到主元位子上,在进行消元计算。

设)()(k k b x A =,确定第k 列主元所在位置k i ,在交换k i 行和k 行后,在进行消元。

根据矩阵理论,交换k i 和k 两个方程的位置,列主元素的消去过程相当于对交换后的新矩阵进行消元,即)1(,+=k k i k k A A I L k同时,右端向量)(k b 变化为 )1(,+=k k i k k b b I L k2、LU 分解原理:直接三角分解:先将A 分解为上三角矩阵U 和下三角矩阵L (A=LU ),则原为题等价于求解两个方程组:y Ux b Ly ==, 3、迭代法(1)jacobi 迭代法(又称简单迭代法) 考虑n 阶线性代数方程组⎪⎪⎩⎪⎪⎨⎧=+++=+++=+++nn nn n n n n n n b x a x a x a b x a x a x a b x a x a x a (22112)222212111212111其矩阵形式为b Ax =设该方程组的系数矩阵A 非奇异且),.....,2,1(0n i a ii =≠,可将A 分解为:U L D A --=其中],.....,,[2211nn a a a diag D =;-=L ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡000111313121n n n a a a a a a,U=-⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-0000,122311312n n n n a a a a a a然后化为如下等价形式b D x U L D x 11)(--++=简记为 J J f x B x += 选取初始向量[]Tnx x x x )0()0(2)0(1)0(, =,通过上式可得到线性代数方程组的迭代格式)2,1,0(,)()1( =+=+k f x B x J k J k其分量形式为 )2,1,0)(,2,1(),(111)1( ==-=∑≠=+k n i x a b a x nj i k j ij i ii k i 即⎪⎪⎪⎪⎩⎪⎪⎪⎪⎨⎧----=----=----=--+++)(1)(1)(1)(11,)(22)(11)1()(2)(323)(121222)1(2)(1)(313)(212111)1(1k n n n k n k n n nn k n k nn k k k k n n k k k x a x a x a b a x x a x a x a b a x x a x a x a b a x以上计算过程称迭代法,矩阵J B 陈为jacobi 迭代法的迭代矩阵。

雅克比迭代法和高斯-塞德尔迭代法(经典实用)

雅克比迭代法和高斯-塞德尔迭代法(经典实用)

雅克比迭代法和高斯-塞德尔迭代法(经典实用)雅克比迭代法和高斯-塞德尔迭代法都是求解线性方程组的经典方法,它们的基本思路是将矩阵分解为对角、上三角或下三角矩阵,然后通过迭代求解方程组。

以下将详细介绍这两种方法的原理和实现。

1. 雅克比迭代法雅克比迭代法是一种通过逐步迭代来求解线性方程组的方法。

假设有一个n*n的线性方程组Ax=b,其中A是一个对称正定矩阵。

将A分解为对角矩阵D、上三角矩阵U和下三角矩阵L的乘积,即A=D-L-U。

则可得到方程组的迭代格式如下:X_(k+1)=D^(-1)(L+U)X_k+D^(-1)b其中X_k为第k次迭代的解向量,D为A的对角矩阵,L为A的下三角矩阵,U为A的上三角矩阵。

雅克比迭代法的收敛条件为,当矩阵A是对称正定矩阵时,若其对角线元素都不为0,则Jacobi迭代法收敛。

此外,当矩阵A为对称正定矩阵时,雅克比迭代法还具有收敛速度快、实现简单等优点。

2. 高斯-塞德尔迭代法高斯-塞德尔迭代法是雅克比迭代法的改进。

其思路是每次计算时,直接用已知的最新值来更新解向量中未知量的值,从而加快迭代的速度。

具体来说,设有一个n*n的线性方程组Ax=b,方程组的迭代格式为:X_i+1= (b_i-a_i,i*X_i+1-a_i,i+1*X_i,+...-a_i,n*X_n) /a_i,i其中i表示求解方程组的第i个未知量,它的值是通过其他已知量的最新值来计算的。

3. 实用在实际应用中,雅克比迭代法和高斯-塞德尔迭代法在求解某些特定的线性方程组时往往比直接求解更具有优势。

例如,在求解非常大型的线性方程组时,直接求解的计算量很大,求解时间也很长。

而使用迭代法则可以大幅减少计算量和求解时间,提高求解效率。

此外,由于迭代法可以直观地呈现方程组的解向量随着迭代步数的变化情况,因此可以更快地检查迭代结果的趋势和误差范围。

总之,雅克比迭代法和高斯-塞德尔迭代法是求解线性方程组的两种有效方法,具有应用广泛、易于实现和迭代收敛速度快的优点。

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

一、实验目的及题目1.1 实验目的:(1)学会用高斯列主元消去法,LU 分解法,Jacobi 迭代法和Gauss-Seidel 迭代法解线性方程组。

(2)学会用Matlab 编写各种方法求解线性方程组的程序。

1.2 实验题目:1. 用列主元消去法解方程组:1241234123412343421233234x x x x x x x x x x x x x x x ++=⎧⎪+-+=⎪⎨--+=-⎪⎪-++-=⎩2. 用LU 分解法解方程组,Ax b =其中4824012242412120620266216A --⎛⎫ ⎪- ⎪= ⎪ ⎪-⎝⎭,4422b ⎛⎫ ⎪ ⎪= ⎪- ⎪-⎝⎭3. 分别用Jacobi 迭代法和Gauss-Seidel 迭代法求解方程组:1232341231234102118311210631125x x x x x x x x x x x x x -+=-⎧⎪-+=-⎪⎨-+=⎪⎪-+-+=⎩二、实验原理、程序框图、程序代码等2.1实验原理2.1.1高斯列主元消去法的原理Gauss 消去法的基本思想是一次用前面的方程消去后面的未知数,从而将方程组化为等价形式:1111221122222n n n n nn n nb x b x b x g b x b x g b x g +++=⎧⎪++=⎪⎨⎪⎪=⎩这个过程就是消元,然后再回代就好了。

具体过程如下: 对于1,2,,1k n =-,若()0,k kka ≠依次计算()()(1)()()(1)()()/,,1,,k k ik ik kk k k k ij ij ik kjk k k i i ik k m a a a a m a b b m b i j k n++==-=-=+然后将其回代得到:()()()()()1/()/,1,2,,1n n n n nn n k k k k k kj j kk j k x b a x b a x a k n n =+⎧=⎪⎨=-=--⎪⎩∑以上是高斯消去。

但是高斯消去法在消元的过程中有可能会出现()0k kka =的情况,这时消元就无法进行了,即使主元数()0,k kka ≠但是很小时,其做除数,也会导致其他元素数量级的严重增长和舍入误差的扩散。

因此,为了减少误差,每次消元选取系数矩阵的某列中绝对值最大的元素作为主元素。

然后换行使之变到主元位置上,再进行销元计算。

即高斯列主元消去法。

2.1.2直接三角分解法(LU 分解)的原理先将矩阵A 直接分解为A LU =则求解方程组的问题就等价于求解两个三角形方程组。

直接利用矩阵乘法,得到矩阵的三角分解计算公式为:1111111111,1,2,,/,2,,,,,1,,,2,3,()/,1,2,,i i i i k kj kj km mj m k ik ik im mk kkm u a i n l a u i nu a l u j k k n k nl a l u u i k k n k n-=-===⎧⎨==⎩⎧=-=+⎪⎪=⎨⎪=-=++≠⎪⎩∑∑且由上面的式子得到矩阵A 的LU 分解后,求解Ux=y 的计算公式为11111,2,3,/()/,1,2,,1i i i ij j j n n nn n i i ij j ii j i y b y b l y i nx y u x y u x u i n n -==+=⎧⎪⎨=-=⎪⎩=⎧⎪⎨=-=--⎪⎩∑∑以上为LU 分解法。

2.1.3Jacobi 迭代法和Gauss-Seidel 迭代法的原理 (1)Jcaobi 迭代设线性方程组b Ax = (1)的系数矩阵A 可逆且主对角元素nn a ,...,a ,a 2211均不为零,令 ()nn a ,...,a ,a diag D 2211=并将A 分解成()D D A A +-= (2) 从而(1)可写成()b x A D Dx +-= 令11f x B x +=其中b D f ,A D I B 1111--=-=. (3) 以1B 为迭代矩阵的迭代法(公式)()()111f x B x k k +=+ (4)称为雅可比(Jacobi)迭代法,其分量形式为⎩⎨⎧[],...,,k ,n ,...,i x a ba xnij j )k (j j i iii)k (i21021111==∑-=≠=+ (5)其中()()()()()Tn x ,...x ,x x 002010=为初始向量. (2)Gauss-Seidel 迭代由雅可比迭代公式可知,在迭代的每一步计算过程中是用()k x 的全部分量来计算()1+k x的所有分量,显然在计算第i 个分量()1+k i x 时,已经计算出的最新分量()()1111+-+k i k x ,...,x 没有被利用。

把矩阵A 分解成U L D A --= (6)其中()nna ,...,a ,a diag D 2211=,U ,L --分别为A 的主对角元除外的下三角和上三角部分,于是,方程组(1)便可以写成()b Ux x L D +=- 即22f x B x +=其中()()b L D f ,U L D B 1212---=-= (7)以2B 为迭代矩阵构成的迭代法(公式)()()221f x B x k k +=+ (8)称为高斯—塞德尔迭代法,用分量表示的形式为⎩⎨⎧[],...,,k ,n ,,i x a x a b a xi j n i j )k (j ij )k (j ij i ii)k (i21021111111==∑∑--=-=+=++2.2程序代码2.2.1高斯列主元的代码function Gauss(A,b) %A 为系数矩阵,b 为右端项矩阵 [m,n]=size(A); n=length(b); for k=1:n-1[pt,p]=max(abs(A(k:n,k))); %找出列中绝对值最大的数 p=p+k-1; if p>kt=A(k,:);A(k,:)=A(p,:);A(p,:)=t; %交换行使之变到主元位置上 t=b(k);b(k)=b(p);b(p)=t; endm=A(k+1:n,k)/A(k,k); %开始消元 A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n); b(k+1:n)=b(k+1:n)-m*b(k); A(k+1:n,k)=zeros(n-k,1); if flag~=0Ab=[A,b];endendx=zeros(n,1); %开始回代x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endfor k=1:nfprintf('x[%d]=%f\n',k,x(k));end2.2.2 LU分解法的程序function LU(A,b) %A为系数矩阵,b为右端项矩阵[m,n]=size(A); %初始化矩阵A,b,L和Un=length(b);L=eye(n,n);U=zeros(n,n);U(1,1:n)=A(1,1:n); %开始进行LU分解L(2:n,1)=A(2:n,1)/U(1,1);for k=2:nU(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); endL %输出L矩阵U %输出U矩阵y=zeros(n,1); %开始解方程组Ux=yy(1)=b(1);for k=2:ny(k)=b(k)-L(k,1:k-1)*y(1:k-1);endx=zeros(n,1);x(n)=y(n)/U(n,n);for k=n-1:-1:1x(k)=(y(k)-U(k,k+1:n)*x(k+1:n))/U(k,k);endfor k=1:nfprintf('x[%d]=%f\n',k,x(k));end2.2.3 Jacobi迭代法的程序function Jacobi(A,b,eps) %A为系数矩阵,b为后端项矩阵,epe为精度[m,n]=size(A);D=diag(diag(A)); %求矩阵DL=tril(A)-D; %求矩阵LU=triu(A)-D; %求矩阵Utemp=1;x=zeros(m,1);k=0;while abs(max(x)-temp)>epstemp=max(abs(x));k=k+1; %记录循环次数x=-inv(D)*(L+U)*x+inv(D)*b; %雅克比迭代公式endfor k=1:nfprintf('x[%d]=%f\n',k,x(k));end2.2.4Gauss-Seidel迭代程序function Gauss_Seidel(A,b,eps) %A为系数矩阵,b为后端项矩阵,epe为精度[m,n]=size(A);D=diag(diag(A)); %求矩阵DL=D-tril(A); %求矩阵LU=D-triu(A); %求矩阵Utemp=1;x=zeros(m,1);k=0;while abs(max(x)-temp)>epstemp=max(abs(x));k=k+1; %记录循环次数x=inv(D-L)*U*x+inv(D-L)*b; %Gauss_Seidel的迭代公式endfor k=1:nfprintf('x[%d]=%f\n',k,x(k));end三、实验过程中需要记录的实验数据表格3.1第一题(高斯列主元消去)的数据>> A=[1 1 0 3;2 1 -1 1; 3 -1 -1 3;-1 2 3 -1];>> b=[4;1;-3;4];>> Gauss(A,b)x[1]=-1.333333x[2]=2.333333x[3]=-0.333333x[4]=1.0000003.2第二题(LU分解法)数据>> A=[48 -24 0 -12;-24 24 12 12;0 6 20 2;-6 6 2 16];>> b=[4; 4;-2;-2];>> LU(A,b)L =1.0000 0 0 0-0.5000 1.0000 0 00 0.5000 1.0000 0-0.1250 0.2500 -0.0714 1.0000U =48.0000 -24.0000 0 -12.00000 12.0000 12.0000 6.00000 0 14.0000 -1.00000 0 0 12.9286x[1]=0.521179x[2]=1.005525x[3]=-0.375691x[4]=-0.2596693.3第三题Jacobi迭代法的数据>> A=[10 -1 2 0;0 8 -1 3;2 -1 10 0;-1 3 -1 11];b=[-11;-11;6;25];Jacobi(A,b,0.00005)x[1]=-1.467396x[2]=-2.358678x[3]=0.657604x[4]=2.8423973.4第三题用Gauss_Seidel迭代的数据>> A=[10 -1 2 0;0 8 -1 3;2 -1 10 0;-1 3 -1 11];>> b=[-11;-11;6;25];>> Gauss_Seidel(A,b,0.00005)x[1]=-1.467357x[2]=-2.358740x[3]=0.657597x[4]=2.842405四、实验中存在的问题及解决方案4.1存在的问题(1)第一题中在matlab中输入>> Gauss(A,b)(数据省略)得到m =4 n =4 ??? Undefined function or variable "Ab".Error in ==> Gauss at 8[ap,p]=max(abs(Ab(k:n,k)));没有得到想要的结果。

相关文档
最新文档