Lab06.Gauss列主元素消去法实验
【实验目的和要求】
1.使学生深入理解并掌握Gauss消去法和Gauss列主元素消去法步骤; 2.通过对Gauss消去法和Gauss列主元素消去法的程序设计,以提高学生
程序设计的能力;
3.对具体问题,分别用Gauss消去法和Gauss列主元素消去法求解。通过对结果的分析比较,使学生感受Gauss列主元素消去法优点。 【实验内容】
1.根据Matlab语言特点,描述Gauss消去法和Gauss列主元素消去法步骤。 2.编写用不选主元的直接三角分解法解线性方程组Ax=b的M文件。要求输出Ax=b中矩阵A及向量b,A=LU分解的L与U,detA及解向量x。 3.编写用Gauss列主元素消去法解线性方程组Ax=b的M文件。要求输出Ax=b中矩阵A及向量b、PA=LU分解的L与U、detA及解向量x,交换顺序。
4.给定方程组
3.011.27(1) 0.9876.034.164.811.99x111.23x219.34x31
103(2) 5272.099991106501x182x25.9000011x352x41 先用编写的程序计算,再将(1)中的系数3.01改为3.00,0.987改为0.990;将(2)中的系数2.099999改为2.1,5.900001改为9.5,再用Gauss列主元素消去法解,并将两次计算的结果进行比较。
【实验仪器与软件】
1.CPU主频在1GHz以上,内存在128Mb以上的PC;
2.Matlab 6.0及以上版本。 实验讲评:
实验成绩:
评阅教师:
09级数信(1)班 姓名:马勇 学号:2009051430
200 年 月 日
Lab06.Gauss列主元素消去法实验
第一题:
1、算法描述:
Ⅰ、Gauss消去法由书上定理5可知 设Ax=b,其中A∈R
^(n
(k)0(k1,2,....,n1),则可通过高斯消去法将Ax=b约化为等价的 (1)如果akk角形线性方程组,且计算公式为:
① 消元计算(k=1,2,….,n-1)
mikaik/akk,ik1,...,n,aijbi(k1)(k)(k)aijmikakj,i,jk1,...,n,
(k)(k)(k1)bi(n)(k)mikbk,ik1,...,n.(n)n(k)② 回带公式
xnbnxi(b/ann,(i)iji1aiixj)/aii,in1,...,2,1.(i)(i)
(2)如果A为非奇异矩阵,则可通过高斯消去法将方程组Ax=b约化方程组为上三角矩阵
以上消元和回代过程总的乘除法次数为
n3n33n2n3n33,加减法次数为
3n225n6n33
以上过程就叫高斯消去法。 Ⅱ、Gauss列主元素消去法 设Ax=b.本算法用A的具有行交换的列主元素消去法,消元结果冲掉A,乘法mik冲掉aij,计算解x冲掉常数项b,行列式存放在det中。
1、 det1
2、对于k=1,2,…,n-1 (1) 按列主元
aik,kmaxaikkin
(2) 如果aik,k0,则停止(det(A)=0)
09级数信(1)班 姓名:马勇 学号:2009051430
(3) 如果ik=k则转(4)
mikakkaijaijmik*akj换行:
nbi(biji1aij*bj)/aiimik*bk
detann*detann0bnbn/ann(4) 消元计算对于 i=k+1,…,n ① aikmik=aik/akk
② 对于j=k+1,…,n
aijaijmik*akj
③ bibimik*bk
(5) detakk*d et3、如果ann0,则计算停止(det(A)=0) 4、回代求解 (1)bnbn/ann (2)对于i=n-1,…,2,1
nbi(biji1aij*bj)/aii
5、detann*det
第二题:
编写用不选主元的直接三角分解法解线性方程组Ax=b的M文件。要求输出Ax=b中矩阵A及向量b,A=LU分解的L与U,detA及解向量x。 编写M文件如下:
function [x,L,U]=Doolittle(A,b) N = size(A); n = N(1);
L = eye(n,n); U = zeros(n,n);
09级数信(1)班 姓名:马勇 学号:2009051430
U(1,1:n) = A(1,1:n); L(1:n,1) = A(1:n,1)/U(1,1); for k=2:n for i=k:n
U(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i) end
for j=(k+1):n
L(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k) end end
y = SolveDownTriangle(L,b); x = SolveUpTriangle(U,y);
function y=SolveDownTriangle(L,b) N=size(L); n=N(1); for i=1:n if(i>1)
s=L(i,1:(i-1))*y(1:(i-1),1); else s=0; end
y(i,1)=(b(i)-s)/L(i,i); end
function x=SolveUpTriangle(U,y) N=size(U); n=N(1); for i=n:-1:1 if(i x(i,1)=(y(i)-s)/U(i,i); end 第三题: 编写用Gauss列主元素消去法解线性方程组Ax=b的M文件。要求输出Ax=b中矩阵A及向量b、PA=LU分解的L与U、detA及解向量x,交换顺序。 编写M文件如下: function [x,det,index]=gauss(A,b) [n,m]=size(A); nb=length(b); if n~=m 09级数信(1)班 姓名:马勇 学号:2009051430 error('The rows and columns of natrix A must be equal !'); return; end if m~=nb error('The columns of A must be equal the length b !'); return; end index=1;det=1;x=zeros(n,1); for k=1:n-1 maxa=0; for i=k:n if abs(A(i,k))>maxa maxa=abs(A(i,k));r=i; end end if maxa<1e-10 index =0;return; end if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end for i=k+1:n 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); if abs(A(n,n))<1e-10 index=0;return; end 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 09级数信(1)班 姓名:马勇 学号:2009051430 第四题: Ⅰ、运用Gauss列主元素消去法解上述程序计算矩阵: ⑴、计算第一个矩阵 ① 、计算源程序: 计算程序如下: function [x,det,index]=gauss(A,b) A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1;1;1]; [n,m]=size(A); nb=length(b); if n~=m error('The rows and columns of natrix A must be equal !'); return; end if m~=nb error('The columns of A must be equal the length b !'); return; end index=1;det=1;x=zeros(n,1); for k=1:n-1 maxa=0; for i=k:n if abs(A(i,k))>maxa maxa=abs(A(i,k));r=i; end end if maxa<1e-10 index =0;return; end if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end for i=k+1:n m=A(i,k)/A(k,k); for j=k+1:n 09级数信(1)班 姓名:马勇 学号:2009051430 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); if abs(A(n,n))<1e-10 index=0;return; end 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 运行结果如下: ans = 1.0e+003 * 1.5926 -0.6319 -0.4936 >> ②、计算修改后的程序: 计算程序如下: function [x,det,index]=gauss(A,b) A=[3.00,6.03,1.99;1.27,4.16,-1.23;0.990,-4.81,9.34];b=[1;1;1]; [n,m]=size(A); nb=length(b); 09级数信(1)班 姓名:马勇 学号:2009051430 if n~=m error('The rows and columns of natrix A must be equal !'); return; end if m~=nb error('The columns of A must be equal the length b !'); return; end index=1;det=1;x=zeros(n,1); for k=1:n-1 maxa=0; for i=k:n if abs(A(i,k))>maxa maxa=abs(A(i,k));r=i; end end if maxa<1e-10 index =0;return; end if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end for i=k+1:n 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); if abs(A(n,n))<1e-10 index=0;return; end 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 09级数信(1)班 姓名:马勇 学号:2009051430 计算结果如下: ans = 119.5273 -47.1426 -36.8403 >> ⑵:计算第二个矩阵: ①:计算源程序: 计算程序如下: function [x,det,index]=gauss(A,b) A=[10,-7,0,1;-3,2.09999,6,2;5,-1,5,-1;2,1,0,2];b=[8;5.900001;5;1]; [n,m]=size(A); nb=length(b); if n~=m error('The rows and columns of natrix A must be equal !'); return; end if m~=nb error('The columns of A must be equal the length b !'); return; end index=1;det=1;x=zeros(n,1); for k=1:n-1 maxa=0; for i=k:n if abs(A(i,k))>maxa maxa=abs(A(i,k));r=i; end end 09级数信(1)班 姓名:马勇 学号:2009051430 if maxa<1e-10 index =0;return; end if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end for i=k+1:n 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); if abs(A(n,n))<1e-10 index=0;return; end 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 计算结果如下: ans = 0.0000 -1.0000 1.0000 1.0000 09级数信(1)班 姓名:马勇学号:2009051430 >> ②、计算修改后的程序: 计算程序如下: function [x,det,index]=gauss(A,b) A=[10,-7,0,1;-3,2.1,6,2;5,-1,5,-1;2,1,0,2];b=[8;9.5;5;1]; [n,m]=size(A); nb=length(b); if n~=m error('The rows and columns of natrix A must be equal !'); return; end if m~=nb error('The columns of A must be equal the length b !'); return; end index=1;det=1;x=zeros(n,1); for k=1:n-1 maxa=0; for i=k:n if abs(A(i,k))>maxa maxa=abs(A(i,k));r=i; end end if maxa<1e-10 index =0;return; end if r>k for j=k:n z=A(k,j);A(k,j)=A(r,j);A(r,j)=z; end z=b(k);b(k)=b(r);b(r)=z;det=-det; end for i=k+1:n 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 09级数信(1)班 姓名:马勇 学号:2009051430 det=det*A(k,k); end det=det*A(n,n); if abs(A(n,n))<1e-10 index=0;return; end 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 计算结果如下: ans = -0.33 -1.4252 1.3827 1.5669 >> Ⅱ、运用不选主元的直接三角分解法解上述程: ⑴ 、计算第一个矩阵: ①、 计算源程序: 计算程序如下: function [x,L,U]=Doolittle(A,b) A=[3.01,6.03,1.99;1.27,4.16,-1.23;0.987,-4.81,9.34];b=[1,1,1]; N = size(A); n = N(1); L = eye(n,n); U = zeros(n,n); 09级数信(1)班 姓名:马勇 学号:2009051430 U(1,1:n) = A(1,1:n); L(1:n,1) = A(1:n,1)/U(1,1); for k=2:n for i=k:n U(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i) end for j=(k+1):n L(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k) end end y = SolveDownTriangle(L,b); x = SolveUpTriangle(U,y); function y=SolveDownTriangle(L,b) N=size(L); n=N(1); for i=1:n if(i>1) s=L(i,1:(i-1))*y(1:(i-1),1); else s=0; end y(i,1)=(b(i)-s)/L(i,i); end function x=SolveUpTriangle(U,y) N=size(U); n=N(1); for i=n:-1:1 if(i x(i,1)=(y(i)-s)/U(i,i); end 计算结果如下: U = 3.0100 6.0300 1.9900 0 1.6158 0 0 0 0 09级数信(1)班 姓名:马勇 学号:2009051430 U = 3.0100 6.0300 1.9900 0 1.6158 -2.0696 0 0 0 L = 1.0000 0 0 0.4219 1.0000 0 0.3279 -4.2006 1.0000 U = 3.0100 6.0300 1.9900 0 1.6158 -2.0696 0 0 -0.0063 ans = 1.0e+003 * 1.5926 -0.6319 -0.4936 >> ②、 计算修改后的程序: 计算程序如下: function [x,L,U]=Doolittle(A,b) A=[3.00,6.03,1.99;1.27,4.16,-1.23;0.990,-4.81,9.34];b=[1,1,1]; N = size(A); n = N(1); L = eye(n,n); U = zeros(n,n); U(1,1:n) = A(1,1:n); L(1:n,1) = A(1:n,1)/U(1,1); for k=2:n 09级数信(1)班 姓名:马勇 学号:2009051430 for i=k:n U(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i) end for j=(k+1):n L(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k) end end y = SolveDownTriangle(L,b); x = SolveUpTriangle(U,y); function y=SolveDownTriangle(L,b) N=size(L); n=N(1); for i=1:n if(i>1) s=L(i,1:(i-1))*y(1:(i-1),1); else s=0; end y(i,1)=(b(i)-s)/L(i,i); end function x=SolveUpTriangle(U,y) N=size(U); n=N(1); for i=n:-1:1 if(i x(i,1)=(y(i)-s)/U(i,i); end 计算结果: U = 3.0000 6.0300 1.9900 0 1.6073 0 0 0 0 U = 09级数信(1)班 姓名:马勇 学号:2009051430 3.0000 6.0300 1.9900 0 1.6073 -2.0724 0 0 0 L = 1.0000 0 0 0.4233 1.0000 0 0.3300 -4.2306 1.0000 U = 3.0000 6.0300 1.9900 0 1.6073 -2.0724 0 0 -0.0844 ans = 119.5273 -47.1426 -36.8403 >> ⑵、计算第二个矩阵的程序: ①、计算源程序: 计算程序如下: function [x,L,U]=Doolittle(A,b) A=[10,-7,0,1;-3,2.09999,6,2;5,-1,5,-1;2,1,0,2];b=[8,5.900001,5,1]; N = size(A); n = N(1); L = eye(n,n); U = zeros(n,n); U(1,1:n) = A(1,1:n); L(1:n,1) = A(1:n,1)/U(1,1); for k=2:n for i=k:n U(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i) end 09级数信(1)班 姓名:马勇 学号:2009051430 for j=(k+1):n L(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k) end end y = SolveDownTriangle(L,b); x = SolveUpTriangle(U,y); function y=SolveDownTriangle(L,b) N=size(L); n=N(1); for i=1:n if(i>1) s=L(i,1:(i-1))*y(1:(i-1),1); else s=0; end y(i,1)=(b(i)-s)/L(i,i); end function x=SolveUpTriangle(U,y) N=size(U); n=N(1); for i=n:-1:1 if(i x(i,1)=(y(i)-s)/U(i,i); end 计算结果如下: U = 10.0000 -7.0000 0 1.0000 0 -0.0000 0 0 0 0 0 0 0 0 0 0 U = 10.0000 -7.0000 0 1.0000 0 -0.0000 6.0000 0 0 0 0 0 09级数信(1)班 姓名:马勇学号:2009051430 0 0 0 0 U = 10.0000 -7.0000 0 1.0000 0 -0.0000 6.0000 2.3000 0 0 0 0 0 0 0 0 L = 1.0e+005 * 0.0000 0 0 0 -0.0000 0.0000 0 0 0.0000 -2.5000 0.0000 0 0.0000 0 0 0.0000 L = 1.0e+005 * 0.0000 0 0 0 -0.0000 0.0000 0 0 0.0000 -2.5000 0.0000 0 0.0000 -2.4000 0 0.0000 U = 1.0e+006 * 0.0000 -0.0000 0 0.0000 0 -0.0000 0.0000 0.0000 0 0 1.5000 0 0 0 0 0 U = 1.0e+006 * 09级数信(1)班 姓名:马勇学号:2009051430 0.0000 -0.0000 0 0.0000 0 -0.0000 0.0000 0.0000 0 0 1.5000 0.5750 0 0 0 0 L = 1.0e+005 * 0.0000 0 0 0 -0.0000 0.0000 0 0 0.0000 -2.5000 0.0000 0 0.0000 -2.4000 0.0000 0.0000 U = 1.0e+006 * 0.0000 -0.0000 0 0.0000 0 -0.0000 0.0000 0.0000 0 0 1.5000 0.5750 0 0 0 0.0000 ans = 0.0000 -1.0000 1.0000 1.0000 >> ②、计算修改后的程序:计算程序如下: 09级数信(1)班 姓名:马勇学号:2009051430 function [x,L,U]=Doolittle(A,b) A=[10,-7,0,1;-3,2.1,6,2;5,-1,5,-1;2,1,0,2];b=[8,9.5,5,1]; N = size(A); n = N(1); L = eye(n,n); U = zeros(n,n); U(1,1:n) = A(1,1:n); L(1:n,1) = A(1:n,1)/U(1,1); for k=2:n for i=k:n U(k,i) = A(k,i)-L(k,1:(k-1))*U(1:(k-1),i) end for j=(k+1):n L(j,k) = (A(j,k)-L(j,1:(k-1))*U(1:(k-1),k))/U(k,k) end end y = SolveDownTriangle(L,b); x = SolveUpTriangle(U,y); function y=SolveDownTriangle(L,b) N=size(L); n=N(1); for i=1:n if(i>1) s=L(i,1:(i-1))*y(1:(i-1),1); else s=0; end y(i,1)=(b(i)-s)/L(i,i); end function x=SolveUpTriangle(U,y) N=size(U); n=N(1); for i=n:-1:1 if(i x(i,1)=(y(i)-s)/U(i,i); end 09级数信(1)班 姓名:马勇 学号:2009051430 计算结果如下: U = 10 -7 0 1 0 0 0 0 0 0 0 0 0 0 0 U = 10 -7 0 0 0 6 0 0 0 0 0 0 U = 10.0000 -7.0000 0 0 0 0 0 0 Warning: Divide by zero. > In hghj465 at 14 L = 1.0000 0 -0.3000 1.0000 0.5000 Inf 0.2000 0 Warning: Divide by zero. > In hghj465 at 14 L = 1.0000 0 -0.3000 1.0000 09级数信(1)班 0 1 0 0 0 0 6.0000 0 0 0 0 1.0000 0 0 0 2.3000 0 0 0 0 0 1.0000 0 0 姓名:马勇学号:2009051430 1.0000 0.5000 Inf 1.0000 0 0.2000 Inf 0 1.0000 U = 10.0000 -7.0000 0 1.0000 0 0 6.0000 2.3000 0 0 -Inf 0 0 0 0 U = 10.0000 -7.0000 0 0 0 6.0000 0 0 -Inf 0 0 0 L = 1.0000 0 0 -0.3000 1.0000 0 0.5000 Inf 1.0000 0.2000 Inf NaN U = 10.0000 -7.0000 0 0 0 6.0000 0 0 -Inf 0 0 0 Warning: Divide by zero. > In hghj465>SolveUpTriangle at 39 In hghj465 at 18 ans = NaN NaN NaN 09级数信(1)班 0 2.3000 -Inf 0 0 0 0 1.0000 2.3000 -Inf NaN 姓名:马勇学号:2009051430 1.0000 1.0000 NaN >> 09级数信(1)班 姓名:马勇学号:2009051430 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo6.com 版权所有 湘ICP备2023023988号-11
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务