当前位置:文档之家› 线性方程组的几种求解方法

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

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

线性方程组的几种解法

线性方程组形式如下:

常记为矩阵形式

其中

一、高斯消元法

高斯(Gauss)消元法的基本思想是:通过一系列的加减消元运算,也就是代数中的加减消去法,将方程组化为上三角矩阵;然后,再逐一回代求解出x 向量。现举例说明如下:

(一)消元过程

第一步:将(1)/3使x 1的系数化为1 得

再将(2)、(3)式中x 1的系数都化为零,即由(2)-2×(1)(1)

)1(32)2( (03)

4

32=+x x )1(321)1(......23132=++

x x x

由(3)-4×(1)(1)

第二步:将(2)(1)

除以2/3,使x 2系数化为1,得

再将(3)(1)

式中x 2系数化为零,即 由(3)(1)

-(-14/3)*(2)(2)

,得

第三步:将(3)(2)

除以18/3,使x 3系数化为1,得

经消元后,得到如下三角代数方程组:

(二)回代过程

由(3)(3)

得 x 3=1, 将x 3代入(2)(2)

得x 2=-2, 将x 2 、x 3代入(1)(1)

得x 2=1 所以,本题解为[x]=[1,2,-1]T

(三)、用矩阵演示进行消元过程

第一步: 先将方程写成增广矩阵的形式

第二步:然后对矩阵进行初等行变换

初等行变换包含如下操作

(1) 将某行同乘或同除一个非零实数

)

3(3)3(......1-=x )2(3)3( (63)

18-=x )

2(32)

2(......02=+x x )

1(32)3( (63)

10

314-=--

x

x

(2)将某行加入到另一行

(3)将任意两行互换

第三步:将增广矩阵变换成上三角矩阵,即主对角线全为1,左下三角矩阵全为0,形式如下:

示例:

(四)高斯消元的公式

综合以上讨论,不难看出,高斯消元法解方程组的公式为

1.消元

(1)令

a ij(1) = a ij , (i,j=1,2,3,…,n)

b i(1) =b i , (i=1,2,3,…,n)

(2)对k=1到n-1,若a kk(k)≠0,进行

l ik = a ik(k) / a kk(k) , (i=k+1,k+2,…,n)

a ij(k+1) = a ij(k) - l ik * a kj(k), (i,j= k+1,k+2,…,n)

b i(k+1) = b i(k) - l ik * b k(k), (i= k+1,k+2,…,n)

2.回代

若a nn(n) ≠0

x n = b n(n) / a nn(n)

x i = (b i(i) – sgm(a ij(i) * x j)/- a ii(i),(i = n-1,n-2,…,1),( j = i+1,i+2,…,n )

(五)高斯消元法的条件

消元过程要求a ii(i) ≠0 (i=1,2,…,n),回代过程则进一步要求a nn(n) ≠0,但就方程组Ax=b 讲,a ii(i)是否等于0时无法事先看出来的。

注意A的顺序主子式D i(i=1,2,…,n),在消元的过程中不变,这是因为消元所作的变换是“将某行的若干倍加到另一行”。若高斯消元法的过程进行了k-1步(a ii(i) ≠0,i

这时计算的A(k)顺序主子式:

D1= a11(1)

D2= a11(1) a22(2)

……

D k= a11(1) a22(2)…a k,k(k)

有递推公式

D1= a11(1)

D i= D i-1 a ii(i)(i=2,3,…,n)

所以有

定理:高斯消元法消元过程能进行到底的充要条件是系数阵A的1到n-1阶的顺序主子式不为0。

(六)选主消元

因为在高斯消元的过程中,要做乘法和除法运算,因此会产生误差。当| a kk(k)|<<1,此时用它作除数。会导致其他元素数量级严重增加,带来误差扩散,使结果严重失真。

例如:

0.00001x1+x2 = 1.00001

2x1+x2 = 3

解:

代入得到x1=0,x2=1。显然,严重失真

换主元,将两行交换,如下,

代入得到x1=1,x2=1,答案正确。

总结:在消元的过程中,如果出现主元相差比较大的情况,应选择如下图方框中的最大数作为主元。甚至可以在整个矩阵中找最大数作为主元,但此时需要做列变换,要记住个分量的顺序。

(六)解的判断

设方程组的增广矩阵记为A,则A经过初等行变换可化为如下的阶梯形矩阵(必要是可重新排列未知量的顺序):

其中c ii≠0(i=1,2,…,r).于是可知:

(1).当d r+1=0,且r=n时,原方程组有唯一解.

(2).当d r+1=0,且r

(3).当d r+1≠0,原方程组无解.

二、LU分解法

求解线性代数方程组除了高斯消元法外,还常用LU分解法(三角形分解法)。LU分解法的优点是当方程组左端系数矩阵不变,仅仅是方程组右端列向量改变,即外加激励信号变化时,能够方便地求解方程组。

设n阶线性方程组Ax=b

假设能将方程组左端系数矩阵A,分解成两个三角阵的乘积,即A=LU ,式中,L为主对角线以上的元素均为零的下三角矩阵, 且主对角线元素均为1的上三角矩阵;U为主对角线以下的元素均为零。

所以有,LUx=b

令 Ux=y

则 Ly=b

由A=LU,由矩阵的乘法公式:

a 1j = u 1j , j=1,2,…,n a i1 = l i1u 11 , i=1,2,…,n

推出

u 1j = a 1j , j=1,2,…,n l i1 = a i1/u 11, i=1,2,…,n

这样就定出了U 的第一行元素和L 的第一列元素。

设已定出了U 的前k-1行和L 的前k-1列,现在确定U 的第k 行和L 的第k 列。由矩阵乘法:

当r>k 时,l kr =0, 且l kk =1,因为

所以,

同理可推出计算L 的第k 列的公式:

因此得到如下算法——杜利特(Doolittle )算法: (1) 将矩阵分解为A=LU,对k=1,2,…,n

???

?

??

???

=+=-=+=-=∑∑==1,...,1,/)(,...,1,111

kk n

r kk

rj kr ik ik n

r rj

kr kj kj l n k k i u u l a l n k k j u l a u :公式 (2) 解L y =b

∑-==-=1

1

,...,2,1:2k r r kr k k n

k y l b y 公式∑=+=-=n

r rj

kr kj kj n k k j u l a u 1

,...,1,∑=+=n

r rj

kr kj kj u l u a 1

∑=+=-=n

r kk

rj kr ik ik n

k k i u u l a l 1

,...,1,/)(∑==n

r rj

kr kj u l a 1

(3) 解U x =y

例:求解方程组

????

??

?

??=??????? ????????? ??4722

23940 1 15 618 9 6 25 6 9 2 6 2 4 2 4321x x x x 解:

由公式1得出

??????

?

??=??????

?

??=1

6 3 3 2 1

6 2 4 2,1 2 3 3

1 2 1 1 2 1 L U 于是化为两个方程组

???

???

? ??=??????? ????????? ?????????

??=??????? ????????? ??4321432143211 6 3 3 2 1

6 2 4 247222391 2 3 3 1 2 1 1 2 1

y y y y x x x x y y y y

利用公式2,3可解y=(9,5,3,-1)T ,x=(0.5,2,3,-1)T 三、应用 问题1:维他命的配方

维他命是一种好的药品,人们都需要摄入一定量的各种维生素,现在有若干种维他命,问能否利用这些维他命配制出适合人需求的各种维生素。

数据输入:

第一行:人们需补充的V(1<=V<=25) 种维生素。

第二行:V 个数,第i 个数为Vi ,表示人体对第i 种维生素的需求量。(1<=Vi<=1000) 第三行:已知的G (1<=G<=15) 种维他命。

以下G*V 的整数矩阵:第i 行第j 个数为Aij ,表示第i 种维他命中所含的第j 种维生素的含量(1<=Aij<=1000)。

数据输出:

∑+=-=-

=n

k r kk

r

kr k k n n k u x u

y x 1

1

,...,1,/)(3:公式

第一行:输出能否配制,若能输出Yes ,否则输出No

第二行:若能配制,则输出G 个整数,其中第i 个整数Gi ,表示第i 种维他命所取的数量,若有多种配置方案,输出一种即可。若不能配制,则第二行为空。

样例:

input.txt 4

100 200 300 400 4

50 50 50 50 30 100 100 100 20 50 150 250 50 100 150 200 output.txt Yes

1 1 1 0

分析:因为不知道每种维他命的数量,如果采用枚举,很难估计每种维他命的上界,而且时间复杂度很高,下面我们尝试用解方程的方法。

设需要配制的维他命每种数量分别为x 1,…x n ,其中n<=15,根据题意,可列出如下方程。

用高斯消元法求解:

这里,虽然x 4可取任意值,显然,表示x 4的数量与答案无关,因此x 4=0,代入,可得x 3=1, x 2=1, x 1=1,因此,原问题的解为(1,1,1,0)。

??????? ????→???????? ??????→????????

?????→???????? ????→???????? ??÷÷-?--÷÷÷÷ 0 0 0 0 01 1/2 1 0 0 10/7 5/7 3/7 1 04 2 1 2 10 0 0 0 02 1 2 0 010 5 3 7 04 2 1 2 14 2 4 0 02 1 2 0 04 2 1 2 110 5 3 7 08 4 5 2 16 3 3 2 14 2 1 2 110 5 2 3 5400 200 250 100 50300 150 150 100 50200 100 50 100 50100 50 20 30 502(3)7(2)2*(3)-(4))2((1))1(5)2()

2()4()2()3(50)4(50)3(50)2(10)1(交换与???

?

?

?

?

??=??????? ????????? ??400300200100 200 250 100 50 150 150 100 50 100 50 100 50 50 20 30 504321x x x x

问题2:虫食算(NOIP2005)

给出一个N (N<=26)进制的加法算式,如下:

ABCED

+ BDACE

EBBAA

其中有些是数字,有些是字母,字母可代表(1..N)中的任何一个数字,每个字母数字都不一样。

你的任务是,对于给定的N 进制加法算式,求出N个不同的字母分别导标的数字,使得该加法算式成立。输入数据保证有且仅有一组解。

【数据规模】

对于30%的数据,保证有N<=10;

对于50%的数据,保证有N<=15;

对于全部的数据,保证有N<=26。

分析:

显然,我们很容易想到如下算法,枚举N个未知数,由于每个未知数的取数值范围为0~n-1,共n种,因此时间复杂度为n n,又因为每个未知数的数值都不相同,因此时间复杂度为n!,由于n可达到26,这样做显然比较高,因此需要寻找其他解法。

仔细分析,上述思路的局限性在于没有充分利用加法等式这个条件。我们只要分析有没有进位,由于有N个变量因此可以列出N个方程,N个方程N个未知数,由于原问题有唯一解,因此方程应该有唯一解。

如上例,可得如下方程组:

D+E-A=x

1

E+C-A=x

1+x

2

C+A-B=x

2+x

3

B+D-B=x

3+x

4

A+B-E=x

4

其中x i属于0、1,枚举每个x i,则时间复杂度为,2n-1,用LU分解方程的时间为n2,当然这个时间复杂度还是较高,可以利用一些已知条件,确定一些x i的值,如A+0=A,显然不可能有进位等等,加入这样一些剪枝条件即可。

问题3:求最大异或值(SGU275)

给你n个非负整数A1,A2,……,A n集合,要你求出一个子集A i1,A i2,…,A ik (1<=i1

【数据规模】

(1<=n<=100,A i<=1018)

分析:

设用“⊕”表示XOR操作。将问题进行转换成,求序列x1,x2,…,x n,使得:(x1*A1) ⊕ (x2*A2)…⊕ (x n*A n)最大,

其中x i=0或1

由于XOR 操作时没有进位,所以我们把A1,…,A n的每个二进制位分离出来考虑。

设A i=a(i,0)*20+a(i,1)*21+…+a(i,k)*2k

可知,若答案的第k位是1,则

a(1,k)*x1⊕a(2,k)*x2⊕…⊕a(n,k)*x n=1

否则

a(1,k)*x1⊕a(2,k)*x2⊕…⊕a(n,k)*x n=0

由此,我们可以对答案进行枚举。首先设答案的最高为为1,得到一个方程,如果方程有解,则该位被确定为1,否则为0,继续枚举下面的每一位,直到每一位都确定为止。

因此时间复杂度为log2 (1018)*n2

例如n=3,{A i}={11,9,5}。首先我们把这三个数转成二进制,即:

(11)10=(1011)2;

(9)10=(1001)2;

(5)10=(0101)2

我们知道答案的最高位至多是第4位(也就是23位),我们设第4位为1,得到方程:x1⊕ x2=1 (1)

然后枚举第3位,设为1,得到方程:

x3=1 (2)

然后枚举第2位,设为1,得到方程:

x1=1 (3)

此时仍然可以将(1)(2)(3)联立而不发生矛盾,继续枚举最后一位,先设为1,得到方程:x1⊕x2⊕x3=1 (4)

用(1)(2)(3)的主元对(4)进行消元,得到:

0=1 (4)(1) 矛盾!可知(4)无法和前三个方程联立。

所以最低位不能为1,只能为0。这样我们就得到了答案(1110)2=(14)10

问题4: Puzzle(SGU260)

有N个格子,每个格子可能是黑色或者白色。目前有N种操作方式,第i种操作可以将,A i,1,A i,2,......,A i,ki这K i个格子的颜色同时改变。(从黑到白,或者从白到黑)现在给出N个格子的初始状态,与这N种操作。请你判断是不是可以通过N种操作,将所有格子变成同一种颜色。如果可以请输出一种方案。

【数据规模】

(1<=n<=200)

分析:

通过一定的分析,就可以知道本题可以表示成一个N元逻辑方程。首先可以明确的是同一个操作使用超过两次是没有意义的。因为一个操作被使用了两次相当于什么都没有改变,

于是可以:

设X i 表示第i 种操作是否使用。如果使用则值为真,不使用则为假。

我们先判断是不是可以将所有的格子的颜色都变成黑,变成白则可以类似处理。

对于每个格子i ,设可以将i 的格子颜色改变的操作有C 个,它们为B 1,B 2,…,B C 。若i 的初始颜色为黑,即我们不能让i 颜色改变,所以有:

False X X X X BC B B B =⊕⊕⊕⊕ (321)

若i 的初始颜色为白,则有:

True X X X X BC B B B =⊕⊕⊕⊕ (321)

总共有N 个格子,即N 个方程。有N 种操作,即N 个未知数。原问题就变成了判断N

元Xor 方程组有没有解的问题了,可以在O(N 3

)的时间复杂度内用高斯消元的方法解决。 问题5:Nikifor (Ural1041)

现在有M 个N 维向量P 1..P m ,你需要从中“购买”N 个向量,它们是线性无关的。同时每个向量有一个价格,在选出N 个向量的同时,要求价格和最小。

所谓N 个向量Q 1..Q n 线性无关,即对于其中任意N-1个向量(假设为Q1..Qn ),方程:

Q 1X 1+Q 2X 2+…+Q n-1X n-1 = Q n

没有实数解(X 1,X 2,…,X n-1)。

【数据规模】 M<=2000 N<=50

分析:

本题我们采用贪心的方法。首先将所有向量按照价格从小到大排序。

之后从价格小的向量开始依次检查,倘若已经购买了的向量无法表示出当前检查的向量,则此向量也需要购买,否则就不需要购买。若发现已经购买了n 个向量,就得到一组解,若检查完所有向量之后依然没有n 个向量,就表示无解。

贪心正确性的证明:

首先我们需要证明购买的若干个向量是线性无关的。

考虑用数学归纳法,假设购买的前t 个向量P 1..P t 是线性无关的,现在发现向量Q 也需要购买,我们证明P1..Pt,Q 也是线性无关的:

由于Q 需要购买,则方程P 1X 1+P 2X 2+…+P t X t = Q 无解。

假设结论不成立,即存在(Y 1,Y 2,..,Y t )使得P 1Y 1+P 2Y 2+..+P t-1Y t-1+QY t = P t , 那么若Y t =0,即P 1Y 1+P 2Y 2+..+P t-1Y t-1 = P t ,则与P 1..P t 是线性无关矛盾;

若Yt 不为0,于是有P 1(Y 1/Y t )+P 2(Y 2/Y t )+..+P t-1(Y t-1/Y t )-Pt(1/Y t ) = Q ,则与“方程P 1X 1+P 2X 2+…+P t X t = Q 无解”矛盾。

因此P1..Pt,Q 也是线性无关的。

因此前t+1个向量也是线性无关,于是命题得证。

此外还有一个问题,在贪心过程中每次遇到需要购买的向量,我们就马上购买,但会

不会造成之后无解呢?显然不会,下面我们再来证明一个结论:

设前t次购买的向量为P1..Pt,第t+1次购买的向量为P t+1,那么若存在一组可行解(P1,P2,…,P t,Q1,…,Q s),则一定会存在一组解(P1,P2,…,P t+1,W1,…,W k)。

证明:(P1,P2,…,P t,Q1,…,Q s)是可行解,则它们一定可以表示所有的向量。

设P1X1+P2X2+…+P t X t+Q1Y1+…+Q s Y s = P t+1,那么Y1..Y s不可能全为0。若全为0,则方程简化为P1X1+P2X2+…+P t X t = P t+1,但P1..P t+1是线性无关的,因此这是不可能的。

不妨设Ys不为0,那么我们只须将Qs替换为P t+1,则(P1,P2,…,P t+1,Q1,…Q s-1)同样也为可行解。

因此结论得到证明。

每次判断一个向量需不需要购买,实际上就是判断一个方程组有没有实数解,整个算法的时间复杂度为O(MN2)。

MATLAB代码 解线性方程组的迭代法

解线性方程组的迭代法 1.rs里查森迭代法求线性方程组Ax=b的解 function[x,n]=rs(A,b,x0,eps,M) if(nargin==3) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值elseif(nargin==4) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-A)*x0+b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 2.crs里查森参数迭代法求线性方程组Ax=b的解 function[x,n]=crs(A,b,x0,w,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1; %迭代过程 while(tol>eps) x=(I-w*A)*x0+w*b; n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x;

if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 3.grs里查森迭代法求线性方程组Ax=b的解 function[x,n]=grs(A,b,x0,W,eps,M) if(nargin==4) eps=1.0e-6;%eps表示迭代精度 M=10000;%M表示迭代步数的限制值 elseif(nargin==5) M=10000; end I=eye(size(A)); n=0; x=x0; tol=1;%前后两次迭代结果误差 %迭代过程 while(tol>eps) x=(I-W*A)*x0+W*b;%迭代公式 n=n+1;%n为最终求出解时的迭代步数tol=norm(x-x0); x0=x; if(n>=M) disp('Warning:迭代次数太多,可能不收敛!'); return; end end 4.jacobi雅可比迭代法求线性方程组Ax=b的解 function[x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200; elseif nargin<3 error return elseif nargin==5 M=varargin{1}; end D=diag(diag(A));%求A的对角矩阵 L=-tril(A,-1);%求A的下三角阵

常微分方程的解线性方程组的迭代法

实验五 解线性方程组的迭代法 【实验内容】 对1、设线性方程组 ?? ? ? ?? ? ? ?? ? ? ?? ? ? ??-=???????????????? ?????????????????? ? ?--------------------------211938134632312513682438100412029137264 2212341791110161035243120 536217758683233761624491131512 013012312240010563568 0000121324 10987654321x x x x x x x x x x ()T x 2,1,1,3,0,2,1,0,1,1*--= 2、设对称正定系数阵线性方程组 ?? ? ????? ??? ? ? ??---=????????????? ??????????????? ??---------------------4515229 23206019243360021411035204111443343104221812334161 2065381141402312122 00240424 87654321x x x x x x x x ()T x 2,0,1,1,2,0,1,1*--= 3、三对角形线性方程组

?? ? ?? ? ????? ??? ? ? ??----=???????????????? ?????????????????? ??------------------5541412621357410000000014100000000141000000001410000000014100000000141000000001410000000014100000000 14100000000 1410987654321x x x x x x x x x x ()T x 1,1,0,3,2,1,0,3,1,2*---= 试分别选用Jacobi 迭代法,Gauss-Seidol 迭代法和SOR 方法计算其解。 【实验方法或步骤】 1、体会迭代法求解线性方程组,并能与消去法加以比较; 2、分别对不同精度要求,如54310,10,10---=ε由迭代次数体会该迭代法的收敛快慢; 3、对方程组2,3使用SOR 方法时,选取松弛因子ω=0.8,0.9,1,1.1,1.2等,试看对算法收敛性的影响,并能找出你所选用的松弛因子的最佳者; 4、给出各种算法的设计程序和计算结果。 程序: 用雅可比方法求的程序: function [x,n]=jacobi(A,b,x0,eps,varargin) if nargin==3 eps=1.0e-6; M=200;

研究线性方程组迭代收敛速度

研究解线性方程组迭代收敛速度 一. 实验目的 科学研究与生产实践中许多问题都可归结为线性方程组的求解,高效求解线性方程组成为了许多科学与工程计算的核心.迭代法就是用某种极限过程去逼近线性方程组精确解的方法,该方法具有对计算机的存贮单元需求少,程序计算简单,原始系数矩阵在计算过程中不变等优点,是求解大型稀疏矩阵方程组的重要方法。常用的迭代法有Jacobi 迭代法、Gauss —seidel 迭代法、逐次超松驰法(SOR 法)等。 二. 实验摘要 由迭代法平均收敛速度与渐进收敛速度的关系引入近似估计法,即通过对迭代平均收敛速度取对数,然后利用Mathematica 软件对其进行拟合,给出拟合函数,最终得到了Jacobi 迭代法、Gauss —seidel 法的平均收敛速度收敛到渐进收敛速度的近似收敛阶,以及逐次超松驰法(SOR 法)的渐进收敛速度,且该法适用于其他迭代法收敛速度的估计。 三. 迭代法原理 1.Jacobi 迭代法(J 法) 设方程组b Ax =,其中, n n n n ij R a A ??∈=)(,。n R b x ∈, A 为可逆矩阵,可分裂为,U D L A ++=其中, ??????? ???? ???? ?=-00 00 1 ,21323121 n n n n a a a a a a L ΛO O M M ??????? ????? ??? ?=-00 0,1223 11312n n n n a a a a a a U M O O ΛΛ

??????? ? ???? ??? ?=nn a a a D O O 22 11 从而由b Ax =得到, b D x A D I b D x A D D b D x U L D x 111111)()()(------+-=+-=++-= 令 A D I B J 1--=, b D f J 1-=, 由此可构造出迭代公式:J k J k f x B x +=+)()1( 令初始向量)0,...,0,0()0(=x ,即可得到迭代序列,从而逼近方程组的解 这种方法称为Jacobi 迭代法,其中J B 称为Jacobi 迭代矩阵。 2. Gauss-Seidel 迭代法(GS 法) 与Jacobi 迭代法类似,将方程组b Ax =中的系数矩阵 A 分裂为 ,U D L A ++=,其中U L D ,,与前面相同。 与Jacobi 迭代法所不同的是,Gauss-Seidel 迭代法将Jacobi 迭代公式中的 b Ux Lx Dx k k k +--=+)()()1( 改为 b Ux Lx Dx k k k +--=++)()1()1( 从而b Ax =可写成矩阵形式 b Ux x D L k k +-=++)()1()(, 若设1 )(-+D L 存在,则 b D L Ux D L x k k 1)(1)1()()(--++++-=, 其中, U D L B G 1)(-+-=,b D L f 1)(-+=, 于是Gauss —Seidel 迭代公式的矩阵形式为f x B x k G k +=+)() 1(。

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

//解线性方程组 #include #include #include //----------------------------------------------全局变量定义区 const int Number=15; //方程最大个数 double a[Number][Number],b[Number],copy_a[Number][Number],copy_b[Number]; //系数行列式 int A_y[Number]; //a[][]中随着横坐标增加列坐标的排列顺序,如a[0][0],a[1][2],a[2][1]...则A_y[]={0,2,1...}; int lenth,copy_lenth; //方程的个数 double a_sum; //计算行列式的值 char * x; //未知量a,b,c的载体 //----------------------------------------------函数声明区 void input(); //输入方程组 void print_menu(); //打印主菜单 int choose (); //输入选择 void cramer(); //Cramer算法解方程组 void gauss_row(); //Gauss列主元解方程组 void guass_all(); //Gauss全主元解方程组 void Doolittle(); //用Doolittle算法解方程组 int Doolittle_check(double a[][Number],double b[Number]); //判断是否行列式>0,若是,调整为顺序主子式全>0 void xiaoqu_u_l(); //将行列式Doolittle分解 void calculate_u_l(); //计算Doolittle结果 double & calculate_A(int n,int m); //计算行列式 double quanpailie_A(); //根据列坐标的排列计算的值,如A_y[]={0,2,1},得sum=a[0][ A_y[0] ] * a[1][ A_y[1] ] * a[2][ A_y[2] ]=a[0][0]*a[1][2]*a[2][1]; void exchange(int m,int i); //交换A_y[m],A_y[i] void exchange_lie(int j); //交换a[][j]和b[]; void exchange_hang(int m,int n); //分别交换a[][]和b[]中的m和n 两行 void gauss_row_xiaoqu(); //Gauss列主元消去法 void gauss_all_xiaoqu(); //Gauss全主元消去法 void gauss_calculate(); //根据Gauss消去法结果计算未知量的值 void exchange_a_lie(int m,int n); //交换a[][]中的m和n列 void exchange_x(int m,int n); //交换x[]中的x[m]和x[n] void recovery(); //恢复数据 //主函数 void main() { int flag=1;

2021年常系数线性方程组基解矩阵的计算

常系数线性方程组基解矩阵的计算 欧阳光明(2021.03.07) 董治军 (巢湖学院数学系,安徽巢湖238000) 摘要:微分方程组在工程技术中的应用时非常广泛的,不少问题都归结于它的求解问题,基解矩阵的存在和具体寻求是不同的两回事,一般齐次线性微分方程组的基解矩阵是无法通过积分得到的,但当系数矩阵是常数矩阵时,可以通过方法求出基解矩阵,这时可利用矩阵指数exp A t,给出基解矩阵的一般形式,本文针对应用最广泛的常系数线性微分方程组,结合微分方程,线性代数等知识,讨论常系数齐次线性微分方程的基解矩阵的几个一般的计算方法. 关键词;常系数奇次线性微分方程组;基解矩阵;矩阵指数Calculation of Basic solution Matrix of Linear Homogeneous System with Constant Coefficients Zhijun Dong (Department of Mathematics,Chaohu CollegeAnhui,Chaohu) Abstract:Differential equations application in engineering technology is very extensive, when many problems are attributable to its solving problem, base solution matrix existence and specific seek is different things, general homogeneous linear differential equations is not the

数值计算_第4章 解线性方程组的迭代法

第4章解线性方程组的迭代法 用迭代法求解线性方程组与第4章非线性方程求根的方法相似,对方程组进行等价变换,构造同解方程组(对可构造各种等价方程组, 如分解,可逆,则由得到),以此构造迭代关系式 (4.1) 任取初始向量,代入迭代式中,经计算得到迭代序列。 若迭代序列收敛,设的极限为,对迭代式两边取极限 即是方程组的解,此时称迭代法收敛,否则称迭代法发散。我们将看到,不同于非线性方程的迭代方法,解线性方程组的迭代收敛与否完全决定于迭代矩阵的性质,与迭代初始值的选取无关。迭代法的优点是占有存储空间少,程序实现简单,尤其适用于大型稀疏矩阵;不尽人意之处是要面对判断迭代是否收敛和收敛速度的问题。 可以证明迭代矩阵的与谱半径是迭代收敛的充分必要条件,其中是矩阵的特征根。事实上,若为方程组的解,则有 再由迭代式可得到

由线性代数定理,的充分必要条件。 因此对迭代法(4.1)的收敛性有以下两个定理成立。 定理4.1迭代法收敛的充要条件是。 定理4.2迭代法收敛的充要条件是迭代矩阵的谱半径 因此,称谱半径小于1的矩阵为收敛矩阵。计算矩阵的谱半径,需要求解矩阵的特征值才能得到,通常这是较为繁重的工作。但是可以通过计算矩阵的范数等方法简化判断收敛的 工作。前面已经提到过,若||A||p矩阵的范数,则总有。因此,若,则必为收敛矩阵。计算矩阵的1范数和范数的方法比较简单,其中 于是,只要迭代矩阵满足或,就可以判断迭代序列 是收敛的。 要注意的是,当或时,可以有,因此不能判断迭代序列发散。

在计算中当相邻两次的向量误差的某种范数小于给定精度时,则停止迭代计算,视为方程组的近似解(有关范数的详细定义请看3.3节。) 4.1雅可比(Jacobi)迭代法 4.1.1 雅可比迭代格式 雅可比迭代计算 元线性方程组 (4.2) 写成矩阵形式为。若将式(4.2)中每个方程的留在方程左边,其余各项移到方程右边;方程两边除以则得到下列同解方程组: 记,构造迭代形式

Matlab线性方程组求解(Gauss消去法)

Matlab线性方程组求解 1. Gauss消元法: function x=DelGauss(a,b) % Gauss消去法 [n,m]=size(a); nb=length(b); det=1; %存储行列式值 x=zeros(n,1); for k=1:n-1 for i=k+1:n if a(k,k)==0 return end m=a(i,k)/a(k,k); for j=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); for k=n:-1:1 %回代求解 for j=k+1:n b(k)=b(k)-a(k,j)*x(j); end x(k)=b(k)/a(k,k);

end Example: >> A=[1.0170 -0.0092 0.0095;-0.0092 0.9903 0.0136;0.0095 0.0136 0.9898]; >> b=[1 0 1]'; >> x=DelGauss(A,b) x = 0.9739 -0.0047 1.0010 2. 列主元Gauss消去法: function x=detGauss(a,b) % Gauss列主元消去法 [n,m]=size(a); nb=length(b); det=1; %存储行列式值 x=zeros(n,1); for k=1:n-1 amax=0; %选主元 for i=k:n if abs(a(i,k))>amax amax=abs(a(i,k));r=i; end end if amax<1e-10 return; end if r>k %交换两行 for j=k:n

线性方程组的迭代解法(Matlab)

第六章线性方程组的迭代解法 2015年12月27日17:12 迭代法是目前求解大规模稀疏线性方程组的主要方法之一。包括定常迭代法和不定常迭代法,定常迭代法的迭代矩阵通常保持不变,包括有雅可比迭代法(Jacobi)、高斯-塞德尔迭代法(Gauss-Seidel)、超松弛迭代法(SOR) 1.雅可比迭代法(Jacobi) A表示线性方程组的系数矩阵,D表示A的主对角部分,L表示下三角部分,U表示上三角部分。 A=D+L+U 要解的方程变为Dx+Lx+Ux=b x=D^(-1)(b-(L+U)x) 所以Jocabi方法如下: Matlab程序 function [x,iter] =jacobi(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu(A); x=zeros(size(b)); for iter=1:500 x=D\(b+L*x+U*x); error=norm(b-A*x)/norm(b); if(error

总结求线性方程组的方法

总结求线性方程组的方法-标准化文件发布号:(9556-EUATWK-MWUB-WUNN-INNUL-DDQTY-KII

华北水利水电大学 总结求线性方程组的方法 课程名称:线性代数 专业班级: 成员组成: 联系方式: 2014年12月31日

摘要:线性方程组的求解是当代代数学中的一个重要组成部分。它广泛应用在数学以及其他领域。它与矩阵、线性变换、行列式、向量组的线性相关性,二次型,这些型之间有着相当密切的联系。线性方程组是线性代数中一个相当基础的内容必须要学会以及熟悉内容。本文章主要说明和讨论线性方程组的基本结构,然后应用克拉莫法则,高斯消元法来来求解。 关键词:线性方程组、高斯消元法、克拉莫法则; Summary for the method of liner equations Abstract: Solution of the system of linear equations is an important component part of algebra. It is widely used in mathematics and other areas. It and determinant, matrix, linear transformation, linear correlation vector group, quadratic form, has the close relation. System of linear equations is a very basic content in linear algebra must grasp and familiar with the content. This article mainly explain and discuss the basic structure of system of linear equations, then apply law of kramer, gauss elimination method to solve.

线性方程组的解法

线性方程组的解法 1 引言 在科学研究和大型工程设计中出现了越来越多的数学问题,而这些问题往往需要求数值解。在进行数值求解时,经离散后,常常归结为求解形如Ax= b的大型线性方程组。而如插值公式,拟合公式等的建立,微分方程差分格式的构造等,均可归结为求解线性方程组的问题.在工程技术的科学计算中,线性方程组的求解也是最基本的工作之一.因此,线性方程组的解法一直是科学和工程计算中研究最为普遍的问题,它在数值分析中占有极其重要的地位。20世纪50年代至70年代,由于电子计算机的发展,人们开始考虑和研究在计算机上用迭代法求线性方程组Ax =b的近似解,用某种极限过程去逐渐逼近精确解,并发展了许多非常有效的迭代方法,迭代法具有需要计算机存储单元少、程序设计简单、原始系数矩阵在计算过程中始终不变等优点。例如Jacobi方法、Gauss—Seidel 方法、SOR方法、SSOR 方法,这几种迭代方法是最常用的一阶线性定常迭代法。 2 主要算法 20世纪50年代至70年代,人们开始考虑和研究用迭代法求解线性方程组。 Ax = b (1) 的近似解,发展了许多有效的方法,其中有Jacobi方法、Gauss—Seidel方法,SOR方法、SSOR方法,这几种迭代方法均属一阶线性定常迭代法,即若系数矩阵A的一个分裂:A =M-N ;M 为可逆矩阵,线性方程组(1)化为: (M-N)X =b; →M X = NX + b; →X= M -1NX+ M-1b 得到迭代方法的一般公式: X(k+1)=HX(k)+d (2) 其中:H =MN-1,d=M-1b,对任意初始向量X(0) 一阶定常迭代法收敛的充分必要条件是: 迭代矩H的谱半径小于1,即ρ(H) < 1;又因为对于任何矩阵范数恒有ρ(H)≤‖H‖,故又可得到收敛的一个充分条件为:‖H‖< 1。 2.1 Jacobi迭代法 若D为A的对角素构成的对角矩阵,且对角线元素全不为零。系数矩阵A的一个分解:A =

解线性方程组的几种迭代算法

解线性方程组的几种迭代算法 内容摘要: 本文首先总结了分裂法解线性方程组的一些迭代算法,在此基础上分别通过改变系数矩阵A的分裂形式和对SSOR算法的改进提出了两种新的算法,并证明了这两种算法的收敛性.与其它方法相比,通过改变系数矩阵A的分裂形式得到的新算法具有更好的收敛性,改进的SSOR算法有了更快的收敛速度.最后通过数值实例验证了这两种算法在有些情况下确实可以更有效的解决问题. 关键词: 线性方程组迭代法算法收敛速度 Several kinds of solving linear equations iterative algorithm Abstract: In this paper, we firstly summarize some Iterative algorithms of Anti-secession law solution of linear equations. Based on these, two new algorithms are put forward by changing the fission form of coefficient matrix A and improving the algorithm of SSOR, and the convergence of the two algorithms is demonstrated. Compared with other methods, the new algorithm acquired by changing the fission form of coefficient matrix A is possessed of a better convergence. And the improved SSOR algorithm has a faster convergence speed. Finally, some numerical examples verify that the two algorithms can solve problems more effectively in some cases. Key words: Linear equations Iteration method algorithm Convergence speed

Gauss-Seidel迭代法求解线性方程组

一. 问题描述 用Gauss-Seidel 迭代法求解线性方程组 由Jacobi 迭代法中,每一次的迭代只用到前一次的迭代值。使用了两倍的存储空间,浪 费了存储空间。若每一次迭代充分利用当前最新的迭代值,即在计算第i 个分量) 1(+k i x 时, 用最新分量) 1(1 +k x ,???+) 1(2 k x ) 1(1 -+k i x 代替旧分量)(1k x ,???) (2 k x ) (1-k i x ,可以起到节省存储 空间的作用。这样就得到所谓解方程组的Gauss-Seidel 迭代法。 二. 算法设计 将A 分解成U D L A --=,则b x =A 等价于b x =--U)D (L 则Gauss-Seidel 迭代过程 ) ()1()1(k k k Ux Lx b Dx ++=++ 故 )()1()(k k Ux b x L D +=-+ 若设1 )(--L D 存在,则 b L D Ux L D x k k 1)(1)1()()(--+-+-= 令 b L D f U L D G 11)()(---=-=, 则Gauss-Seidel 迭代公式的矩阵形式为 f Gx x k k +=+)()1( 其迭代格式为 T n x x x x )()0()0(2)0(1)0(,,,???= (初始向量), )(1111 1 )() 1()1(∑∑-=-+=++--=i j i i j k j ij k j ij i ii i i x a x a b a x )210i 210(n k ???=???=,,,;,,, 或者 ?? ???--=???=???==?+=∑∑-=-+=+++) (1)210i 210(111 1)() 1()1()()1(i j i i j k j ij k j ij i ii i i i k i k i x a x a b a x n k k x x x ,,,;,,, 三. 程序框图

解线性方程组的直接解法

解线性方程组的直接解法 一、实验目的及要求 关于线性方程组的数值解法一般分为两大类:直接法与迭代法。直接法是在没有舍入误差的情况下,通过有限步运算来求方程组解的方法。通过本次试验的学习,应该掌握各种直接法,如:高斯列主元消去法,LU分解法和平方根法等算法的基本思想和原理,了解它们各自的优缺点及适用范围。 二、相关理论知识 求解线性方程组的直接方法有以下几种: 1、利用左除运算符直接求解 线性方程组为b x\ =即可。 A Ax=,则输入b 2、列主元的高斯消元法 程序流程图: 输入系数矩阵A,向量b,输出线性方程组的解x。 根据矩阵的秩判断是否有解,若无解停止;否则,顺序进行; 对于1 p :1- =n 选择第p列中最大元,并且交换行; 消元计算; 回代求解。(此部分可以参看课本第150页相关算法) 3、利用矩阵的分解求解线性方程组 (1)LU分解 调用matlab中的函数lu即可,调用格式如下: [L,U]=lu(A) 注意:L往往不是一个下三角,但是可以经过行的变换化为单位下三角。 (2)平方根法

调用matlab 中的函数chol 即可,调用格式如下: R=chol (A ) 输出的是一个上三角矩阵R ,使得R R A T =。 三、研究、解答以下问题 问题1、先将矩阵A 进行楚列斯基分解,然后解方程组b Ax =(即利用平方根法求解线性方程组,直接调用函数): ??????? ??--------=19631699723723312312A ,?????? ? ??-=71636b 解答: 程序: A=[12 -3 2 1;-3 23 -7 -3;2 -7 99 -6;1 -3 -6 19]; R=chol(A) b=[6 3 -16 7]'; y=inv(R')*b %y=R'\b x=inv(R)*y %x=R\y 结果: R =3.4641 -0.8660 0.5774 0.2887 0 4.7170 -1.3780 -0.5830 0 0 9.8371 -0.7085 0 0 0 4.2514 y =1.7321 0.9540 -1.5945 1.3940 x =0.5463 0.2023 -0.1385 0.3279 问题 2、先将矩阵A 进行LU 分解,然后解方程组b Ax =(直接调用函数): ?????????? ??----=8162517623158765211331056897031354376231A ,????????? ? ??-=715513252b

线性方程组的解法及其应用

线性方程组的解法及其应用 The solution of linear equation and its application 专业:测控技术与仪器 班级: 2010-1班 作者:刘颖 学号: 20100310110105

摘要 线性方程组是线性代数的一个重要组成部分,也在现实生产生活中有着广泛的运用,在电子工程、软件开发、人员管理、交通运输等领域都起着重要的作用。在一些学科领域的研究中,线性方程组也有着不可撼动的辅助性作用,在实验和调查后期利用线性方程组对大量的数据进行处理是很方便简捷的选择。本文主要围绕如何解线性方程组来进行讲解,对于不同类型的线性方程组的不同方法,并简述线性方程组的一些实际应用。 关键词: 齐次线性方程组,非齐次线性方程组,克莱姆法则,消元法,矩阵,矩阵的秩,特解,通解。

Abstract Linear equations linear algebra is one of the important component parts, and in real life has extensive production use,and it plays an important role in electronic engineering, software development, personnel management, transportation, etc. In some discipline study, it also has the reigns of linear equations of the auxiliary function.In experiment and survey using the linear equations of the late on the data processing is very convenient simple choice. This article, focusing on how to solve linear equations to explain, for different types of linear equations of different methods, and briefly introduces some of the practical application of linear equations. Keywords: Homogeneous linear equations, Non homogeneous linear equation,Clem’s law,Elimination method,Matrix,Rank of matrix,Special solution,General solution.

线性方程组的直接法和迭代法

线性方程组的直接法 直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。 线性方程组迭代法 迭代法就是用某种极限过程去逐步逼近线性方程组精确解的方法.该方法具有对计算机的存贮单元需求少,程序设计简单、原始系数矩阵在计算过程中不变等优点,是求解大型稀疏矩阵方程组的重要方法.迭代法不是用有限步运算求精确解,而是通过迭代产生近似解逼近精确解.如Jacobi 迭代、Gauss — Seidel 迭代、SOR 迭代法等。 1. 线性方程组的直接法 直接法就是经过有限步算术运算,无需迭代可直接求得方程组精确解的方法。 1.1 Cramer 法则 Cramer 法则用于判断具有n 个未知数的n 个线性方程的方程组解的情况。当方程组的系数行列式不等于零时,方程组有解且解唯一。如果方程组无解或者有两个不同的解时,则系数行列式必为零。如果齐次线性方程组的系数行列式不等于零,则没有非零解。如果齐次线性方程组有非零解,则系数行列式必为零。 定理1如果方程组Ax b =中0D A =≠,则Ax b =有解,且解事唯一的,解为1212,,...,n n D D D x x x D D D ===i D 是D 中第i 列换成向量b 所得的行列式。 Cramer 法则解n 元方程组有两个前提条件: 1、未知数的个数等于方程的个数。 2、系数行列式不等于零 例1 a 取何值时,线性方程组

1231231 2311x x x a ax x x x x ax ++=??++=??++=?有唯一解。 解:2111111 11011(1)11001 A a a a a a a ==--=--- 所以当1a ≠时,方程组有唯一解。 定理2当齐次线性方程组0Ax =,0A ≠时该方程组有唯一的零解。 定理3齐次线性方程组0Ax =有非零解0A <=>=。 1.2 Gauss 消元法 Gauss 消元法是线性代数中的一个算法,可用来为线性方程组求解,求出矩阵的秩,以及求出可逆方阵的逆矩阵。当用于一个矩阵时,高斯消元法会产生出一个“行梯阵式”。 1.2.1 用Gauss 消元法为线性方程组求解 eg :Gauss 消元法可用来找出下列方程组的解或其解的限制: ()()()123283211223x y z L x y z L x y z L +-=??--+=-??-++=-? 这个算法的原理是:首先,要将1L 以下的等式中的x 消除,然后再将2L 以下的等式中的y 消除。这样可使整个方程组变成一个三角形似的格式。之后再将已得出的答案一个个地代入已被简化的等式中的未知数中,就可求出其余的答案了。 在刚才的例子中,我们将132 L 和2L 相加,就可以将2L 中的x 消除了。

迭代法解线性方程组(C语言描述)

用Gauss-Seidel迭代法解线性方程组的C语言源代码:#include #include #include struct Line{ int L; struct Row *head; struct Line *next; }; struct Row{ int R; float x; struct Row *link; }; //建立每次迭代结果的数据存储单元 struct Term{ float x; float m; }; struct Line *Create(int Line,int Row){ struct Line *Lhead=NULL,*p1=NULL,*p2=NULL; struct Row*Rhead=NULL,*ptr1,*ptr2=NULL; int i=1,j=1; float X; while(i<=Line){ while(j<=Row+1){ scanf("%f",&X); if(X!=0||j==Row+1){ ptr1=(struct Row*)malloc(sizeof(Row)); if(ptr1==NULL){ printf("内存分配错误!\n"); exit(1); } ptr1->x=X; ptr1->R=j; if(ptr2==NULL){ ptr2=ptr1; Rhead=ptr1; } else{

ptr2->link=ptr1; ptr2=ptr1; } } j++; } if(ptr2!=NULL){ ptr2->link=NULL; ptr2=NULL; } if(Rhead!=NULL){ p1=(struct Line*)malloc(sizeof(Line)); if(p1==NULL){ printf("内存分配错误!\n"); exit(1); } p1->L=i; p1->head=Rhead; if(p2==NULL){ Lhead=p1; p2=p1; } else{ p2->next=p1; p2=p1; } } i++; Rhead=NULL; j=1; } if(p2!=NULL) p2->next=NULL; return Lhead; } struct Line *Change(struct Line*Lhead,int n){ struct Line*p1,*p2,*p3,*p; struct Row*ptr; int i=1,k,j; float max,t; if(Lhead==NULL){ printf("链表为空!\n");

线性方程组的迭代法

第六章 线性方程组的迭代法 一、教学目标及基本要求 通过对本节的学习,使学生掌握线性方程组的数值解法。 二、教学内容及学时分配 本节主要介绍线性方程组的数值解法,迭代公式的建立,迭代收敛性。 三、教学重点难点 1.教学重点:迭代公式的建立、迭代收敛性。 2. 教学难点:迭代收敛性。 四、教学中应注意的问题 多媒体课堂教学为主。适当提问,加深学生对概念的理解。 6.2 解线性方程组的迭代法 重要性:解线性代数方程组的有效方法在计算数学和科学计算中具有特殊的地位和作用。如弹性力学、电路分析、热传导和振动、以及社会科学及定量分析商业经济中的各种问题。在实际问题中产生的线性方程组的类型有很多,如按系数矩阵含零元素多少分类,有稠密和稀疏(零元素占80%以上)线性方程组之分;如按阶数的高低分类,有高阶(阶数在1000阶以上)中阶、(500~1000阶) 和低阶(500阶以下)线性方程组之分;如按系数矩阵的形状和性质分类,有对称正定、三对角、对角占优线性方程组之分。因为数值解法必须考虑方法的计算时间和空间效率以及算法的数值稳定性。因此,不同类型的线性方程组,其数值解法也不相同。但是,基本的方法可以归结为两大类,即直接法和迭代法。 分类:线性方程组的解法可分为直接法和迭代法两种方法。 (a) 直接法:对于给定的方程组,在没有舍入误差的假设下,能在预定的运算次数内求得精确解。最基本的直接法是Gauss 消去法,重要的直接法全都受到Gauss 消去法的启发。计算代价高。但实际计算中由于舍入误差的存在和影响,这种方法也只能求得线性方程组的近似解,如何避免舍入误差的增长是设计直接法时必须考虑的问题。 (b) 迭代法:基于一定的递推格式,产生逼近方程组精确解的近似序列。收敛性是其为迭代法的前提,此外,存在收敛速度与误差估计问题。迭代法要求方程组系数矩阵具有某种特殊形式(如对角占优阵),是解高阶稀疏矩阵方程组的重要方法。 §6.1 迭代公式的建立 迭代法的基本思想是用逐次逼近的方法求线性方程组的解。 设有方程组b Ax = (1) 将其转化为等价的便于迭代的形式f Bx x += (2) (这种转化总能实现,如令b f A I B =-=,)并由此构造迭代公式

解线性方程组的迭代法

解线性方程组的迭代法 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, ,1 i 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 =将求解结果与给定解比较,而后求出上述四种方法的误差,得出哪种方法比较好。 三、求解模型的数学原理。 1、Gauss 消去法求解原理 对于Ax b =(A 非奇异)求解时,可以先将A 分解成一个下三角矩阵L 和一个上三角矩阵U 的乘积,即A LU =,就可以通过

相关主题
文本预览
相关文档 最新文档