1、(i=1,2,3,n).将(2-1)中第i个方程减去第一个方程乘以(i=1,2,3,n),完成第一次消元, (2-2)其中:;:简记为:按上述方法完成n-1次消元后得到。同解的三角方程组:2 回代过程:按逆序逐步回代得到方程的解。(3)算法:(5)Matlab程序代码:function RA,RB,n,X=gaus(A,b)B=A,b;n = length(b);RA = rank(A);RB= rank(B);zhicha = RB-RA;if(zhicha=0) disp(因为RARB,所以此方程组无解); return;endif RA=RB if RA = n因为RA=RB=n,所以此
2、方程有唯一解 X=zeros(n,1); for p = 1:n-1 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 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); else 因为RA=RBA=1 1 1;12 -3 3;-18 3 -1;b=6;15;-15;RA,RB,n,X=gaus(A,b)因为RA=RB=n,所以此方
3、程有唯一解RA = 3RB =n =X = 1.0000 2.00003.0000二、 主元素法1.列主元素法消元(1)基本思想:在每次消元前,在要消去未知数的系数中找到绝对值最大的系数作为主元,通过对换行将其换到对角线上,然后进行消元.(2)消元过程:与Gauss很类似,每次对对角线换成最大的值,后面过程与Gauss基本相同。如此经过n-1步,(2-1)的增广矩阵A,b被化为上三角矩阵;回代过程:同Gauss算法一样回代求解。det-1对于k=1,2,3,n-1;|aik,k|=max|aik|(kin)(i)如果aik=0,则停止计算(det(A)=0) (ii)如果aik=k,则zhua
4、n(i)换行 akj aik,j(j=k,k+1,n) bki A(j,i) = A(j,i)/A(i,i); %下面计算U的第i行值 if i= 1 m = 0; for k = 1:i-1 m = m+A(i,k)*A(k,j); A(i,j) = A(i,j)-m; %下面计算L的第i列值 if i = 1&j l = 0; l = l+A(j,k)*A(k,i); A(j,i) = (A(j,i)-l)/A(i,i);%将LU的值分别加入 U(i,j) = A(i,j); for j = 1: if i = j L(i,j) = 1; L(i,j) = A(i,j);% LY=B,UX
5、=Y,进行求解Ab = L,bY = zeros(n,1);Y(1) = Ab(1,n+1)/Ab(1,1);for i = 2: Y(i) = Y(i)+Ab(i,j)*Y(j); Y(i) = (Ab(i,n+1)-Y(i)/Ab(i,i);Ab = U,Y;X = zeros(n,1);X(n) = Ab(n,n+1)/Ab(n,n);for i = n-1: for j = i+1: X(i) = X(i)+Ab(i,j)*X(j); X(i) = (Ab(i,n+1)-X(i)/Ab(i,i); L,U,Y,X = Doolittle(A,b)运行结果:Ab = 1.0000 0 0
6、 6.0000 12.0000 1.0000 0 15.0000 -18.0000 -1.4000 1.0000 -15.0000L = 1.0000 0 0 12.0000 1.0000 0 -18.0000 -1.4000 1.0000U = 1.0000 1.0000 1.0000 0 -15.0000 -9.0000 0 0 4.4000Y = 6.0000 -57.0000 13.2000四、解三角方程组的追赶法1.设系数矩阵为三对角矩阵则方程组Ax=f称为三对角方程组。2.设矩阵A非奇异,A有Crout分解A=LU,其中L为下三角矩阵,U为单位上三角矩阵,记先依次求出L,U中的元素
7、后,令Ux=y,先求解下三角方程组Ly=f得出y,再求解上三角方程组Ux=y。求解三对角方程组的2追赶法将矩阵三角分解的计算与求解两个三角方程组的计算放在一起,使算法吏为紧凑。其计算公式为:3.算法:1.输入a=(a2,,an), b=(b1,,bn), c=(c1,,cn-1), d=(d1,,dn),n2.对i=2,3,n ai/bi-1=ai (li) bi-ci-1ai=bi (ui) di-aidi-1=di (yi)3.dn/bn=dn(xn)4.对i=n-1,n-2,1 (di-cidi+1)/bi=di (xi)5.输出d=x,停机4.Matlab程序:clc;clear;%如
8、果需要验证其他矩阵的解,只需更改A、B和n的值即可A = 2,1,0,0;1,3,1,0;0,1,4,-1;0,0,2,3B = 3;5;4;5n = 4;%获得A中不为0的数存到相应数组中 b(i) = A(i,j); if i = j-1 c(j-1) = A(i,j); if j = i-1 a(i) = A(i,j);%将变换后的值存入相应矩阵中u(1) = b(1);n; l(i) = a(i)/u(i-1); u(i) = b(i)-l(i)*c(i-1); U(i,j) = u(i); U(i,j) = c(i); L(i,j) = l(i);disp(增广矩阵AB = L,BB
9、 = zeros(n,1);B(1) = AB(1,n+1)/AB(1,1); B(i) = B(i)+AB(i,j)*B(j); B(i) = (AB(i,n+1)-B(i)/AB(i,i);解方程LY=B得Y = BAB = U,B;B(n) = AB(n,n+1)/AB(n,n);方程的解为:X = BA = 2 1 0 0 1 3 1 0 0 1 4 -1 0 0 2 3B = 5 4增广矩阵AB = 1.0000 0 0 0 3.0000 0.5000 1.0000 0 0 5.0000 0 0.4000 1.0000 0 4.0000 0 0 0.5556 1.0000 5.000
10、0解方程LY=B得 3.5000 2.6000 3.55561.0000五、算法比较:Gauss消去法是针对一般的线性方程组,与线性代数中的初等变换解线性方程组方法类似。高斯消元法的算法复杂度是O(n3);这就是说,如果系数矩阵的是n n,那么高斯消元法所需要的计算量大约与n3成比例。高斯消元法可用在任何域中。高斯消元法对于一些矩阵来说是稳定的。对于普遍的矩阵来说,高斯消元法通常也是稳定的。LU分解法比较简便迅速,当解多个系数矩阵为A的线性方程组时,LU分解法就显得特别优越,只要对系数矩阵做一次LU分解,以后只要解三角形方程即可。也可以更具系数矩阵的形状来设计算法。追赶法只是针对系数矩阵为三对角阵的方程组,因此是一种特殊的方程组。此方法效率较高,不过不适用于一般的线性方程组。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1