文档库 最新最全的文档下载
当前位置:文档库 › 数学实验 5:线性代数方程组的数值解法

数学实验 5:线性代数方程组的数值解法

数学实验 5:线性代数方程组的数值解法
数学实验 5:线性代数方程组的数值解法

实验 5:线性代数方程组的数值解法

习题3:

已知方程组Ax b =,其中20*20

A R

∈,定义为:

3

1/21/41/231/21/41/41/231/21/41/41/231/21/4

1/23--????---?

???---??-????

---??

--?

?

试通过迭代法求解此方程组,认识迭代法收敛的含义以及迭代初值和方程组系数矩阵性质对

收敛速度的影响。实验要求:

(1) 选取不同的初始向量x0和不同的方程组右端向量b ,给定迭代误差要求,用雅可比

迭代法和高斯-赛德尔迭代法计算,观测得到的迭代向量序列是否均收敛?若收敛,记录迭代次数,分析计算结果并得出结论;

(2) 取定右端向量b 和初始向量x0,将A 的主对角线元素成倍的增长若干次,非主对角

元素不变,每次用雅可比迭代法计算,要求迭代误差满足(1)()5

||||10k k x x +-∞-<,比

较收敛速度,分析现象并得出结论。

1、 程序设计(可直接粘贴运行)

1) Jacobi 迭代法

function y=jacobi(a,b,x0,e,m)

%定义jacobi 函数,其中:a,b 为线性方程组Ax b =中的矩阵和右端向量;x0为初始值; %e 和m 分别为人为设定的精度和预计迭代次数;运行结果y 为迭代的结果和所有中间值组成的 %矩阵 y=0;

%对y 初始化

d=diag(diag(a)); %按雅可比迭代标准形形式取主对角元素作为矩阵D u=-triu(a,1); %取上三角矩阵u l=-tril(a,-1);

%取下三角矩阵l

bj=d^-1*(l+u); fj=d^-1*b;

x=[x0,zeros(20,m-1)];

%初始化x,其中x1=x0,即初始值

for k=1:m

%人为规定迭代次数,防止不收敛迭代导致死循环

x(:,k+1)=bj*x(:,k)+fj; %jacobi 迭代 if norm(x(:,k+1)-x(:,k),inf)

%判断迭代后是否满足迭代中止条件:(1)()||||k k x x e

+∞-<

y=x(:,1:k+1); %赋给y 所有中间值和迭代结果 sizej=k ; %若去掉;号,则输出迭代次数 break

%并结束迭代

end

%若不成立,继续迭代

end

%以下部分为验证迭代公式收敛的方法,仅需运行一次即可,因为收敛性完全由A 矩阵决定,而A %在本题是固定不变的;通过判断x Bx f =+中B 的谱半径或范数大小(B 在jacobi 迭代法中%

为矩阵bj ),即可得知收敛性:

e=eig(bj)

%输出全部特征值i λ,若max ||()1

i B λρ=<,则收敛

n1=norm(bj,1); %计算1-范数 n2=norm(bj);

%计算2-范数 nn=norm(bj,inf);

%计算∞-范数 q=min([n1 n2 nn])

%由于谱半径不超过人以一种范数,所以只要范数的最小值q<1,也可判断迭代法收敛

2) Gauss 迭代法:与Jacobi 程序结构相同,不再注释

function y=gauss(a,b,x0,e,m) y=0;

d=diag(diag(a)); u=-triu(a,1); l=-tril(a,-1); x=[x0,zeros(20,m-1)]; bgs=(d-l)^-1*u; fgs=(d-l)^-1*b;

for k=1:m

x(:,k+1)=bgs*x(:,k)+fgs;

if norm(x(:,k+1)-x(:,k),inf)

y=x(:,1:k+1); sizeg=k; break end end

e=eig(bgs) n1=norm(bgs,1); n2=norm(bgs); nn=norm(bgs,inf); min([n1 n2 nn])

3) 操作函数:

%构造矩阵A

n=20;

a1=sparse(1:n,1:n,3,n,n); %按稀疏矩阵的输入法构造,比较方便 a2=sparse(1:n-1,2:n,-0.5,n,n); a3=sparse(1:n-2,3:n,-0.25,n,n); a=a1+a2+a3+a2'+a3'; a=full(a);

%还原为满矩阵

%通过给定不同的初始向量x0或者右端项b ,以及规定不同的误差要求,进行jacobi 和gauss %迭代,得到的结果y1、y2位两种迭代的次数,同时输出迭代结果,便于分析 b= x0= e= m=

y1=jacobi(a,b,x0,e,m); y2=gauss(a,b,x0,e,m);

4) 改变矩阵A :

先对jacobi 函数作一定修正,方便分析,命名为jacobi2,如下:

function y=jacobi2(a,b,x0,e,m) d=diag(diag(a)); u=-triu(a,1); l=-tril(a,-1); bj=d^-1*(l+u); fj=d^-1*b;

x=[x0,zeros(20,m-1)];

n1=norm(bj,1);

%计算范数

n2=norm(bj); nn=norm(bj,inf); q=min([n1 n2 nn]);

y(1)=q;

%输出结果1:范数的最小值,判断收敛速度的方法

for k=1:m

x(:,k+1)=bj*x(:,k)+fj;

if norm(x(:,k+1)-x(:,k),inf)

%输出结果2:迭代次数

break end end

%改变A 矩阵主对角元素的值,比较jacobi 迭代的收敛速度,即迭代误差满足%(1)

()5||||10k k x

x +-∞-<时的迭代次数

b=(1:20)';

%取定b

x0=20*ones(20,1); %取定x0

e=10^-5; %取定精度

r=20; %设置主对角元素扩大的最大倍数

y=0;

m=50;

for k=1:r;

a1=k*sparse(1:n,1:n,3,n,n); %只需更改A的主对角元素

a=a1+a2+a3+a2'+a3'; %重新构造A

a=full(a);

y(k,1:3)=[k,jacobi2(a,b,x0,e,m)];

end

y %输出对角线扩大倍数\最小范数\迭代次数

2、运行结果分析

1)不同初值(x0)和右端项(b)条件下的解的情况

Jacobi和Gauss法必然收敛。

的变化会影响迭代的次数;且Gauss迭代法总是比Jacobi迭代法收敛速度更快。

下表列出的是B=[1:20]’情况下部分结算结果,可以很明显的看到两种迭代法的收敛速度不同:

由于精度问题,在迭代的最后几次中从显示的数位已经不能看出标准值与计算值得差别,但是若采用long显示设定,就可以看到更多位小数的显示,其结果符合最初设定的精度e,数据繁琐,略。

的值的变化会影响迭代的次数;且Gauss迭代法总是比Jacobi迭代法收敛速度更快。

下表列出的是x0=[1:20]’情况下部分结算结果,可以很明显的看到两种迭代法的收敛速度不同:

4)b=(1:20)';x0=20*ones(20,1);e=10^-5; m=50;(固定各个参数)r=20;(改变a的主对角元素,依次扩大1倍、2倍……20倍)

运行结果:

结果分析:

根据判断迭代是否收敛的原理,若A 是严格对角占优的,即,||||(1,...,)ii

i j j i

a a i n ≠>=∑,

则Jacobi 迭代和Gauss 迭代均收敛。由此推测,A 的对角占优程度可能是影响收敛速度的关键因素。由上述试验表面,对A 的对角元素数值的扩大的确可以明显的改善Jacobi 迭代的收敛速度,与预测的情况相符。 主对角占优程度可以影响收敛速度,但是这个结论因为数学水平有限没有得到严格的推导。但关于A 的范数和收敛速度的关系在书上有比较完整的证明,即有公式:

(1)*(1)()1

(1)*(1)(0)||||||||1||||||||1k k k k k q

x x x x q

q

x x x x q

++++-≤---≤

-- (1)

q 为A 矩阵的三种范数中最小的值,x*为原线性方程组的解,可知q 越小,序列()

k x

收敛越

快。从上表中可以看出,迭代次数的减小(收敛速度的增加),是和q 的减小同步发生的,公式(1)得到验证。 还可以看到,随着扩大倍数的增大,迭代速度的增长率在不断的下降。可以直观的理解为,主对角元素的相对优势在扩大一定倍数之后已经相当明显,即使再增大若干倍其对于非对角元素仍然是具有压倒性优势的,优势地位不会因此而改变很多,根据前面的假设,收敛速度与对角占优程度有关,速度的改变也将减缓。

习题8

种群的繁殖与稳定收获:种群的数量因繁殖而增加,因自然死亡而减少,对于人工饲养的种群(比如家畜)而言,为了保证稳定的收获,各个年龄的种群数量应维持不变,种群因雌性个体的繁殖而改变,为方便起见以下种群数量均指其中的雌性。

种群年龄记作k=1,2,…,n ,当年年龄k 的种群数量记作xk ,繁殖率记作bk (每个雌性个体1年繁殖的数量),自然存活率记作sk (sk=1-dk ,dk 为1年的死亡率),收获量记作

hk ,则来年年龄k 的种群数量

k

x ~应为

)

1,,2,1(~,~11

,1-=-==+=∑n k h x s x x b x k k k k n

k k k ,

要求各个年龄的种群数量每年维持不变就是要使

)

,,1(~n k x x k k ==。

(1)若已知bk ,sk ,给定收获量hk ,建立求各个年龄的稳定种群数量xk 的模型(用矩阵、向量表示)。 (2)设n=5,b1=b2=b5=0,b3=5,b4=3,s1=s4=0.4,s2=s3=0.6,如果要求h1~h5为500,400,200,200,100,求15~x x

(3)要使h1~h5均为500, 如何达到?

1.模型的建立

根据题目给出的模型和各个参量,建立线性方程组。

1123

11111221223311

10i i n i i i i i i n n n n b b b b x x s h x x s h x x s h x x ++++--????

????????????????????????

????-=???

????????

??????????????

???????

(1)

参数b,s,h 的意义如题目所述,向量i

k x ,表示年龄为k 的种群在第i 个统计时间段中的数量。

题目中还给出了使各年龄的种群数量每年维持不变的要求,即(1,2,

,)i

k x k n =在k 取一定

值时,不随i 的变化而变化。方程(1)变为如下形式:

1

23

11122231

11011

11n n n n b b b b x s h x s h x s h x ---+????????????-????????????-=??????-??????

?????

?-?

????? (2)

得到了方程(2)的形式,就可以通过直接或间接(迭代)方法求解线性方程组。

2.程序设计 1)构造矩阵

n=5;

b=zeros(1,n); b(3)=5;b(4)=3; s=[0.4 0.6 0.6 0.4]; h=[0 500 400 200 100]'; ss=diag(s);

m=[b;ss,zeros(n-1,1)]-eye(5); x1=100*ones(5,1); %初值x1,计算guass 迭代使用到 x=gauss1(m,h,x1);

%试通过gauss 迭代法得到方程组的解

xx=m\h;

%xx 为matlab 通过内定方法得到的解,可以认为是精确的

2)高斯函数: 试采用高斯迭代法求解方程,内部设定精度和迭代次数,输出函迭代的结果和中间值,并输出全部特征值和范数的最小值

function x=gauss1(a,b,x0)

d=diag(diag(a));

u=-triu(a,1);l=-tril(a,-1); bgs=(d-l)^-1*u;

fgs=(d-l)^-1*b; e=10.^-3; %设定精度 m=20;

%迭代次数

x=x0;

for k=1:m

x(:,k+1)=bgs*x(:,k)+fgs; if norm(x(:,k+1)-x(:,k),inf)

e=eig(bgs)

%输出全部特征值 n1=norm(bgs,1);

n2=norm(bgs); nn=norm(bgs,inf); q=min([n1 n2 nn])

%输出范数的最小值

3、 运行结果分析

1) 问题1的方程已在“模型的建立”中给出

2) 将条件n=5,b1=b2=b5=0,b3=5,b4=3,s1=s4=0.4,s2=s3=0.6,

h=[500,400,200 ,100,100]带入方程(2),用左除程序和gauss 迭代分别求解x1~x5

运行结果: e =

0 0 0 0 1.6320

q = 6.4974 x=

1.0e+007 * colume 0 1 2 3 4 16 17 18 19 20

12345

x x x x x 0.0000 0.0001 -0.0004 -0.0012 -0.0025 -1.1910 -1.9442 -3.1735 -5.1798 -8.4539 0.0000 -0.0000 -0.0002 -0.0005 -0.0010 -0.4764 -0.7777 -1.2695 -2.0720 -3.3816 0.0000 -0.0001 -0.0002 -0.0004 -0.0007 -0.2859 -0.4667 -0.7617 -1.2432 -2.0290 0.0000 -0.0001 -0.0001 -0.0002 -0.0004 -0.1716 -0.2800 -0.4571 -0.7459 -1.2174 0.0000 -0.0000 -0.0001 -0.0001 -0.0002

-0.0686 -0.1120 -0.1828 -0.2984 -0.4870

xx =

1.0e+003 *

8.4810

2.8924

1.3354

0.6013

0.1405

由特征值的和范数大于1的结果可以分析出,采用gauss迭代法不能收敛,具体运算结果x发散现象很明显,迭代四次就会出现1e5数量级的值,验证了上面的推断。

方程的正确结果为xx,即稳定状态下,种群处于1、2、3、4、5年龄段的个体数目分别为:8481、2892、1335、601、141,数量维持不变。

3)改变h1~h5均为500,再次求解x,并讨论结果

由于矩阵m——(2)方程中左端矩阵,没有改变,可知方程仍然不可以用gauss或者jacobi迭代法进行求解。

直接由左除运算得到:

xx =

1.0e+004 *

1.1772

0.4209

0.2025

0.0715

-0.0214

保持自然存活率和繁殖率不变,在对每个年龄段的人工收获量都为500的情况下,达到稳定时,种群处于1、2、3、4、5年龄段的个体数目分别为:11772、4209、2025、715、-214,数量维持不变。

可以从数据中看到,年龄段5的个体数目出现了负值,这在现实中是不可能出现的。

分析:

问题1:由方程(2)的建立过程可以看出,影响种群某年龄段的主要因素是上一年龄段的存活率和人工收获量,两者对于该年龄段种群数量产生相反的作用,而特殊的,对于年龄段1,即种群中刚刚出的个体数量,其仅仅受到各个种群的繁殖率的影响。出现解为负值的情况在数学上是由方程本身的性质决定的,是正常现象,但联系本题涉及的实际情况却反映出了较大的问题:它说明此种人工繁殖和收获的方法是不能实现的。

问题2:不收敛性,由于方程(2)在题目要求的初始条件下其范数和特征根均大于1,即采用迭代法不能收敛于方程的解。这种情况在现实中意味着:若人工给定初始种群数量时,采用不同于方程(2)的解所规定的数量,在给定的繁殖率、存活率、收获量的情况下,这种人工繁殖的方法不可能趋向于稳定。

解决1:关于问题1:解的不符合现实的情况,可以通过改变参数(s、b、h)来解决。

下面针对年龄段5出现负值的问题提出一种最简单的解决办法:

方案:在现有人工饲养条件和种群质量(对应着参数b 、s )下,减少对年龄段5的个体的收集量,以保证稳定解的存在。

y=0;

for k=200:10:500

h(5)=k; %减小h(5),即对年龄段5的人工收集量 k0=(k-190)/10;

xx=m\h

%输出此时方程的解

y(1,k0)=xx(5);

%将新的新得到h(5)的值赋予y end

kk=[500:-10:200];

plot(kk,y(1,:)),grid; %作图

运行结果:

200

250300350400450500

-250

-200-150-100-50

50

100

h(5)

x x (5)

对年龄段5的收获量取不同值时方程的部分解:

由于年龄段5的数量x (5)仅仅可能对年龄段1通过繁殖率发生影响,而b5为0,所以改变年龄段5的情况不会对其他年龄段书数量造成任何影响。仅减小小对年龄段5的收集量,就可以使方程存在合理的稳定解;由图形还可以得到,当h(5)大约为286时,方程的解x(5)为零,此值为对年龄段5的最大收获量。

可以看出,本法可以维持其他年龄段的收集两不变,且不需增加成本改善人工饲养条件和种群质量(改变参数b 、s ),比较经济。

解决2:解的的不收敛性,实际上比起1更加严重,因为对方程(2)的迭代不能自动收敛,对应着实际种群数量不能自发趋向稳定,这对于人工饲养造成了非常大的麻烦,因为必须保证初始的各个年龄段个体的数量分布就满足方程2解的形式,且由于现实中的情况是不可能严格满足方程(2)的,总会有无法控制的个体数量波动,这又要求对种群数量的随时监测和调整,大大的提高了成本。

迭代法的不收敛性实际上是由方程(2)左端矩阵的性质决定的,即由参数b、s决定,若解决这个问题,则需要改变人工饲养条件或种群质量。最终迭代法收敛的条件是:迭代方

=+中的B矩阵(只与左端矩阵m有关)的特征根的最大值小于1或任程的标准形式x Bx f

意范数小于1。

由于改变b、s的情况比较复杂,只做以下两种修改:

1)b(3)=2;b(4)=3;其他所有参数不变,h=500*ones(5,1);

计算得到的迭代方程特征根和范数情况:

e =

-0.0000

0.9120

q =

4.0176

迭代收敛步骤:

170

迭代最终结果

xx =

1.0e+004 *

-5.7273

-2.3409

-1.4545

-0.9227

-0.4191

2)s=[0.2 0.6 0.6 0.2];其他所有参数不变,h=500*ones(5,1);

e =

0.8160

q =

6.0027

迭代收敛步骤:

80

迭代最终结果

xx =

1.0e+004 *

-4.0435

-0.8587

-0.5652

-0.3891

-0.1278

结论:

1.修正后迭代法收敛,即给定任意初始值x0(对应于实际中任意给定初始种群数量年龄分布),最终可以通过迭代收敛于方程解(实际中为种群数量可以自发趋向稳定)。

2.此时已经不能通过范数来判断收敛,必须直接观察特征根,同之前的分析相吻合,当特征根的最大绝对值同1相差较小时,收敛速度较慢,(ρ=0.9120,迭代次数=170),而特征根与1相差较大时,收敛速度变快(ρ=0.8160,迭代次数=80)。

3.事实上,采用这种修正后,又发生了问题1的错误,即最终结果出现负值,在实际中无意义。仍可以通过“解决1”中改变h的方法去掉负值。但实际操作中发现,除非规定人工收获量全部为0,“解决2”中的2)方案最终必然出现负值,即除非放弃所有养殖收获,否则该条件仍然不能实现。这说明该方案的改变仍然不合理。

只有同时地修正b 、s、h,即合理的调配饲养环境、种群质量以及人工收获量,才可以保证有合理的稳定解,并且使得种群可以自发的趋向稳定。

第二章 线性方程组的数值解法

第二章 线性方程组的数值解法 在科技、工程技术、社会经济等各个领域中很多问题常常归结到求解线性方程组。例如电学中的网络问题,样条函数问题,构造求解微分方程的差分格式和工程力学中用有限元方法解连续介质力学问题,以及经济学中求解投入产出模型等都导致求解线性方程组。 n 阶线性方程组的一般形式为 ?? ???? ?=+++=+++=+++n n 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 L K K K K L L 22112 222212********* (1.1) 其矩阵形式为 b Ax = (1.2) 其中 ????? ???????=??? ?????????=? ? ????? ?????= n n nn n n n n b b b b x x x x a a a a a a a a a A M M L K K K K L L 2121212222111211 ),,2,1,(n j i a ij L =,),,2,1(n i b i L =均为实数,i b 不全为0,且A 为非奇异。 关于线性方程组的数值解法一般分为两类: 1.直接法 就是不考虑计算机过程中的舍入误差时,经有限次的四则运算得到方程组准确解的方法。 而实际中由于计算机字长的限制,舍入误差的存在和影响,这种算法也只能求得线性方程组的近似解。本章将阐述这类算法中最基本的消去法及其某些变形。这些方法主要用于求解低阶稠密系数矩阵方程组。 2.迭代法 从某个解的近似值出发,通过构造一个无穷序列,用某种极限过程去逐步逼近线性方程组的精确解的方法。本章主要介绍迭代法与迭代法。迭代法是解大型稀疏矩阵(矩阵阶数高而且零元素较多)的线性方程组的重要方法。 §1 高斯)(Gauss 消去法 1.1 Gauss 消去法 Gauss 消去法是将线性方程组化成等价的三角形方程组求解。首先举例说明Gauss

线性方程组的数值解法实验

线性方程组的数值解法 实验 题目 用Gauss消元法和Seidel迭代法求线性方程组的解。 实验目的 通过本次实验了解Gauss消元法和Seidel迭代法的基本原理,掌握其算法,学会用Matlab编程进行计算,并能用这些方法解决实际问题。 Gauss 顺序消元法的基本原理算法: (1)输入:,. A b (2)对1,2,,1 k n =???-做 1)if0 kk a=then输出算法失败信息,停机; 2)对1,, i k n =+???做 1/; ik ik ik kk a l a a ←= 2; i i ik k b b l b =- 3对1,, j k n =+???做; ij ij ik kj a a l a =- (3)if0 nn a=then输出算法失败信息,并停机else做 1)/; n n n nn b x b a ←= 2)对1,,2,1 i n =-???做 1 ()/; n i i i ij j ii j i b x b a x a =+ ←=-∑ (4)输出方程组的解.X

流程图见附页 Seidel 迭代法的基本原理算法: (1)输入:,; A b (2)输入:初始解向量 ;x (3)对1,2,, i n =???做 1) 1 ()/; n i i ij j ii j j i y b a x a = ≠ =-∑ 2); i i i e y x =- 3); i i x y = (4)if 1 {||} max i i n eε ≤≤ 时方程组无解,当RB RA n ==时方程组有唯一解,当RB RA n =<时,方程组有无穷多解; ②根据公式 (1)()() (1)()() (,1,,) (1,,) k k k ij ij ik kj k k k i i ik k a a l a i j k n b b l b i k n + + =-=+??? =-=+??? 将增广矩阵[,] B A b =化为上三角形矩阵; (2)建立. backsub m文件; (3)调用. backsub m文件,在Matlab命令窗口输入,A b矩阵,再输入[,,,](,) RA RB n X gaus A b =,进行Matlab实现得出方程的解。

试验5线性代数方程组的数值解法

实验6 线性代数方程组的数值解法 [实验目的] 1. 1. 学会用MATLAB 软件数值求解线性代数方程组,对迭代法的收敛性和解的稳定性作初步分析; 2. 2. 通过实例学习用线性代数方程组解决简化的实际问题。 [实验内容] 5-5 输电网络:一种大型输电网络可简化为图5.5(见书)所示电路, 其中R 1,R 2,…,R n 表示负载电阻,r 1,r 2,…,r n 表示线路内阻,I 1,I 2,…,I n 表示负载上的电流。设电源电压为V 。 (1)列出求各负载电阻R 1,R 2,…,R n 的方程; (2)设I 1=I 2=…=I n =I ,r 1=r 2=…=r n =r ,在r=1,I=0.5,V=18,n=10的情况下求R 1,R 2,…,R n 及总电阻R 0。 [问题分析、模型建立及求解] (1) 设电源负极为电势为0,电阻R 1上对应节点电压为V 1,对于任意节点,根据KCL 定律列出方程: 11 1++----=k k k k k k k k r V V r V V R V 而 k k k R V I =,可得: 111111)(++++--++-= k k k k k k k k k k k k R r I R r I r I R r I I k=2,3,……,n-1; k=1时 2221211R r I R r I I +- =,为与上式形式一致,化为 22212111111)(R r I R r I r I r V I +--=- k=m (12-≤≤n m )时 111111)(++++--+--+= m m m n m m m m m m m m R r I R r I r I R r I I k=n 时 n n n n n n n R r I R r I I -= --11 设以上方程组的矩阵形式为:b AR = 则 []T n R R R R 21=

线性方程组的解法

线性方程组的解法 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 =

线性代数齐次方程组解法

D =) () ()(0)()() (001 11112 132 3122211331221 1 312a a a a a a a a a a a a a a a a a a a a a a a a k k k k k k k k ------------ 按第一列展开,再将各列的公因子提出来 D = ) ()()() () () (121323122211331221131 2a a a a a a a a a a a a a a a a a a a a a a a a k k k k k k k k ------------ =(a 2-a 1)(a 3-a 1)…(a k -a 1) 22322 32 111 ---k k k k k a a a a a a 得到的k -1阶范德蒙德行列式,由归纳假设知其值为 ∏≤<≤-k i j j i a a 2)( 于是 D =(a 2-a 1)(a 3-a 1)…(a k -a 1) ∏≤<≤-k i j j i a a 2)(= ∏≤<≤-k i j j i a a 1)( 因此,对于任意正整数n ≥2,范德蒙德行列式的展开式都成立。 证毕 例1.14 计算n 阶三对角行列式: D n = 2 1 120000 021000 12 1000 12------ 解 由行列式的性质1.4,将D n 的第一列的每个元看成两个元之和,得

D n = 2100 12000002100 120 00011----- +2 1 1200000 21000 12 1 00011------ 第一个行列式按第一列展开;第二个行列式从第一行开始依次加到下一行,得 D n =D n -1+ 1 110000 01000 110 00011 ---=D n -1+1 反复利用上面的递推公式,得到 D n =D n -1+1=D n -2+2=…=D 1+n -1=2+n -1=n +1 例1.15 计算n 阶行列式 D n = n a b b b a b b b a 21 (a i ≠b , i =1,2,…,n ) 解 对于这个行列式,采用一种“加边”的技巧。 D n =n a b b b a b b b a b b b 000121 第一行乘以(-1)加到其他各行上去,得

线性方程组的直接解法 实验报告

本科实验报告 课程名称:数值计算方法B 实验项目:线性方程组的直接解法 最小二乘拟合多项式 实验地点:ZSA401 专业班级:学号:201000 学生姓名: 指导教师:李志 2012年4月13日

线性方程组的直接解法 一、实验目的和要求 实验目的:合理利用Gauss 消元法、LU 分解法或追赶法求解方程组。 实验要求:利用高斯消元法,LU 分解法或追赶法进行编程,求解题中所给的方程组。 二、实验内容和原理 实验内容:合理利用Gauss 消元法、LU 分解法或追赶法求解下列方程组: ① ?? ?? ? ?????=????????????????????13814142210321321x x x ②??? ? ?? ??????=????????????????????? ?? ? ??--?-2178.4617.5911212592.1121130.6291.513 14 .59103.043 2115x x x x ③?? ??? ??? ? ???????----=????????????????????????????????-55572112112112121 n n x x x x (n=5,10,100,…) 实验原理:这个实验我选用的是高斯消元法。高斯消元法:先按照 L ik =a ik^(k-1)/a kk^(k-1) , a ij^(k)=a ij^(k-1)-l ik a kj^(k-1) [其中k=1,2,…,n-1;i=k+1,k+2,…,n;j=k+1,k+2,…,n+1] 将方程组变为上三角矩阵,再经过回代,即可求解出方程组的解。 三.计算公式 通过消元、再回代的求解方法称为高斯消元法。特点是始终消去主对角线 下方的元素。 四、操作方法与实验步骤 #include "Stdio.h" #define N 3 main() { double a[N][N+1],b[N]; int i,j,k,x=0; for(i=0;i

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

线性方程组的解法及其应用 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.

用高斯消元法求解线性代数方程组.(优选)

用高斯消元法求解线性代数方程组 1234111 5 -413-2823113-2104151 3-21719x x x x ??????????????????=?????? ?????? ?????? 1111X *??????=?????? (X*是方程组的精确解) 1 高斯消去法 1.1 基本思想及计算过程 高斯(Gauss )消去法是解线性方程组最常用的方法之一,它的基本思想是通过逐步消元,把方程组化为系数矩阵为三角形矩阵的同解方程组,然后用回代法解此三角形方程组得原方程组的解。 为便于叙述,先以一个三阶线性方程组为例来说明高斯消去法的基本思想。 ??? ??=++II =++I =++III) (323034)(5 253)(6432321 321321x x x x x x x x x 把方程(I )乘(2 3 - )后加到方程(II )上去,把方程(I )乘(2 4- )后加到方程(III )上 去,即可消去方程(II )、(III )中的x 1,得同解方程组 ?? ? ??=+-II -=-I =++III) (20 223)(445.0)(6 4323232321x x x x x x x 将方程(II )乘( 5 .03 )后加于方程(III ),得同解方程组: ?? ? ??-=-II -=-I =++III) (42)(445.0)(6432332321x x x x x x 由回代公式(3.5)得x 3 = 2,x 2 = 8,x 1 = -13。 下面考察一般形式的线性方程组的解法,为叙述问题方便,将b i 写成a i , n +1,i = 1, 2,…,n 。

线性方程组数值解法总结

好久没来论坛,刚刚发现以前的帖子现在那么火很欣慰,谢谢大家支持! 今天趁着不想做其他事情,把线性方程组的数值解法总结下,有不足的地方希望大神指教!数学建模中也会用到线性方程组的解法,你会发现上10个的方程手动解得话把你累个半死,而且不一定有结果,直接用matlab的函数,可以,关键是你不理解用着你安心吗?你怎么知道解得对不对? 我打算开个长久帖子,直到讲完为止!这是第一讲,如有纰漏请多多直接,大家一起交流!线性方程组解法有两大类:直接法和迭代法 直接法是解精确解,这里主要讲一下Gauss消去法,目前求解中小型线性方程组(阶数不超过1000),它是常用的方法,一般用于系数矩阵稠密,而有没有特殊结构的线性方程组。 首先,有三角形方程组的解法引入Gauss消去法,下三角方程组用前代法求解, 这个很简单,就是通过第一个解第二个,然后一直这样直到解出最后一个未知数,代码如下:前代法: function [b]= qiandai_method(L,b) n=size(L,1); %n 矩阵L的行数 for j=1:n-1 %前代法求解结果存放在b中 b(j)=b(j)/L(j,j); b(j+1:n)=b(j+1:n)-b(j)*L(j+1:n,j); end b(n)=b(n)/L(n,n); 上三角方程组用回代法,和前面一样就是从下面开始解x,代码: 后代法: function [y]=houdai_method(U,y) n=size(U,1); %n 矩阵L的行数 for j=n:-1:2 %后代法求解结果存放在y中 y(j)=y(j)/U(j,j); y(1:j-1)=y(1:j-1)-y(j)*U(1:j-1,j); end y(1)=y(1)/U(1,1); Gauss消去的前提就是这两个算法: 具体思想是把任何一个线性方程组的系数矩阵A,分解为一个上三角和一个下三角的乘积,即A=LU,其中L为下三角,U为上三角。 那么具体怎么做呢? 有高斯变换,什么是高斯变换?由于时间有限我不可能去输入公式,所以我用最平白的话把它描述出来。 你先想一下怎么把一个矩阵的某一列的从第j个分量后全部变0? 高斯变换就是通过每次一个矩阵Li把A的第i列对角线元素以下的都变为0,最后把这么多Li一次左乘起来就是一个矩阵L’=L(n-1)L(n-2)…L2L1,而L’A=U, 那么L=L’的转置,这样就得到了A得分解。 我们要求Ax=b A=LU

浅析线性方程组的解法

目录 摘要................................................................................... I Abstract. ............................................................................. II 第一章绪论............................................................................ I 1.1引言 (1) 1.2线性方程组解的求解方法的研究现状 (1) 1.3本文对线性方程组解法的研究结构 (1) 第二章线性方程组理论基础 (2) 2.1 线性方程组概念 (2) 2.2 线性方程组的解的情况分析 (2) 2.3 齐次线性方程组解的结构 (4) 2.4非齐次线性方程组解的结构 (4) 第三章线性方程组的数值解 (5) 3.1 迭代法 (5) 3.1.1 Jacobi方法 (6) 3.2.2 高斯-赛德尔方法 (8) 第四章全文总结和展望 (10) 4.1 全文总结 (10) 4.2 未来展望 (10) 参考文献 (11) 致谢................................................................. 错误!未定义书签。

线性方程组的求解方法 学生:指导教师: 摘要:本文在对线性方程组解的结构的研究背景与意义分析的基础上,对线性方程组的求解方法的研究现状进行了介绍,之后针对线性方程组展开了研究,包括线性方程组的概念、线性方程组的求解方法以及线性方程组的作用等,在对线性方程组有了全面的认识后,基于线性方程组解的结构展开了研究,包括线性方程组解的基本定理,齐次和非齐次线性方程组解的结构形式,以及齐次和非齐次线性方程组解的结构,我们用迭代法中最常用的Jacobi方法中的相似上三角矩阵定理和迭代法中的收敛性讨论线性方程组的数值解法,并用高斯-赛德尔方法进行验证。得到线性方程组的数值解的一般方法。最后,对全文进行了总结和展望。 关键词:线性方程组;数值解;迭代法;Jacobi方法;高斯-赛德尔方法

线性方程组的直接解法

第2章线性方程组的直接解法 2.1实验目的 理解线性方程组计算机解法中的直接解法的求解过程和特点,学习科学计算的方法和简单的编程技术。 2.2概念与结论 1. n阶线性方程组 如果未知量的个数为 n ,而且关于这些未知量x1,x2, …,x n的幂次都是一次的(线性的)那末, n 个方程 a11x1+a12x2+ … +a1n x n=b1 ┆┆┆ (1) a n1x1+a n2x2+ … +a nn x n= b n 构成一个含n个未知量的线性方程组,称为n阶线性方程组。其中,系数a11,…,a1n,a21, …,a2n, …,a n1, …,a nn 和b1, …,b n都是给定的常数。 方程组(1)也常用矩阵的形式表示,写为 Ax=b 其中,A是由系数按次序排列构成的一个n阶矩阵,称为方程组的系数矩阵,x和b都是n维向量,b称为方程组的右端向量。 2. n阶线性方程组的解 使方程组(1)中每一个方程都成立的一组数x1*,x2*, …,x n*称为式(1)的解,把它记为向量的形式,称为解向量. 3.一些特殊的线性方程组 1) 上三角方程组 2) 三对角方程组 ? ? ? ? ? ? ? ? ? ? ? ? = ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? - - - - - n n nn n n n n n n n n b b b x x x a a a a a a a a a a a a 2 1 2 1 1 1 1 2 1 2 23 22 1 1 1 13 12 11

4.矩阵的Doolittle 分解 5.Doolittle 分解的紧凑格式 6.矩阵的Crout 分解 ????????? ? ??=?????????? ???????????? ? ?--n n n n n n d d d x x x b a c b c b a c b a c b 21 2111333 22211???? ?? ? ? ???????? ??=??????? ??nn n n n n nn n n n n u u u u u u l l l a a a a a a a a a 222 11211 2 1 21 2 1 2222111211111 ???? ?? ? ? ???????? ??=??????? ??11 1 21122 1 2221 11 2 1 2222111211 n n nn n n nn n n n n u u u l l l l l l a a a a a a a a a ????? ?? ? ??nn n n n n n n u l l l u u l l u u u l u u u u 3 2 1 333323122322211131211

线性方程组的数值解法

第三章线性方程组地数值解法 范数 (1> 常用范数 ① 向量 1- 范数: ② 向量 2- 范数: ③ 向量∞- 范数: ④ 向量 p- 范数: 向量1- 范数,向量2- 范数,向量∞- 范数实际上为任意 p- 范数地特例. (2> 矩阵范数 设,则 (1>,A地行范数 (2>,A地列范数 (3>,A地 2- 范数,也称谱范数 (4>, F- 范数 其中指矩阵地最大特征值 (3>谱半径(用于判断迭代法地收敛值> 设为矩阵A地特征值,则

称为A地谱半径 谱半径小于任何半径,若,则 (4>设A为非奇异矩阵,称 为A地条件数 矩阵地条件数与范数选取有关,通常有 显然当A对称时 直接法 Gauss消去法 ①Gauss顺序消去法 对线性方程组Ax=b,设,按顺序消元法,写出增广矩阵(A┆b>第一步,写出,将2~n行中地变为0 第k步,写出,将k+1~n行中地变为0 具体步骤可参照下面地例题 例5:用Gauss消去法解方程组

解: Guass列主元消去法 消去过程与Guass消元法基本相同,不同地是每一步消元时,都要将所选到地绝对值最大元素作为主元. 具体分析参见习题详解1 ②矩阵三角(LU>分解法 基本思想:将Ax=b化为LUx=b,令Ux=y 可得Ly=b,Ux=y,相当于先求出y,再求出x 其中,L,U分别为下三角矩阵和上三角矩阵 若L为单位下三角矩阵,则称为Doolittle分解。若U为单位上三角矩阵,则称为Crout分解. ③矩阵Doolittle分解法

计算公式 具体解题见习题详解2 注意计算顺序,先行再列,用简图表示为 虚线上地元素为对角元,划为行元. ④ 分解法 计算公式

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

线性方程组的几种解法 线性方程组形式如下: 常记为矩阵形式 其中 一、高斯消元法 高斯(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

线性代数方程组的直接解法_赖志柱

第二章线性代数方程组的直接解法 教学目标: 1.了解线性代数方程组的结构、基本理论以及相关解法的发展历程; 2.掌握高斯消去法的原理和计算步骤,理解顺序消去法能够实现的条件,并在此基础上理解矩阵的三角分解(即LU分解),能应用高斯消去法熟练计算简单的线性代数方程组; 3.在理解高斯消去法的缺点的基础上,掌握有换行步骤的高斯消去法,从而理解和掌握选主元素的高斯消去法,尤其是列主元素消去法的理论和计算步骤,并能灵活的应用于实际中。 教学重点: 1. 高斯消去法的原理和计算步骤; 2. 顺序消去法能够实现的条件; 3. 矩阵的三角分解(即LU分解); 4. 列主元素消去法的理论和计算步骤。 教学难点: 1. 高斯消去法的原理和计算步骤; 2. 矩阵的三角分解(即LU分解); 3. 列主元素消去法的理论和计算步骤。 教学方法: 教具: 引言 在自然科学和工程技术中,许多问题的解决常常归结为线性方程组的求解,有的问题的数学模型中虽不直接表现为线性方程组,但它的数值解法中将问题“离散化”或“线性化”为线性方程组。例如,电学中的网络问题、船体数学放样中建立三次样条函数问题、最小二乘法用于求解实验数据的曲线拟合问题、求解非线性方程组问题、用差分法或有限元法求解常微分方程边值问题及偏微分方程的定解问题,都要导致求解一个或若干个线性方程组的问题。 目前,计算机上解线性方程组的数值方法尽管很多,但归纳起来,大致可以分为两大类:一类是直接法(也称精确解法);另一类是迭代法。例如线性代数中的Cramer法则就是一种直接法,但其对高阶方程组计算量太大,不是一种实用的算法。实用的直接法中具有代表性的算法是高斯(Gauss)消元法,其它算法都是它的变形和应用。 在数值计算历史上,直接法和迭代法交替生辉。一种解法的兴旺与计算机的硬件环境和问题规模是密切相关的。一般说来,对同等规模的线性方程组,直接法对计算机的要求高于迭代法。对于中、低阶(200 n )以及高阶带形的线性方程组,由于直接法的准确性和可靠性高,一般都用直接法求解。对于一般高阶方程组,特别是系数矩阵为大型稀疏矩阵的线性方程组用迭代法有效。

计算方法实验报告-线性方程组的数值解法

重庆大学 学生实验报告实验课程名称计算方法 开课实验室DS1421 学院年级专业 学生姓名学号 开课时间至学年第学期

1.实验目的 (1)高斯列主元消去法求解线性方程组的过程 (2)熟悉用迭代法求解线性方程组的过程 (3)设计出相应的算法,编制相应的函数子程序 2.实验内容 分别用高斯列主元消去法 ,Jacobi 迭代法,Gauss--Saidel 迭代法,超松弛迭代法求解线性方程组 ????? ???????-=????????????????????????------725101391444321131243301024321x x x x 3.实验过程 解:(1)高斯列主元消去法 编制高斯列主元消去法的M 文件程序如下: %高斯列主元消元法求解线性方程组Ax=b %A 为输入矩阵系数,b 为方程组右端系数 %方程组的解保存在x 变量中 format long;%设置为长格式显示,显示15位小数 A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13] b=[10,5,-2,7]' [m,n]=size(A); %先检查系数正确性 if m~=n error('矩阵A 的行数和列数必须相同'); return; end if m~=size(b) error('b 的大小必须和A 的行数或A 的列数相同'); return; end %再检查方程是否存在唯一解 if rank(A)~=rank([A,b]) error('A 矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解'); return; end c=n+1; A(:,c)=b; %(增广) for k=1:n-1

实验报告—代数方程与微分方程求解

实 验 报 告 四 代数方程求解 1、【示例】以下命令可求出方程 (x +1)e –x +e x sin x =0在0附近的一个根: >>y=sym('(x+1)*exp(-x)+exp(x)*sin(x)'); % 用sym 命令定义符号表达式 >>x=solve(y,'x') % 用准解析方法求出方程最接近0的一个根 x =-0.86508244315736795185621568221837 或可用以下命令求解该方程以指定点为初始搜索点的数值解: >> y=inline('(x+1)*exp(-x)+exp(x)*sin(x) ', 'x'); % 用数值方法求解时,方程要用inline 命令定义 >> x=fsolve(y,0) % 用数值方法从初始点1开始搜索方程的近似解 x = -0.8651 注:准解析命令solve 只能求出方程最接近0的一个实数根,而数值解法fsolve 可以通过初始搜索点的变化,得到不同的解(如果方程有多个实数解)。 【要求】仿照示例,用准解析方法求出30.5sin(42)4cos(2)0.5t t e t e t --++=的一个根;再用数值方法分别求该方程在-0.6和3附近的两个根。 y=sym('exp(-3*t)*sin(4*t+2)+4*exp(-0.5*t)*cos(2*t)-0.5'); t=solve(y,'t') t =0.67374570500134756702960220427474 y=inline('exp(-3*t).*sin(4*t+2)+4*exp(-0.5*t).*cos(2*t)-0.5','t'); t=fsolve(y,0.6) t = 0.6737 y=inline('exp(-3*t).*sin(4*t+2)+4*exp(-0.5*t).*cos(2*t)-0.5','t'); t=fsolve(y,3) t = 2.5937 2、【示例】以下命令可求解非线性方程组339820 x y x x y ?+-=?+-=? >> eq1=sym('x^3+y^3-x-98'); % 定义第一个方程表达式 >> eq2=sym('x+y-2'); % 定义第二个方程表达式 >> [x,y]=solve(eq1,eq2) % 解方程组(用准解析方法) x = 13/12+1/12*2329^(1/2) 13/12-1/12*2329^(1/2) y = 11/12-1/12*2329^(1/2) 11/12+1/12*2329^(1/2) 或可用以下命令求解上述方程组以指定点为初始搜索点的数值解: >> f=inline('[x(1) ^3+x(2) ^3-x(1)-98; x(1)+x(2)-2]', 'x'); % 用inline 命令定义方程组 >> x=fsolve(f,[1;1]) % 用数值方法从初始点(1,1)开始搜索方程组的一个近似解 x =

线性代数方程组求解

线性代数方程组求解 一、实验要求 编程求解方程组: 方程组1: 方程组2: 方程组3: 要求: 用C/C++语言实现如下函数: 1.bool lu(double* a, int* pivot, int n); 实现矩阵的LU分解。 pivot为输出参数,pivot[0,n)中存放主元的位置排列. 函数成功时返回false,否则返回true。 2.bool guass(double const* lu, int const* p, double* b, int n);

求线代数方程组的解 设矩阵Lunxn 为某个矩阵anxn 的LU 分解,在内存中按行优先次序存放。p[0,n)为LU 分解的主元排列.b 为方程组Ax=b 的右端向量.此函数计算方程组Ax=b 的解,并将结果存放在数组b [0,n )中.函数成功时返回false ,否则返回true 。 3。 void qr(double* a , double * d, int n);矩阵的QR 分解 假设数组anxn 在内存中按行优先次序存放。此函数使用HouseHolder 变换将其就地进行QR 分解。 d 为输出参数,d [0,n) 中存放QR 分解的上三角对角线元素。 4。 bool hshld(double const*qr , double const*d, double*b , int n); 求线代数方程组的解 设矩阵qrnxn 为某个矩阵anxn 的QR 分解,在内存中按行优先次序存放。d [0,n ) 为QR 分解的上三角对角线元素。b 为方程组Ax=b 的右端向量。 函数计算方程组Ax=b 的解,并将结果存放在数组b[0,n)中。 函数成功时返回false ,否则返回true 。 二、问题分析 求解线性方程组Ax=b ,其实质就是把它的系数矩阵A 通过各种变换成一个下三角或上三角矩阵,从而简化方程组的求解。因此,在求解线性方程组的过程中,把系数矩阵A 变换成上三角或下三角矩阵显得尤为重要,然而矩阵A 的变换通常有两种分解方法:LU 分解法和QR 分解法。 1、LU 分解法: 将A 分解为一个下三角矩阵L 和一个上三角矩阵U,即:A=LU , 其中 L=??????? ?????1001 00 12121 n n l l l , U=? ? ??? ? ??????nn n n u u u u u u 000 00222112 11 2、QR 分解法: 将A 分解为一个正交矩阵Q 和一个上三角矩阵R,即:A=QR 三、实验原理 解Ax=b 的问题就等价于要求解两个三角形方程组: ⑴ Ly=b,求y; ⑵ Ux=y,求x 。 设A 为非奇异矩阵,且有分解式A=LU , L 为单位下三角阵,U 为上三角

数值分析讲义——线性方程组的解法

数值分析讲义 第三章线性方程组的解法 §3.0 引言 §3.1 雅可比(Jacobi)迭代法 §3.2 高斯-塞德尔(Gauss-Seidel)迭代法 §3.3 超松驰迭代法§3.7 三角分解法 §3.4 迭代法的收敛性§3.8 追赶法 §3.5 高斯消去法§3.9 其它应用 §3.6 高斯主元素消去法§3.10 误差分析 §3 作业讲评3 §3.11 总结

§3.0 引言 重要性:解线性代数方程组的有效方法在计算数学和科学计算中具有特殊的地位和作用.如弹性力学、电路分析、热传导和振动、以及社会科学及定量分析商业经济中的各种问题. 分类:线性方程组的解法可分为直接法和迭代法两种方法. (a) 直接法:对于给定的方程组,在没有舍入误差的假设下,能在预定的运算次数内求得精确解.最基本的直接法是Gauss消去法,重要的直接法全都受到Gauss消去法的启发.计算代价高. (b) 迭代法:基于一定的递推格式,产生逼近方程组精确解的近似序列.收敛性是其为迭代法的前提,此外,存在收敛速度与误差估计问题.简单实用,诱人.

§3.1 雅可比Jacobi 迭代法 (AX =b ) 1 基本思想: 与解f (x )=0 的不动点迭代相类似,将AX =b 改写为X =BX +f 的形式,建立雅可比方法的迭代格式:X k +1=BX (k )+f ,其中,B 称为迭代矩阵.其计算精度可控,特别适用于求解系数为大型稀疏矩阵(sparse matrices)的方程组. 2 问题: (a) 如何建立迭代格式? (b) 向量序列{X k }是否收敛以及收敛条件? 3 例题分析: 考虑解方程组??? ??=+--=-+-=--2.453.82102 .72103 21321321x x x x x x x x x (1) 其准确解为X *={1, 1.2, 1.3}. 建立与式(1)相等价的形式: ??? ??++=++=++=84.02.01.083.02.01.072 .02.01.02 13312321x x x x x x x x x (2) 据此建立迭代公式: ?????++=++=++=+++84 .02.01.083.02.01.072.02.01.0)(2)(1)1(3 )(3 )(1)1(23)(2)1(1k k k k k k k k k x x x x x x x x x (3) 取迭代初值0) 0(3 )0(2)0(1===x x x ,迭代结果如下表. JocabiMethodP31.cpp

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

线性方程组的数值解法及其应用 一、问题描述 现实中的问题大多数是连续的,例如工程中求解结构受力后的变形,空气动力学中计算机翼周围的流场,气象预报中计算大气的流动。这些现象大多是用若干个微分方程描述。用数值方法求解微分方程(组),不论是差分方法还是有限元方法,通常都是通过对微分方程(连续的问题,未知数的维数是无限的)进行离散,得到线性方程组(离散问题,因为未知数的维数是有限的)。因此线性方程组的求解在科学与工程中的应用非常广泛。 经典的求解线性方程组的方法一般分为两类:直接法和迭代法。 二、基本要求 1)掌握用MATLAB软件求线性方程初值问题数值解的方法; 2)通过实例学习用线性方程组模型解决简化的实际问题; 3)了解用高斯赛德尔列主元消去法和雅可比迭代法解线性方程组。 三、测试数据 1) 直接法:A=[0.002 52.88;4.573 -7.290]; b=[52.90;38.44]; 2) 迭代法:A=[10 -1 -2;-1 10 -2;-1 -1 5]; b=[7.2;8.3;4.2]; 四、算法程序及结果 1) function[RA,RB,n,x]=liezy1(A,b) B=[A b];n=length(b);RA=rank(A); RB=rank(B);zhica=RB-RA; if zhica>0, disp('因为RA~=RB,所以此方程组无解.') return

if RA==RB if RA==n disp('因为RA=RB=n,所以此方程组有唯一解.') x=zeros(n,1);C=zeros(1,n+1); for p=1:n-1 [Y,j]=max(abs(B(p:n,p)));C=B(p,:); B(p,:)=B(j+p-1,:);B(j+p-1,:)=C; for k=p+1:n m=B(k,p)/B(p,p); B(k,p:n+1)=B(k,p:n+1)-m*B(p,p:n+1); end end b=B(1:n,n+1);A=B(1:n,1:n);x(n)=b(n)/A(n,n); for q=n-1:-1:1 x(q)=(b(q)- sum(A(q,q+1:n)*x(q+1:n)))/A(q,q); end else disp('因为RA=RB> b=[52.90;38.44]; >> [RA,RB,n,x]=liezy1(A,b) 因为RA=RB=n,所以此方程组有唯一解. RA = 2 RB = 2

相关文档