实验目的及要求: 1、掌握线性方程组直接接法的基本思想;、 2、了解不同数值方法解线性方程组的原理、实现条件、使用范围、计算公式; 3、培养编程与上机调试能力。 | ||||||||||||
实验内容: 编写高斯列主元消去法及追赶法通用子程序。 1、用高斯列主元消去法求解下列方程组: 2、用追赶法求解下列方程组: | ||||||||||||
实验步骤与程序: 高斯列主元消去法理论: 高斯列主元消去法流程图:
高斯列主元消去法的MATLAB主程序 被调用的Gauss_lie_zhu_yuan.m文件 function [x,y]=Gauss_lie_zhu_yuan(A,b) y=1; [n,m]=size(A);x=zeros(n,1);nb=length(b); if n~=m error(‘error,A的行和列必须相等!’); return; end if m~=nb error(‘error,A的列必须等于b的长度! ‘); return; end for k=1:n-1 d=A(k,k);l=k; for i=k+1:n if abs(A(i,k))>abs(d) d=A(i,k);l=i; end end if d<1e-10 y=0; return; end if l>k for j=k:n t=A(l,j);A(l,j)=A(k,j);A(k,j)=t; end t=b(k);b(k)=b(l);b(l)=t; 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 end if abs(A(n,n))<1e-10 y=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 运行的Gauss_lie_zhu_yuan_1.m文件 A=[2,3,5;3,4,7;1,3,3]; b=[5;6;5]; [x,y]=Gauss_lie_zhu_yuan(A, b) 追赶法理论: 追赶法流程图: 高斯列主元消去法的MATLAB主程序 运行的zhui_gan_fa.m文件 function[x]=zhui_gan_fa a=[0 -1 -1 -3];b=[2 3 2 5];c=[-1 -2 -1];r=[6 1 0 1]; n=length(b);u=zeros(n,1);v=zeros(n,1);x=zeros(n,1); u(1)=r(1)/b(1);v(1)=c(1)/b(1); for k=2:n-1 t=b(k)-v(k-1)*a(k); v(k)=c(k)/t; u(k)=(r(k)-u(k-1)*a(k))/t; end x(n)=(r(n)-u(n-1)*a(n))/(b(n)-v(n-1)*a(n)); for k=n-1:-1:1 x(k)=u(k)-v(k)*x(k+1); end | ||||||||||||
运行结果:
| ||||||||||||
结果分析与讨论: 高斯列主元法的基本思想是通过消元将方程组转化为一个上三角矩阵,然后再通过回代求解出方程的解。 具体步骤如下: 1. 将系数矩阵进行行列交换和倍加,使得矩阵的左上角元素为第一行第一列的元素,并且这个元素不为零。 2. 将第一行的元素除以该元素,使得该元素变为1。 3. 利用第一行的元素将第二行的第一列元素消去。 4. 重复2、3步,依次将矩阵的每一行的第一列元素变为1,并将其下方的元素都变为0。 5. 得到一个上三角矩阵,通过回代求解出方程组的解。 高斯列主元法最大的优点更加稳定和准确,但是,它的计算复杂度较高。 追赶法的基本思想是将矩阵分解为一个对角矩阵和两个三角矩阵的乘积,并利用这个分解求解线性方程组。 具体步骤如下: 1. 通过一系列标准化操作,将带对角线的线性方程组转化为一个三对角线性方程组。 2. 设三对角线性方程组的系数矩阵为A,则A可被分解为一个对角矩阵D和两个三角矩阵L和U的乘积,即A = LDU,其中D、L、U分别为对角线、下三角和上三角矩阵。 3. 将方程Ax = b转化为LDUx = b的形式,令y = Ux,则可以得到两个方程Ly = b和Dy = c的形式,其中c = Dy。 4. 分别用前向和后向(即追和赶)回代的方法求解出Ly = b和Ux = y。 5. 得到方程组的解x。 追赶法运算量较小,然而,追赶法只适用于带对角线的线性方程组。 |