用列主元消去法和追赶法求解带有边值问题的线
matlab追赶法求解方程组
matlab追赶法求解方程组方程组是数学中常见的问题之一,解决方程组可以帮助我们理解和解决实际问题。
在数值计算中,matlab是一种常用的工具,它提供了许多求解方程组的方法。
其中,追赶法是一种常用的方法之一,它可以高效地求解三对角线方程组。
三对角线方程组是指方程组中只有主对角线和两个相邻的次对角线上有非零元素,其余元素均为零。
这种方程组在实际问题中经常出现,例如求解热传导方程、电路分析等。
追赶法是一种特殊的高斯消元法,它通过对方程组进行变换,将其转化为一个上三角形方程组和一个下三角形方程组,从而简化求解过程。
追赶法的基本思想是通过迭代的方式,逐步消去次对角线上的元素,最终得到方程组的解。
具体步骤如下:1. 将原方程组表示为矩阵形式,设为A*X=B,其中A是一个n×n的矩阵,X和B是n维列向量。
2. 对A进行LU分解,得到一个上三角矩阵U和一个下三角矩阵L,使得A=L*U。
3. 将方程组A*X=B转化为L*U*X=B。
4. 令Y=U*X,将方程组转化为L*Y=B。
5. 通过迭代的方式,逐步求解Y和X。
首先求解L*Y=B,然后求解U*X=Y。
6. 求解L*Y=B时,从第一行开始,逐行求解Y的每个分量。
设第i 行的元素为y(i),则有y(i)=B(i)-L(i,i-1)*y(i-1),其中L(i,i-1)是L矩阵中第i行第i-1列的元素。
7. 求解U*X=Y时,从最后一行开始,逐行求解X的每个分量。
设第i行的元素为x(i),则有x(i)=(Y(i)-U(i,i+1)*x(i+1))/U(i,i),其中U(i,i+1)是U矩阵中第i行第i+1列的元素。
通过以上步骤,我们可以得到方程组的解X。
追赶法是一种高效的求解三对角线方程组的方法,它的时间复杂度为O(n),其中n是方程组的维数。
相比于其他求解方法,追赶法具有计算量小、速度快的优势。
在matlab中,我们可以使用tridiag函数来实现追赶法求解方程组。
用列主元消去法和追赶法求解带有边值问题的线
重庆理工大学数学与统计学院数值分析课程设计成绩评定书设计题目:用列主元消去法和追赶法求解带有边值问题的线性方程组专业班学号学生姓名指导教师用列主元消去法和追赶法求解线性方程组摘要:根据高斯消去法的理论知识,通过MATLAB 工具编写函数,运用列主元消去法和追赶法来求解线性方程组。
在消元过程中可能出现)(a k kk0 的情况,这时就可以用列主元消去法来解决,它的特点是每次在系数矩阵中依次按列在主对角线及以下的元素中,选取绝对值最大的元素作为主元,将它调到主对角线上,然后用它消去主对角线以下的元素,最后化为同解的上三角形方程组去求解;而在实际问题中,如求解系数矩阵为对角占优的三对角线性方程组,用追赶法求解就显得更方便。
可以看出,两种方法对于求解线性方程组都具有可行性和准确性。
关键词:高斯消去法;列主元消去法;追赶法;MA TLAB一、问题提出. 考虑两点边值问题()()⎪⎩⎪⎨⎧==<<=+.11,00,10,22y y a a dx dy dx y d ε容易知道它的精确解为.1111ax e ea y x+⎪⎪⎭⎫⎝⎛---=--εε为了把微分方程离散,把[]1,0区间n 等分,令nh 1=,ih x i =,,1,,2,1-=n i 得到差分方程,21211a hy y hy y y ii i i i =-++-++-ε简化为()(),2211ah y y h y h i i i =++-+-+εεε从而离散后得到的线性方程组的系数矩阵为()()()()⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡+-++-++-++-=h h h hh hh A εεεεεεεεεε2222对1=ε,6.0=a ,100=n ,分别用列主元消去法和追赶法求解线性方程组,然后比较与精确解的误差,对结果进行分析。
改变n ,讨论同样问题。
二、问题求解2.1列主元消去法2.1.1方法思想高斯消去法是一个古老的求解线性方程组的方法,但它的改进、变形得到的主元素消去法仍然是计算机上常用的计算方法,高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。
用列主元消去法解线性方程组
用列主元消去法解线性方程组
列主元消去法是一种解决线性方程组的有效方法,它可以有效地解决多元一次
方程组的求解问题。
列主元消去法是一种基于矩阵分解的算法,它将线性方程组转换为一系列的三
角形矩阵,从而解决线性方程组的求解问题。
它的基本思想是,首先将矩阵A分解为两个矩阵,即列主元矩阵P和三角矩阵U,然后将原方程组PA=LU转换为LUx=Pb,其中Pb是P矩阵乘以b向量的结果,最后求解LUx=Pb即可得到x向量,从而解决线性方程组的求解问题。
列主元消去法的优点在于它可以有效地解决多元一次方程组的求解问题,而且
它的计算量较小,可以在较短的时间内完成求解。
此外,它还可以有效地处理矩阵的奇异性,即当矩阵A的行列式为零时,它仍然可以有效地求解线性方程组。
列主元消去法在互联网领域的应用也很广泛,它可以用于解决复杂的数据挖掘
问题,如推荐系统、搜索引擎等,这些问题都可以用列主元消去法来解决。
此外,它还可以用于解决机器学习中的优化问题,如支持向量机、神经网络等,这些问题也可以用列主元消去法来解决。
总之,列主元消去法是一种有效的解决线性方程组的方法,它可以有效地解决
多元一次方程组的求解问题,而且它的计算量较小,可以在较短的时间内完成求解。
此外,它在互联网领域的应用也很广泛,可以用于解决复杂的数据挖掘问题和机器学习中的优化问题。
线性方程组的求解
目录摘要 (1)一.用列主元消去法解方程组 (2)1.问题的提出 (2)2.问题的分析 (2)3.问题的解决 (3)二.编写一个列主元消去法求逆矩阵的程序 (4)1.问题的提出 (4)2.问题的分析 (4)3.问题的解决 (5)Ax (5)三.用LU分解法解方程组b1.问题的提出 (5)2.问题的分析 (5)3.问题的解决 (6)四.用改进平方根法解方程组 (7)1.问题的提出 (7)2.问题的分析 (7)3.问题的解决 (8)五.用追赶法解方程组 (9)1.问题的提出 (9)2.问题的分析 (9)3.问题的解决 (10)六.分别用雅可比迭代法与高斯-赛德尔迭代法解方程组 (11)1.问题的提出 (11)2.问题的分析 (11)3.问题的解决 (12)参考文献 (14)个人体会 (15)附录:程序代码 (16)摘要在科技研究和工程技术所提出的计算问题中,经常会遇到线性方程组的求解问题,这里主要是有关线性方程组的直接解法。
解线性方程组的直接法是用有限次运算求出线性方程组Ax=b 的解的方法。
线性方程组的直接法主要有Gauss消元法及其变形、LU(如Doolittle、Crout方法等)分解法和一些求解特殊线性方程组的方法(如追赶法、LDLT法等)。
这里主要有列主元消元法,LU分解法,改进的平方根法,追赶法和雅可比迭代,高斯—塞德尔迭代的构造过程及相应的程序。
线性方程的解法在数值计算中占有极重要的地位,因此,线性方程组的求解是数值分析课程中最基本的内容之一。
关键词:列主元消元法;LU分解;改进平方根法;追赶法;雅可比迭代;高斯—塞德尔迭代一.用列主元消去法解方程组:1.问题的提出:(1)⎪⎪⎩⎪⎪⎨⎧=-++--=+--=+-+=++4323231243432143214321421x x x x x x x x x x x x x x x (2)⎪⎪⎩⎪⎪⎨⎧=++--=++-=-+--=-+-434220332282432132143214321x x x x x x x x x x x x x x x2.问题的分析:列主元消去算法主要分为两个过程:消去过程和回代过程1. 消去过程对1,,2,1-=n k(1)选主元 找k i ∈}{,,n k ,⋯使)()(max k ik ni k ki k a ak ≤≤= (2)若0)(=k a k ik 则停止计算(detA=0)(3)若k i k ≠ 则换行()()k i k E E ↔ (4)消元对i =1,,1++n k)()(k kkk ik a a ik l =对1,,1++=n k j )()()1(k kjik k ij k ija l a a -=+ 2.回代过程(1)若0)(=n nn a 则停止计算(detA=0) (2) )()(1,n nnn n n a a n x +=(3)对1,,1 -=n i)(1)()(1,n iini j jn ij n n i a x a a i x ∑=+=+-3.问题的解决:(1)解:对于()b A |)1(=()b A |=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------43141321************ 第1步选列主元为,3)1(31=a 31=i ,作变换()()31E E ↔,然后计算667.03221==l , 333.03131==l ,333.03141-==-l再作变换()()(),414143131321212,,E E l E E E l E E E l E →-→-→-得到())2()2(|b A=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛------3533333.0667.2667.10333.2333.0333.10333.0333.0667.102113 第2步,对)2(A 选列主元为667.135)2(22==a ,22=i ,计算8.05432==l , 142=l , 再做变换32323)(E E l E →-,42424)(E E l E →-,得到()⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-----=05/1333030015/3915/9003/13/13/502113)3()3(b A消去过程结束,回代计算得到解10214321===-=x x x x所以原方程组的解为TX )1,0,2,1(-=。
部分主元法
部分主元法部分主元法是一种数值计算方法,用于解决线性方程组的问题。
它的基本思想是将一个大的方程组分解成若干个小的方程组,然后逐个求解小方程组,最终得到整个方程组的解。
在使用部分主元法解决方程组时,首先需要选取一个主元。
主元是指方程组中某一行或某一列的元素中绝对值最大的那个元素。
选取主元的目的是为了尽可能减小计算误差,提高计算的精度。
选取主元后,需要将方程组进行初等行变换,使主元所在的行或列的其他元素变为0。
这样,原来的方程组就被分解为两个子方程组。
然后,对子方程组进行同样的操作,选取主元并进行初等行变换。
重复这个过程,直到所有的子方程组都求解完毕。
在求解子方程组时,可以使用高斯消元法或列主元消去法。
高斯消元法是通过将方程组转化为上三角矩阵,然后从最后一行开始回代求解。
而列主元消去法是在每一步选择主元时,不仅要考虑绝对值最大,还要考虑主元所在的行或列的其他元素是否为0。
部分主元法的优点是可以在一定程度上避免误差的累积,提高计算的精度。
然而,它也存在一些缺点。
首先,选取主元需要进行全局搜索,计算量比较大。
其次,在某些情况下,选取主元可能会导致主元为0,从而无法进行下一步的计算。
除了部分主元法,还有其他的数值计算方法可以用于解决线性方程组的问题,例如全主元法和追赶法。
全主元法是在每一步选取主元时,不仅要考虑绝对值最大,还要考虑主元所在的行和列的其他元素是否为0。
追赶法是针对三对角方程组的一种特殊方法,通过追赶的方式求解未知数。
部分主元法是一种有效的数值计算方法,可以用于解决线性方程组的问题。
它的基本思想是将方程组分解为若干个小的子方程组,并逐个求解子方程组,最终得到整个方程组的解。
在应用部分主元法时,需要选取主元并进行初等行变换,以减小计算误差,提高计算的精度。
同时,还可以使用其他的数值计算方法来解决线性方程组的问题。
直接法解线性方程组 高斯(guass)与追赶法
实验一 直接法解线性方程组一、实验目的掌握列选主元消去法与追赶法解线性方程组。
二、实验内容分别写出Guass 列选主元消去法与追赶法的算法,编写程序上机调试出结果,要求所编程序适用于任何一解线性方程组问题,即能解决这一类问题,而不是某一个问题。
实验中以下列数据验证程序的正确性。
1、用Guass 列选主元消去法求解方程组 ⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡=⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡⎥⎥⎥⎦⎤⎢⎢⎢⎣⎡--5.58.37.33.47.11.85.16.93.51.53.25.2321x x x2、用追赶法求解方程组 ⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-=⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡-----000010210210000210000210000254321x x x x x三、实验仪器设备与材料主流微型计算机四、实验原理1、Guass 列选主元消去法 对于AX =B1)、消元过程:将(A|B )进行变换为)~|~(B A ,其中A ~是上三角矩阵。
即:⎪⎪⎪⎪⎪⎭⎫⎝⎛→⎪⎪⎪⎪⎪⎭⎫ ⎝⎛n nnn n n nnn n n n b a b a b a a b a a a b a a a b a a a010122111221222221111211k 从1到n-1 a 、 列选主元选取第k 列中绝对值最大元素ik ni k a ≤≤max 作为主元。
b 、 换行ik ij kj b b n k j a a ⇔+=⇔,,1,c 、 归一化 kkk k kj kk kj b a b n k j a a a ⇒+=⇒/,,1,/d 、 消元nk i b b a b n k j n k i a a a a i k ik i ij kj ik ij ,,1,,,1;,,1, +=⇒-+=+=⇒-2)、回代过程:由)~|~(B A 解出11,,,x x x n n -。
1,2,,1,/1-=⇒-⇒∑+=n k x x ab x a b k nk j j kjk nnn n2、追赶法 线性方程组为: ⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫ ⎝⎛-----n n n n n nn n n f f f f f x x x x x a b c a b c a b c a b c a 132********33322211做LU 分解为: ⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=⎪⎪⎪⎪⎪⎪⎪⎪⎭⎫⎝⎛=-1111,12133221n n nR L βββαγαγαγα分解公式:⎪⎪⎪⎩⎪⎪⎪⎨⎧-===-====-)1,,2,1(),,3,2(,),,3,2(111n i c n i b b n i a i i i i i i i i i αββγααγ 则⎩⎨⎧==⇒=⇒=y Ux fLy f LUx f Ax 回代公式: ⎪⎪⎩⎪⎪⎨⎧=-==-),,3,2(1111n i y f y f y i i i i i αγα⎩⎨⎧--=-==+)1,,2,1(1n n i x y x y x i i i i n n β五、实验步骤1、理解并掌握列选主元消去法与追赶法;2、画出列选主元消去法与追赶法的流程图3、使用VC 语言编写出相应的程序并调试验证通过1.高斯消元核心代码:void guass(double a[],int n,double b[],double x[]) { int i,j,m;double s;for(i=1,j=0;i<n;i++,j++) { for(m=i;m<n;m++){ s=a[j*n+j]/a[m*n+j]; //printf("%f ",s); //printf("\n");for(int k=j;k<n;k++) { a[m*n+k]=a[m*n+k]*s-a[(i-1)*n+k];}b[m]=b[m]*s-b[i-1];}}for(i=n-1;i>-1;i--){if(i==n-1)x[i]=b[i]/a[i*n+i];else{s=b[i];for(j=1;j<n-i;j++){s=s-a[i*n+n-j]*x[n-j];}x[i]=s/a[i*n+i];}}}运行结果如下:2.追赶法核心代码:void chase(float a[],int n,float l[],float u[]){int i;for(i=1;i<=n-1;i++){l[i*n+i-1]=a[i*n+i-1];if(i==1)l[0]=a[0];elsel[(i-1)*n+i-1]=a[(i-1)*n+i-1]-l[(i-1)*n+i-2]*u[(i-2)*n+i-1];u[(i-1)*n+i-1]=1;u[(i-1)*n+i]=a[(i-1)*n+i]/l[(i-1)*n+i-1];}l[(i-1)*n+i-1]=a[(i-1)*n+i-1]-l[(i-1)*n+i-2]*u[(i-2)*n+i-1];u[(i-1)*n+i-1]=1;}void solve(int n,float l[],float u[],float f[]){float y[4],x[4];for(int i=1;i<=n;i++){if(i==1)y[i-1]=f[0]/l[0];elsey[i-1]=(f[i-1]-l[(i-1)*n+i-2]*y[i-2])/l[(i-1)*n+i-1];}for(i=n;i>0;i--){if(i==n)x[i-1]=y[i-1];elsex[i-1]=y[i-1]-x[i]*u[(i-1)*n+i];}for(i=0;i<n;i++)printf("%f ",x[i]);}运行结果:七、实验注意事项注意如何定义数据结构以保存矩阵和解以降低算法的复杂性。
列主元素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 =。
列主元高斯消去法和列主元三角分解法解线性方程
b(k,:)=b(q,:);
b(q,:)=temp2;
end
%消元
fori=k+1:n
m(i,k)=A(i,k)/A(k,k);%A(k,k)将A(i,k)消为0所乘系数
A(i,k:n)=A(i,k:n)-m(i,k)*A(k,k:n);%第i行消元处理
b(i)=b(i)-m(i,k)*b(k);%b消元处理
用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A约化为具有简单形式的矩阵(上三角矩阵、单位矩阵等),而三角形方程组则可以直接回带求解
用高斯消去法解线性方程组 (其中A∈Rn×n)的计算量为:乘除法运算步骤为 ,加减运算步骤为 。相比之下,传统的克莱姆法则则较为繁琐,如求解20阶线性方程组,克莱姆法则大约要 次乘法,而用高斯消去法只需要3060次乘除法。
对方程组的增广矩阵经过k-1步分解后,可变成如下形式:
第k步分解,为了避免用绝对值很小的数 作除数,引进量
,于是有 = 。如果,则将矩阵的第t行与第k行元素互换,将(i,j)位置的新元素仍记为 或 ,然后再做第k步分解,这时
【列主元高斯消去法程序流程图】
【列主元高斯消去法Matlab主程序】
function x=gauss1(A,b,c)%列主元法高斯消去法解线性方程Ax=b
【列主元三角分解法程序流程图】
【列主元三角分解法Matlab主程序】
①自己编的程序:
function x=PLU(A,b,eps)%定义函数列主元三角分解法函数
if(length(A)~=length(b))%判断输入的方程组是否有误
disp('输入方程有误!')
return;
end
线性方程组的解法与应用
线性方程组的解法与应用一、引言线性方程组是数学中重要的概念之一,广泛应用于各个领域。
本文将介绍线性方程组的解法以及其在实际问题中的应用。
二、高斯消元法高斯消元法是求解线性方程组的一种经典方法,其基本思想是通过一系列变换将线性方程组化简为简化行阶梯形式,从而得到方程组的解。
1. 列主元素消去高斯消元法的第一步是选取列主元素,并进行消去操作。
选择列主元素的方法有多种,常用的是选取列中绝对值最大的元素作为主元素。
通过逐行操作,将其他行的对应元素通过消去或替换操作,将当前列的主元素下方的元素全部变为零。
2. 回代求解经过列主元素消去之后,线性方程组会被转化为简化行阶梯形式。
接下来通过回代求解方法,即从最后一行开始,逐行求解未知数的值。
将解代入上一行的方程中,逐步回代,直至求得所有未知数的值。
三、矩阵运算法除了高斯消元法外,矩阵运算法也是解决线性方程组的一种常见方法。
通过将系数矩阵与未知数矩阵进行运算,可以直接求解线性方程组。
1. 逆矩阵法若方程组的系数矩阵可逆,即其行列式不为零,则可以通过求解逆矩阵的方法来得到方程组的解。
将方程组转化为矩阵形式,即AX=B 的形式,其中A为系数矩阵,X为未知数矩阵,B为常数矩阵。
通过求解逆矩阵,即X=A^(-1)B,可以得到未知数矩阵的值。
2. 克拉默法则当方程组的系数矩阵为非奇异矩阵时,可以利用克拉默法则求解线性方程组。
该方法通过求解系数矩阵的各个子式的值,进而得到方程组的解。
具体步骤是将系数矩阵的各列依次替换为常数矩阵,求解出各个子式的值,然后将得到的解代入方程组中即可得到未知数的值。
四、线性方程组的应用线性方程组不仅仅在数学中具有重要意义,其在实际问题中的应用也非常广泛。
1. 物理问题中的应用线性方程组在描述物理问题中经常扮演着重要的角色。
例如,力学中的受力平衡问题、电路中的电流分布问题、热传导中的温度分布问题等,都可以通过建立线性方程组来求解。
2. 经济学问题中的应用线性方程组在经济学中也有广泛的应用。
数值计算基础Gauss列选主元消去法及追赶法
1、用Guass列选主元消去法求解方程组源程序代码:#include<stdio.h>#include<stdlib.h>#include<math.h>#define MAX_n 100#define PRECISION 0.0000001void MatrixInput(float A[][MAX_n],int m,int n)//输入数组{int i,j;float ftmp;printf("\n===Begin input Matrix elements===\n");for(i=1;i<=m;++i){printf("Input_Line %d : ",i);for(j=1;j<=n;++j){scanf("%f",&ftmp);A[i][j]=ftmp;}}}void MatrixOneColumnOutput(float A[][MAX_n],int n,int k)//输出方程的解{int i;for(i=1;i<=n;++i)printf("\nx[%d]=%f",i,A[i][k]);}int UpTriangle(float U[][MAX_n],int n)//解上三角方程组{int i,j;for(i=n;i>0;--i){if(fabs(U[i][i])<PRECISION)return 1;for(j=i+1;j<=n;++j)U[i][n+1]-=U[i][j]*U[j][n+1];U[i][n+1]/=U[i][i];}return 0;}void Swap(float *a,float *b)//a,b二个变量中的值交换{float ftmp;ftmp=*a;*a=*b;*b=ftmp;}int GaussElimination_column_select(float A[][MAX_n],int n)//选主元{ int i,j,k;float fTmp;for(i=1;i<n;++i){ //找主元所在行for(k=i,j=i+1;j<=n;++j)if(fabs(A[j][i])>fabs(A[k][i])) k=j;//二行交换for(j=i;j<=n+1;++j)Swap(&A[i][j],&A[k][j]);//消元if(fabs(A[i][i])<PRECISION)return 1;for(j=i+1;j<=n;++j)for(k=i+1;k<=n+1;++k)A[j][k]-=A[i][k]*A[j][i]/A[i][i];}UpTriangle(A,n);return 0;}void main(){int n;float A[MAX_n][MAX_n];printf("Input n=");scanf("%d",&n);if(n>=MAX_n-1){printf("\an must <%d!\n",MAX_n);exit(0);}MatrixInput(A,n,n+1);if(GaussElimination_column_select(A,n)) printf("\nGauss Failed!");else{printf("\nOutput Solution:");MatrixOneColumnOutput(A,n,n+1);printf("\n\n");}}运行结果:2、用追赶法求解方程组#include<stdio.h>#include<math.h>double ZhuiGanFa(double a[],double b[],double c[],double d[],int n); void main(){int n,i;double a[10],b[10],c[10],d[10];printf("Input n value:");/*表示n维向量*/scanf("%d",&n);printf("\n");printf("Now input the (a_i),i=1,2,…,%d: ",n-1);for(i=0;i<=n-2;i++)scanf("%lf",&a[i]);printf("Now input the (b_i),i=1,2,…,%d: ",n);for(i=0;i<=n-1;i++)scanf("%lf",&b[i]);printf("Now input the (c_i),i=1,2,…,%d: ",n-1);for(i=0;i<=n-2;i++)scanf("%lf",&c[i]);printf("Now input the (d_i),i=1,2,…,%d: ",n);for(i=0;i<=n-1;i++)scanf("%lf",&d[i]);ZhuiGanFa(a,b,c,d,n);}double ZhuiGanFa(double a[],double b[],double c[],double d[],int n) {int i;double t;if(fabs(b[0])<=fabs(c[0])||fabs(c[0])<=0||fabs(b[n-1])<fabs(a[n-2])||fabs(a[n-2])<=0)/*判断是否符合追赶法条件*/{printf("fail\n");return 0;}for(i=1;i<=n-2;i++){if(fabs(b[i])<(fabs(a[i])+fabs(c[i]))||a[i]*c[i]==0){printf("fail\n");return 0;}}c[0]=c[0]/b[0];d[0]=d[0]/b[0];for(i=1;i<=n-2;i++){t=b[i]-a[i-1]*c[i-1];c[i]=c[i]/t;d[i]=(d[i]-a[i-1]*d[i-1])/t;}d[n-1]=(d[n-1]-a[n-2]*d[n-2])/(b[n-1]-a[n-2]*c[n-2]);for(i=n-2;i>=0;i--)d[i]=d[i]-c[i]*d[i+1];printf("\n");for(i=0;i<=n-1;i++)printf("x(%d)=%f\n",i,d[i]);printf("\n");return 1;}运行结果1:运行结果2:。
列主元高斯消去法和列主元三角分解法解线性方程
计算方法实验报告1【课题名称】用列主元高斯消去法和列主元三角分解法解线性方程【目的和意义】高斯消去法是一个古老的求解线性方程组的方法,但由它改进得到的选主元的高斯消去法则是目前计算机上常用的解低阶稠密矩阵方程组的有效方法。
用高斯消去法解线性方程组的基本思想时用矩阵行的初等变换将系数矩阵A 约化为具有简单形式的矩阵(上三角矩阵、单位矩阵等),而三角形方程组则可以直接回带求解 用高斯消去法解线性方程组b Ax =(其中A ∈Rn ×n )的计算量为:乘除法运算步骤为32(1)(1)(21)(1)(1)262233n n n n n n n n n n nMD n ----+=+++=+-,加减运算步骤为(1)(21)(1)(1)(1)(25)6226n n n n n n n n n n AS -----+=++=。
相比之下,传统的克莱姆法则则较为繁琐,如求解20阶线性方程组,克莱姆法则大约要19510⨯次乘法,而用高斯消去法只需要3060次乘除法。
在高斯消去法运算的过程中,如果出现abs(A(i,i))等于零或过小的情况,则会导致矩阵元素数量级严重增长和舍入误差的扩散,使得最后的计算结果不可靠,所以目前计算机上常用的解低阶稠密矩阵方程的快速有效的方法时列主元高斯消去法,从而使计算结果更加精确。
2、列主元三角分解法高斯消去法的消去过程,实质上是将A 分解为两个三角矩阵的乘积A=LU ,并求解Ly=b 的过程。
回带过程就是求解上三角方程组Ux=y 。
所以在实际的运算中,矩阵L 和U 可以直接计算出,而不需要任何中间步骤,从而在计算过程中将高斯消去法的步骤进行了进一步的简略,大大提高了运算速度,这就是三角分解法 采用选主元的方式与列主元高斯消去法一样,也是为了避免除数过小,从而保证了计算的精确度【计算公式】1、 列主元高斯消去法设有线性方程组Ax=b ,其中设A 为非奇异矩阵。
方程组的增广矩阵为第1步(k=1):首先在A 的第一列中选取绝对值最大的元素1l a ,作为第一步的主元素:111211212222112[,]n n n l n nn n a a a a b a a a b a a a b ⎡⎤⎢⎥⎢⎥⎢⎥=⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦a b然后交换(A ,b )的第1行与第l 行元素,再进行消元计算。
(完整版)2.3高斯列主元消去法
2.3高斯列主元消去法解线性方程组一:问题的提出我们都知道,高斯列主元素消去法是计算机上常用来求解线性方程组的一种直接的方法。
就是在不考虑舍入误差的情况下,经过有限步的四则运算可以得到线性方程组的准确解的一类方法。
实际运算的时候因为只能有限小数去计算,因此只能得到近似值。
在实际运算的时候,我们很多时候也常用高斯消去法。
但是高斯消去法在计算机中运算的时候常会碰到两个问题。
1.一旦遇到某个主元等于0,消元过程便无法进行下去。
2.在长期使用中还发现,即使消元过程能进行下去,但是当某个主元的绝对值很小时,求解出的结果与真实结果相差甚远。
为了避免高斯消去法消元过程中出现的上述两个问题,一般采用所谓的选择主元法。
其中又可以分为列选主元和全面选主元两种方法。
目前计算机上常用的按列选主元的方法。
因此我在这里做的也是列选主元高斯消去法。
二、算法的基本思想大家知道,如果一个线性方程组的系数矩阵是上三角矩阵时,即这种方程组我们称之为上三角方程组,它是很容易求解的。
我们只要把方程组的最下面的一个方程求解出来,在把求得的解带入倒数第二个方程,求出第二个解,依次往上回代求解。
然而,现实中大多数线性方程组都不是上面所说的上三角方程组,所以我们有可以把不是上三角的方程通过一定的算法化成上三角方程组,由此我们可以很方便地求出方程组的解。
高斯消元法的目的就是把一般线性方程组简化成上三角方程组。
于是高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。
三、算法的描述1、设有n 元线性方程组如下:1111n n nn a a a a ⎛⎫ ⎪ ⎪ ⎪⎝⎭K M OM L1n x x ⎛⎫ ⎪ ⎪ ⎪⎝⎭M =1n b b ⎛⎫ ⎪ ⎪ ⎪⎝⎭M 2、 第一步:如果a 11!=0, 令l i1= ai1/a11, I= 2,3,……,n用(-li1)乘第一个方程加到第i 个方程上,得同解方程组:a (1)11 a (1)12 . . . a (1)1nx 1 b (1)1a (1)21 a (1)22 . . . a (1)2n x 2b (1)2. . . . . . . = .a (1)n-11 a (1)n-12 . . a (1)n-1n x n-1b (1)n-1a (1)n1 a (1)n2 . . . a (1)nn x nb (1)n简记为:A (2) x = b (2)其中a (2)ij = a (1)ij – l i1 * a (1)1j , I ,j = 2,3,..,nb(2)I = b(1)I– l i1 * b(1)1 , I = 2,3,...,n第二步:如果a(2)22 != 0,令l i2= a(2)i2/a(2)22, I= 3,……,n依据同样的原理,对矩阵进行化间(省略),依次下去,直到完成!最后,得到上三角方程组:a(1)11a(1)12 . . . a(1)1n x1b(1)10 a(1)22 . . . a(1)2n x2b(1)2. . . . . . . = .0 0 . . a(n-1)n-1n x n-1b(n-1)n-10 0 . . . a(n)nn x n b(n)n简记为:A(n) x = b(n)最后从方程组的最后一个方程进行回代求解为:X n = b(n) / a(n)nnX i = ( b(k)k - a(k)kj x j ) / a(k)kk以上为高斯消去法的基本过程。
用列主元消去法解下列方程组
用列主元消去法解下列方程组列主元消去法是一种求解线性方程组的方法,也称为高斯消元法。
它的基本思想是通过一系列的行变换将增广矩阵化为阶梯形矩阵,然后通过回代求解出未知数的值。
下面我们来详细介绍一下列主元消去法的具体步骤。
首先,我们将线性方程组的系数矩阵和常数向量组成增广矩阵,即:$$\left[\begin{matrix}a_{11} & a_{12} & \cdots & a_{1n} & b_1 \\a_{21} & a_{22} & \cdots & a_{2n} & b_2 \\\vdots & \vdots & \ddots & \vdots & \vdots \\a_{n1} & a_{n2} & \cdots & a_{nn} & b_n\end{matrix}\right]$$然后,我们选择第一列中绝对值最大的元素作为主元素,并将其所在的行交换到第一行。
如果第一列中所有元素的绝对值都为0,则选择第二列中绝对值最大的元素作为主元素,并将其所在的行交换到第一行。
以此类推,直到所有列都处理完毕。
接下来,我们将第一行的主元素除以它的系数,然后用第一行的主元素消去第二行、第三行、……、第n行的主元素。
具体地,我们将第二行的第一列元素除以第一行的主元素,然后将第一行乘以这个数并减去第二行,使得第二行的第一列元素变为0。
同样地,我们将第三行、第四行、……、第n行的第一列元素都消去。
然后,我们选择第二列中绝对值最大的元素作为主元素,并将其所在的行交换到第二行。
然后,我们将第二行的主元素除以它的系数,然后用第二行的主元素消去第三行、第四行、……、第n行的主元素。
以此类推,直到所有列都处理完毕。
最后,我们得到一个阶梯形矩阵,即:$$\left[\begin{matrix}a_{11}^{'} & a_{12}^{'} & \cdots & a_{1n}^{'} & b_1^{'} \\0 & a_{22}^{'} & \cdots & a_{2n}^{'} & b_2^{'} \\\vdots & \vdots & \ddots & \vdots & \vdots \\0 & 0 & \cdots & a_{nn}^{'} & b_n^{'}\end{matrix}\right]$$其中,$a_{ii}^{'}$表示第$i$行第$i$列的主元素,$b_i^{'}$表示第$i$行的常数项。
用追赶法解方程组步骤
用追赶法解方程组步骤用追赶法解方程组的步骤追赶法是一种常用于解线性方程组的方法,也被称为托马斯算法。
它适用于系数矩阵为三对角矩阵的方程组,即只有主对角线和两个相邻的副对角线上有非零元素的方程组。
下面将介绍用追赶法解方程组的具体步骤。
1. 确定方程组的形式我们需要将线性方程组转化为矩阵形式,即AX=B,其中A是系数矩阵,X是未知数向量,B是常数向量。
在追赶法中,系数矩阵A 应为三对角矩阵。
2. 分解系数矩阵接下来,我们需要对系数矩阵A进行分解。
将系数矩阵A分解为L、D、U三个矩阵的乘积,即A=LDU分解。
其中L是下三角矩阵,D 是对角矩阵,U是上三角矩阵。
分解的目的是简化方程组的求解过程。
3. 前向追赶在前向追赶过程中,我们需要解决方程组LY=B,其中Y是辅助向量。
首先,我们可以从第一个方程开始,直接求解出Y的第一个分量。
然后,利用递推关系式,依次求解出Y的其他分量。
这个过程类似于追逐,从前往后一步步追赶。
4. 消元接下来,我们需要进行消元操作,将方程组转化为DUX=Y。
这个过程中,我们需要利用到前面分解得到的L、D和U矩阵。
通过将L矩阵与方程组相乘,可以消去X的前面分量。
然后,通过将D矩阵与方程组相乘,可以将X的分量消为1。
最后,通过将U矩阵与方程组相乘,可以将X的后面分量消去。
5. 后向追赶在后向追赶过程中,我们需要解决方程组UX=Y,即通过追逐的方式从后往前求解X的分量。
首先,我们可以从最后一个方程开始,直接求解出X的最后一个分量。
然后,利用递推关系式,依次求解出X的其他分量。
6. 检验解的正确性在求解完成后,我们需要检验解的正确性。
将求得的X代入原方程组中,验证方程组是否成立。
如果方程组成立,那么我们得到的解就是正确的。
总结:追赶法是一种有效解线性方程组的方法,它通过将系数矩阵分解为L、D、U三个矩阵,并利用前向追赶和后向追赶的方式求解未知数。
追赶法的优点是求解过程简单快速,适用于特定类型的方程组。
python列主元消去法
python列主元消去法Python列主元消去法是一种常见的线性代数算法,也是一种求解线性方程组的有效方法。
本文将介绍Python列主元消去法的原理、实现及其应用。
一、原理列主元消去法是一种高斯消元法的改进方法,通过选取矩阵中每一列的绝对值最大的元素作为主元,然后将该主元所在的行与第一行交换,以确保第一行主元最大,然后通过消元操作将该主元所在列下方的所有元素消为0。
接着,选取第二列中绝对值最大的元素作为第二个主元,将其所在的行与第二行交换,并在第二行下方的所有行上面进行列消元,以及如此往复,直到消元为止。
这是列主元消去法的基本思想。
二、实现下面的Python代码演示了如何使用列主元消去法求解线性方程组:```pythonimport numpy as npdef gauss_elimination(A, b):n = len(b)# 消元过程for i in range(n-1):max_index = np.argmax(np.abs(A[i:, i])) + iif max_index != i:A[[i, max_index], :] = A[[max_index, i], :]b[[i, max_index]] = b[[max_index, i]]for j in range(i+1, n):factor = A[j, i] / A[i, i]A[j, :] -= factor * A[i, :]b[j] -= factor * b[i]# 回代过程x = np.zeros(n)for i in range(n-1, -1, -1):x[i] = (b[i] - np.dot(A[i, i+1:], x[i+1:])) / A[i, i]return x```三、应用列主元消去法可以用于求解大型线性方程组,例如在工程、物理、金融等领域中广泛使用。
除了求解线性方程组外,列主元消去法还可以用于求解矩阵的逆、求解矩阵的行列式等。
列选主元高斯消去法
列选主元高斯消去法
列选主元高斯消去法是一种常用的线性方程组求解方法,在求解大规模线性方程组时具有较高的数值稳定性和计算效率。
该方法的基本思想是,通过选取主元来消除非主元系数的影响,以减小计算误差。
具体步骤如下:
1. 首先将线性方程组的系数矩阵进行列选主元,即对每一列选取绝对值最大的元素所在的行,然后将该行与第一行交换位置。
2. 对于第一列,将选取的主元所在行除以主元的值,使主元变为1。
3. 利用第一行的主元,通过消去操作将其他行的第一列元素变为零。
具体操作是,对于每一行,将该行与第一行乘以适当的倍数后相减,使得第一列元素为零。
4. 重复以上步骤,对第二列以及其后的列重复进行列选主元和消去操作,直到系数矩阵变成上三角矩阵。
5. 根据上三角矩阵进行回代求解,从最后一行开始,依次代入已求解的变量值,计算出未知数的值。
需要注意的是,在进行列选主元时,要注意避免主元为零或接近零的情况,以免造成计算错误或数值不稳定性。
列选主元高斯消去法可以有效地提高线性方程组的求解精度和计算效率,特别适用于存在较大数值差异或特殊矩阵结构的情况。
然而,在某些情况下,该方法可能会导致数值不稳定性或计算量较大,因此在实际应用中需综合考虑问题的特点和求解需求,选择合适的方法。
解三对交线方程组的追赶法
VS
矩阵元素的微小变化
在三对交线方程组中,矩阵元素的微小变 化可能会导致解的巨大变化。这种敏感性 使得追赶法在面对某些问题时表现出数值 不稳定性。
提高数值稳定性和减小误差方法
选择合适的算法参数
在追赶法中,可以通过选择合适的算法参数来提高数值稳定性。例如,可以采用部分选主元策略来避免矩阵元素的微 小变化对解的影响。
优缺点分析
优点
追赶法具有计算量小、存储量低、易于编程实现等优点。对于大规模的三对角 线性方程组,追赶法通常比其他方法更加高效。
缺点
追赶法的适用范围有限,仅适用于系数矩阵为三对角矩阵的线性方程组。此外, 当系数矩阵不满足对角占优等条件时,追赶法可能无法收敛或收敛速度较慢。
Part
02
三对交线方程组数学模型建立
问题描述与定义
三对交线方程组
在二维平面上,给定三对直线,每对直线相交于一个点,这三对交线构成的方程组称为三对交线方程 组。
求解目标
通过给定的三对交线信息,求解出这三对直线的交点坐标。
数学模型构建方法
直线方程表示
在二维平面上,一条直线可以用一般式方程 $Ax + By + C = 0$ 表示,其中 $A, B$ 不同时为0。
THANKS
感谢您的观看
回代过程
从最后一个方程开始,依次将已知量代入方程求 解,得到未知量的值。此过程称为回代过程。
关键算法实现技巧
存储优化
追赶法中的系数矩阵是三对角 的,因此可以采用一维数组进 行存储,节省存储空间。
消元技巧
在消元过程中,需要注意消元 顺序和消元系数的选择,以确 保消元过程的稳定性和效率。
回代技巧
在回代过程中,需要按照正 确的顺序将已知量代入方程 求解,避免计算错误。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
重庆理工大学数学与统计学院数值分析课程设计成绩评定书设计题目:用列主元消去法和追赶法求解带有边值问题的线性方程组专业班学号学生姓名指导教师用列主元消去法和追赶法求解线性方程组摘要:根据高斯消去法的理论知识,通过MATLAB 工具编写函数,运用列主元消去法和追赶法来求解线性方程组。
在消元过程中可能出现)(a k kk0 的情况,这时就可以用列主元消去法来解决,它的特点是每次在系数矩阵中依次按列在主对角线及以下的元素中,选取绝对值最大的元素作为主元,将它调到主对角线上,然后用它消去主对角线以下的元素,最后化为同解的上三角形方程组去求解;而在实际问题中,如求解系数矩阵为对角占优的三对角线性方程组,用追赶法求解就显得更方便。
可以看出,两种方法对于求解线性方程组都具有可行性和准确性。
关键词:高斯消去法;列主元消去法;追赶法;MA TLAB一、问题提出. 考虑两点边值问题()()⎪⎩⎪⎨⎧==<<=+.11,00,10,22y y a a dx dy dx y d ε容易知道它的精确解为.1111ax e ea y x+⎪⎪⎭⎫⎝⎛---=--εε为了把微分方程离散,把[]1,0区间n 等分,令nh 1=,ih x i =,,1,,2,1-=n i 得到差分方程,21211a hy y hy y y ii i i i =-++-++-ε简化为()(),2211ah y y h y h i i i =++-+-+εεε从而离散后得到的线性方程组的系数矩阵为()()()()⎥⎥⎥⎥⎥⎥⎦⎤⎢⎢⎢⎢⎢⎢⎣⎡+-++-++-++-=h h h hh hh A εεεεεεεεεε2222对1=ε,6.0=a ,100=n ,分别用列主元消去法和追赶法求解线性方程组,然后比较与精确解的误差,对结果进行分析。
改变n ,讨论同样问题。
二、问题求解2.1列主元消去法2.1.1方法思想高斯消去法是一个古老的求解线性方程组的方法,但它的改进、变形得到的主元素消去法仍然是计算机上常用的计算方法,高斯消元法的基本思想是:通过逐次消元将所给的线性方程组化为上三角形方程组,继而通过回代过程求解线性方程组。
在利用高斯消去法解方程组时,小主元可能产生麻烦,故应避免采用绝对值小的主元素)(a k kk。
对一般矩阵来说,最好每一步选取系数矩阵(或消元后的低阶矩阵)中绝对值最大的元素最为主元素,以使高斯消去法具有较好的数值稳定性,这是全元素消去法,在选主元时需要花费较多的机器时间,目前主要使用的是列主元消去法。
它的特点是每次在系数矩阵中依次按列在主对角线及以下的元素中,选取绝对值最大的元素作为主元,将它调到主对角线上,然后用它消去主对角线以下的元素,最后化为同解的上三角形方程组去求解。
具体算法实现步骤为: a.构造增广矩阵设系数矩阵为A=1111n n nn a a a a ⎛⎫ ⎪ ⎪ ⎪⎝⎭设增广矩阵为B=111121221|||n n n nnn a a b a a b a a b ⎛⎫ ⎪ ⎪ ⎪ ⎪⎝⎭b. 找到每列的绝对值的最大的数c. 行变换(重复b-c)d. 消去()()/,(1,2,,);k k ik ikkkm a a k n ==(1)()(),(,1,,);k k k ijijik kja a m a i j k n +=-=+(1)(),(1,,);k kk ii ik b b m bi k n +=-=+e. 回代()()/;n n n nnnX b a =()()()1()/;k nk k k kkj j kkj k X b a x a =+=-∑2.1.2 matlab 代码实现调用已建立的gaussLinearEquation 函数,求解该问题 A=zeros(100,100); for i=1:99 A(i+1,i)=1; A(i,i+1)=1.01; end for i=1:100 A(i,i)=-2.01; end A;b=zeros(100,1);for i=1:100b(i,1)=0.00006;endb;gaussLinearEquation(A,b)y=(0.4/(1-exp(-1)))*(1-exp(-x))+0.6*x2.1.3运行结果x=-0.0035 -0.0068 -0.0101 -0.0133 -0.0164 -0.0194 -0.0223 -0.0251 -0.0279 -0.0305 -0.0331 -0.0356 -0.038 -0.0403 -0.0425 -0.0447 -0.0468 -0.0488 -0.0507 -0.0525 -0.0543 -0.0559 -0.0575 -0.0591 -0.0605 -0.0619 -0.0632 -0.0644 -0.0656 -0.0667 -0.0677 -0.0687 -0.0696 -0.0704 -0.0711 -0.0718 -0.0724 -0.073 -0.0735 -0.0739 -0.0742 -0.0745 -0.0748 -0.0749 -0.075 -0.0751 -0.0751 -0.075 -0.0749 -0.0747 -0.0744 -0.0741 -0.0738 -0.0734 -0.0729 -0.0724 -0.0718 -0.0712 -0.0705 -0.0697 -0.0689 -0.0681 -0.0672 -0.0663 -0.0653 -0.0642 -0.0631 -0.062 -0.0608 -0.0596 -0.0583 -0.057 -0.0556 -0.0542 -0.0527 -0.0512 -0.0496 -0.048 -0.0464 -0.0447 -0.043 -0.0412 -0.0394 -0.0375 -0.0356 -0.0337 -0.0317 -0.0297 -0.0276 -0.0255 -0.0234 -0.0212 -0.019 -0.0168 -0.0145 -0.0122 -0.0098 -0.0074 -0.005 -0.0025所得精确解y为:-0.0043 -0.0084 -0.0125 -0.0165 -0.0203 -0.024 -0.0276 -0.0311 -0.0346 -0.0379 -0.0412 -0.0443 -0.0473 -0.0502 -0.053 -0.0557 -0.0584 -0.0609 -0.0633 -0.0656 -0.0679 -0.0699 -0.072 -0.074 -0.0758 -0.0775 -0.0792 -0.0807 -0.0823 -0.0837 -0.0849 -0.0862 -0.0874 -0.0884 -0.0893 -0.0902 -0.091 -0.0917 -0.0924 -0.0929 -0.0933 -0.0936 -0.094 -0.0942 -0.0943 -0.0944 -0.0944 -0.0943 -0.0942 -0.0939 -0.0935 -0.0931 -0.0927 -0.0922 -0.0916 -0.091 -0.0902 0.0894 -0.0885 -0.0875 -0.0865 -0.0855 -0.0843 -0.0832 -0.0819 -0.0805 -0.0791 -0.0777 -0.0761 -0.0746 -0.073 -0.0713 -0.0695 -0.0678 -0.0659 -0.064 -0.0619 -0.0599 -0.0579 -0.0557 -0.0536 -0.0513 -0.0491 -0.0467 -0.0443 -0.0419 -0.0394 -0.0369 -0.0343 -0.0316 -0.029 -0.0263 -0.0235 -0.0208 -0.0179 -0.0151 -0.0121 -0.0091 -0.0062 -0.00312.2追赶法2.2.1方法思想在一些实际问题中,例如解常微分方程边值问题,解热传导方程以及船体数学放样中建立三次样条函数等,都会要求解系数矩阵为对角占优势的三对角方程组,但这里我们只解决关于求解常微分方程边值的问题。
下面介绍追赶法:求解fAx 等价于解两个三角形方程组:① f Ly =,求y ;②y Ux =,求x . 从而得到解三对角线方程组的追赶法公式: (1)计算{i β}的递推公式111/b c =β,,3,2),/(1=-=-i a b c i i i i i ββ…,n -1;(2)解f Ly = 111/y b f =,)/()(11----=i i i i i i i a b y a f y β,=i 2,3,…,n ; (3)解y Ux = n n y =x ,1+-=i i i i x y x β,=i n -1,n -2,…,2,1.我们将计算系数→→21ββ…1n -→β及→→21y y …→n y 的过程称为追的过程,将计算方程组的解→→-1n n x x …1x →的过程称为赶的过程。
追赶法公式实际上就是把高斯消去法用到求解三对角线方程组上去的结果。
这是由于A 特别简单,因此使得求解的计算公式非常简单,而且计算量仅为5n -4次乘除法,而另外增加解一个方程组2f Ax =仅增加3n -2次乘除计算。
所以,追赶法的计算量是最小的。
2.2.2matlab 代码实现调用zhuiganfa 函数求解:a=zeros(1,100); b=zeros(1,100); clc;c=zeros(1,100); f=zeros(100,1); for i=2:100 a(1,i)=1; end a;for i=1:100b(1,i)=-2.01;endb;for i=1:99c(1,i)=1.01;endc;for i=1:100f(i,1)=0.00006;endf;[x,y,beta]=zhuiganfa(a,b,c,f)2.2.3、运行结果由于值太多,我们仅选取前10组数据k x(k) y(k) beta(k)0 -0.0035 -0.0000 -0.50251 -0.0068 -0.0001 -0.67002 -0.0101 -0.0001 -0.75373 -0.0133 -0.0001 -0.80404 -0.0164 -0.0001 -0.83755 -0.0194 -0.0002 -0.86146 -0.0223 -0.0002 -0.87937 -0.0251 -0.0002 -0.89338 -0.0279 -0.0003 -0.90449 -0.0305 -0.0003 -0.9135对比之下,和前面的列主元所得的x值完全相同,从而验证了该算法的可行性和正确性,相比之下,对于求解系数矩阵为对角占优的三对角线性方程组时,追赶法显得更简单,运行较快。