“线性方程组高斯消去法”实验报告(内含matlab程序)
- 格式:doc
- 大小:55.00 KB
- 文档页数:3
解线性方程组的列主元素高斯消去法和LU 分解法一、实验目的:通过数值实验,从中体会解线性方程组选主元的必要性和LU 分解法的优点,以及方程组系数矩阵和右端向量的微小变化对解向量的影响。
二、实验内容:解下列两个线性方程组(1)⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎭⎫ ⎝⎛--11134.981.4987.023.116.427.199.103.601.3321x x x(2)⎪⎪⎪⎪⎪⎭⎫ ⎝⎛=⎪⎪⎪⎪⎪⎭⎫ ⎝⎛⎪⎪⎪⎪⎪⎭⎫ ⎝⎛----15900001.582012151526099999.23107104321x x x x 三、实验要求:(1) 用你熟悉的算法语言编写程序用列主元高斯消去法和LU 分解求解上述两个方程组,输出Ax=b 中矩阵A 及向量b, A=LU 分解的L 及U ,detA 及解向量x.(2) 将方程组(1)中系数3.01改为3.00,0.987改为0.990,用列主元高斯消去法求解变换后的方程组,输出列主元行交换次序,解向量x 及detA ,并与(1)中结果比较。
(3) 将方程组(2)中的2.099999改为2.1,5.900001改为5.9,用列主元高斯消去法求解变换后的方程组,输出解向量x 及detA ,并与(1)中的结果比较。
(4)用MATLAB的内部函数inv求出系数矩阵的逆矩阵,再输入命令x=inv(A)*b,即可求出上述各个方程组的解,并与列主元高斯消去法和LU分解法求出的解进行比较,体会选主元的方法具有良好的数值稳定性。
用MATLAB的内部函数det求出系数行列式的值,并与(1)、(2)、(3)中输出的系数行列式的值进行比较。
四、实验过程:(1)列主元高斯消去法的主程序为function [RA,RB,n,X]=liezhuY(A,b)B=[A b]; n=length(b); RA=rank(A);RB=rank(B);zhica=RB-RA;D=det(A)if zhica>0,disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为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:nm= B(k,p)/ B(p,p);B(k,p:n+1)= B(k,p:n+1)-m* B(p,p:n+1);endendb=B(1:n,n+1);A=B(1:n,1:n); X(n)=b(n)/A(n,n);for q=n-1:-1:1X(q)=(b(q)-sum(A(q,q+1:n)*X(q+1:n)))/A(q,q);endelsedisp endend解方程组(1)在MATLAB工作窗口输入>>A=[3.01 6.03 1.999;1.27 4.16 -1.23;0.987 -4.819.34];b=[1;1;1];[RA,RB,n,X]=liezhuY(A,b)运行后输出结果为请注意:因为RA=RB=n,所以此方程组有唯一解. D=-0.1225RA =3 RB =3 n =3X = 397.8654-157.6242-123.1120解方程组(2)在MATLAB工作窗口输入>>A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];b=[8;5.900001;5;1];[RA,RB,n,X]=liezhu(A,b)运行后输出结果为请注意:因为RA=RB=n,所以此方程组有唯一解. D=-762.0000RA =4 RB =4 n =4X =0.0000-1.00001.00001.0000LU分解法及MATLAB主程序为function hl=zhjLU(A)[n n] =size(A); RA=rank(A);D=det(A)if RA~=ndisp('请注意:因为A的n阶行列式hl等于零,所以A不能进行LU分解.A的秩RA如下:'), RA,hl=det(A);returnendif RA==nfor p=1:nh(p)=det(A(1:p, 1:p));endhl=h(1:n);for i=1:nif h(1,i)==0disp('请注意:因为A的r阶主子式等于零,所以A不能进行LU分解.A 的秩RA和各阶顺序主子式值hl依次如下:'), hl;RAreturnendendif h(1,i)~=0disp('请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:')for j=1:nU(1,j)=A(1,j);endfor k=2:nfor i=2:nfor j=2:nL(1,1)=1;L(i,i)=1;if i>jL(1,1)=1;L(2,1)=A(2,1)/U(1,1); L(i,1)=A(i,1)/U(1,1); L(i,k)=(A(i,k)- L(i,1:k-1)*U(1:k-1,k))/U(k,k);elseU(k,j)=A(k,j)-L(k,1:k-1)*U(1:k-1,j);endendendendhl;RA,U,Lendend解方程组(1)在MATLAB工作窗口输入>>A=[3.01 6.03 1.999;1.27 4.16 -1.23;0.987 -4.819.34];h1=zhjLU(A)运行输出结果为请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:D=9.8547RA =3U =3.0100 6.0300 1.99900 4.1600 -2.07340 0 5.3016L =1.0000 0 00.4219 1.0000 00.3279 -1.6316 1.0000h1 =3.0100 4.8635 -0.1225解方程组(2)在MATLAB工作窗口输入>>A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 02];h1=zhjLU(A)运行后输出结果为请注意:因为A的各阶主子式都不等于零,所以A能进行LU分解.A的秩RA和各阶顺序主子式值hl依次如下:D=-762.0000RA =4U =10.0000 -7.0000 0 1.00000 2.1000 6.0000 2.30000 0 -2.1429 -4.23810 -0.0000 0 12.7333L =1.0000 0 0 0-0.3000 1.0000 0 00.5000 1.1905 1.0000 -0.00000.2000 1.1429 3.2000 1.0000h1 =10.0000 -0.0000 -150.0001 -762.0001(2)在MATLAB工作窗口输入>>A=[3.01 6.03 1.999;1.27 4.16 -1.23;0.987 -4.819.34];b=[1;1;1];A(1,1)=3;A(1,3)=0.990;[RA,RB,n,X]=liezhu(A,b)请注意:因为RA=RB=n,所以此方程组有唯一解.RA =3 RB =3 n =3X = -4.02641.91931.5210hi = 3.0000 4.8219 9.8547在MATLAB工作窗口输入x=[397.8654;-157.6242;-123.1120]';x1=[-4.0264;1.9193;1.5210]';wucha=x1-x运行后输出结果为wucha =-401.8918 159.5435 124.6330(3)在MATLAB工作窗口输入>>A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];A(2,2)=2.1;b(2,1)=5.9;b=[8;5.900001;5;1];[RA,RB,n,X]=lie zhu(A,b)运行后输出结果为请注意:因为RA=RB=n,所以此方程组有唯一解.RA =4 RB =4 n =4X =0.0000-1.00001.00001.0000h1 =10.0000 -0.0000 -150.0000 -762.0000在MATLAB工作窗口输入>>x=[0;-1;1;1]';x1=[0;-1;1;1]';wucha=x1-x运行后输出结果为wucha = 0 0 0 0(4)解方程组(1)在MATLAB工作窗口输入>>A=[3.01 6.03 1.999;1.27 4.16 -1.23;0.987 -4.81 9.34];B=inv(A)运行后结果为B =-268.9293 538.3418 128.4529106.7599 -213.4281 -50.956183.3992 -166.8022 -39.7090在MATLAB工作窗口输入>>b=[1;1;1];x=inv(A)*b运行后结果为x =397.8654-157.6242-123.1120在MATLAB工作窗口输入>>A=[3.01 6.03 1.999;1.27 4.16 -1.23;0.987 -4.81 9.34];A(1,1)=3;A(1,3)=0.990;B=inv(A)运行输出结果为B = 3.3424 -6.1983 -1.1705-1.3269 2.7442 0.5020-1.0365 2.0682 0.4893在MATLAB工作窗口输入>>b=[1;1;1];x=inv(A)*b运行后输出结果为x =-4.02641.91931.5210解方程组(2)在MATLAB工作窗口输入>>A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];B=inv(A) 运行后结果为B =-0.0223 -0.0984 0.1181 0.1686-0.1601 -0.1181 0.1417 0.26900.0108 0.1063 0.0724 -0.07550.1024 0.1575 -0.1890 0.1969在MATLAB工作窗口输入>>b=[8;5.900001;5;1];x=inv(A)*b运行后输出结果为x = 0-1.00001.00001.0000在MATLAB工作窗口输入>>A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];A(2,2)=2.1;B=inv(A)运行后输出结果为B =-0.0223 -0.0984 0.1181 0.1686-0.1601 -0.1181 0.1417 0.26900.0108 0.1063 0.0724 -0.07550.1024 0.1575 -0.1890 0.1969在MATLAB工作窗口输入>>b=[8;5.900001;5;1];b(2,1)=5.9;x=inv(A)*b运行后输出结果为x =-0.0000-1.00001.00001.0000五、实验结果分析:实验的数学原理很容易理解,也容易上手。
西京学院数学软件实验任务书实验一实验报告一、实验名称:线性方程组高斯消去法。
二、实验目的:进一步熟悉理解Guass 消元法解法思路,提高matlab 编程能力。
三、实验要求:已知线性方程矩阵,利用软件求解线性方程组的解。
四、实验原理:消元过程:设0)0(11≠a ,令乘数)0(11)0(11/a a m i i -=,做(消去第i 个方程组的i x )操作1i m ×第1个方程+第i 个方程(i=2,3,.....n )则第i 个方程变为1)1(2)1(2...i n in i b x a x a =++ 这样消去第2,3,。
,n 个方程的变元i x 后。
原线性方程组变为:⎪⎪⎪⎩⎪⎪⎪⎨⎧=++=++=++)1()1(2)1(2)1(2)1(22)1(22)0(1)0(11)0(11... . .... ...n n nn n n n n n b x a x a b x a x a b x a x a 这样就完成了第1步消元。
回代过程:在最后的一方程中解出n x ,得:)1()1(/--=n nn n n n a b x再将n x 的值代入倒数第二个方程,解出1-n x ,依次往上反推,即可求出方程组的解:其通项为3,...1-n 2,-n k /)()1(1)1()1(=-=-+=--∑k kk n k j j k kj k k k a x a bx五、实验内容:function maintest2clcclear allA=[1 3 4;2 4 5;1 4 6];%系数矩阵 b=[1 7 6]'%常数项num=length(b)for k=1:num-1for i=k+1:numif A(k,k)~=0l=A(i,k)/A(k,k); A(i,:)=A(i,:)-A(k,:).*l; b(i)=b(i)-b(k)*l; endendendAb%回代求xx(num)=b(num)/A(num,num);for i=num-1:-1:1sum=0;for j=i+1:numsum=sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);endxEnd六、实验结果:A =1.0000 3.0000 4.0000 0 -2.0000 -3.00000 0 0.5000b =1.00005.00007.5000x =16 -25 15。
实验一 用列主元Gauss 消去法求解线性方程组实验目的会使用Matlab 语言编程使用列主元Gauss 消去法求解线性方程组.实验原理1、 列主元Gauss 消去法记线性方程组1112111212222212n n n n nn n n a a a x b a a a x b a a a x b ⎛⎫⎛⎫⎛⎫⎪⎪ ⎪ ⎪⎪ ⎪=⎪⎪ ⎪⎪⎪ ⎪⎝⎭⎝⎭⎝⎭ 为Ax=b, 其中A =111212122212n n n n nn a a a a a a a a a ⎛⎫ ⎪ ⎪ ⎪⎪⎝⎭,x=12n x x x ⎛⎫⎪ ⎪ ⎪⎪⎝⎭, b=12n b b b ⎛⎫ ⎪ ⎪ ⎪ ⎪⎝⎭, 记其增广矩阵为()(1)(1)(1)1111(1)(1)(1)(1)(1)2122(1)(1)(1)1n nn nnn a a b aa b Ab a a b ⎛⎫ ⎪ ⎪= ⎪ ⎪ ⎪⎝⎭。
设主元(1)11a 0≠,记(1)11(1)11(2,3,,)i i a l i n a =-=,用1i l 乘增广矩阵()(1)(1)A b 的第1行,再分别与第i 行相加,得()(1)(1)(1)(1)111211(1)(1)(2)(2)(2)2222(2)(2)(2)2b 00n nn nnn a a a a a b Ab a a b ⎛⎫ ⎪⎪= ⎪ ⎪ ⎪⎝⎭, 其中(2)(1)(1)1,ij ij i ij a a l a =+ i ,j=2,3,,n(2)(1)(1)11,i i i b b l b =+ i=2,3,,n又设主元(2)(2)i222i2(2)22a 0,l =-a a≠用乘矩阵()(2)(2)A b 的第二行,再与第i 行相加(i=3,4,,n ),得()(1)(1)(1)(1)(1)1112131n 1(2)(2)(2)(2)22232n 2(3)(3)(3)(3)(3)333n3(3)(3)(3)n3nnn b 0b Ab =0b 00b a a a a a a a a a a a ⎛⎫ ⎪ ⎪ ⎪ ⎪ ⎪ ⎪⎝⎭. 经过n-1步消去后,增广矩阵最终变为()=)()( n n b A实验程序function x=gaussc(A ,b ) [n,m ]=size(A); A=[A ,b]; for k=1:n —1for p=k+1:nif abs(A (p ,k))>abs(A(k ,k )) for j=k :n+1 t=A(k,j );A (k,j)=A(p,j ); A(p,j)=t; end endend %搜索主元并交换 for i=k+1:nl=-A(i ,k )/A(k,k); for j=k+1:n+1A (i,j )=A(i ,j )+l*A(k,j); end endend %消去过程结束 x(n)=A (n,n+1)/A (n ,n); for i=n —1:-1:1 s=0;for j=i+1:ns=s+A (i,j)*x(j ); endx (i)=(A (i,n+1)-s )/A (i,i); end实验结果设A=[2,5;4,6],b=[3;4],求解线形方程组Ax=b.实验步骤:1) 先在matlab 里输入上面的程序;2) 然后输入A=[2,5;4,6] b=[3;4]3)再输入x=gaussc(A,b)命令即得出结果.由以上程序可求解得到x=( 0.2500 0。
北京大学数学软件实验任务书课程名称数学软件实验班级数学0901 学号0912020112 姓名****实验课题线性方程组高斯消去法,高斯列主元消去法,高斯全主元消去法实验目的熟悉线性代数方程组高斯消去法,高斯列主元消去法,高斯全主元消去法实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成实验内容线性方程组高斯消去法线性方程组高斯列主元消去法线性方程组高斯全主元消去法成绩100 教师****实验一 高斯消去法求解线性方程组【实验名称】高斯消去法求解线性方程组【实验目的】进一步熟悉理解Guass 消元法解法思路,提高matlab 编程能力。
【实验要求】已知线性方程矩阵,利用软件求解线性方程组的解。
【实验原理】消元过程:设0)0(11≠a ,令乘数)0(11)0(11/a a m i i -=,完成以下步骤: 首先,进行消元操作(消去第i 个方程组的i x )1i m ×第1个方程+第i 个方程(i=2,3,.....n ),则第i 个方程变为1)1(2)1(2...i n in i b x a x a =++;这样消去第2,3,... ,n 个方程的变元i x 后。
原线性方程组变为:⎪⎪⎪⎩⎪⎪⎪⎨⎧=++=++=++)1()1(2)1(2)1(2)1(22)1(22)0(1)0(11)0(11... . .... ...n n nn n n n n n b x a x a b x a x a b x a x a这样就完成了第一步消元。
回代过程:在最后的一方程中解出n x ,得:)1()1(/--=n nnn n n a b x ;再将n x 的值代入倒数第二个方程,解出1-n x ,依次往上反推,即可求出方程组的解,其通项为:3,...,1-n 2,-n k /)()1(1)1()1(=-=-+=--∑k kk nk j j k kjk kk a x abx【程序设计】function maintest1 clc clear allnum=input('please input the order n=') A=zeros(num,num); for i=1:num for j=1:numA(i,j)=input(''); endend Aif det(A)~=0for i=1:numb(i)=input('');endb=b'num=length(b)for k=1:num-1for i=k+1:numif A(k,k)~=0l=A(i,k)/A(k,k);A(i,:)=A(i,:)-A(k,:).*l;b(i)=b(i)-b(k)*l;endendendAB%回代求xx(num)=b(num)/A(num,num);for i=num-1:-1:1sum=0;for j=i+1:numsum=sum+A(i,j)*x(j);endx(i)=(b(i)-sum)/A(i,i);endxend【实验结论】高斯消元能很好的求解线性方程组,和用克莱姆法则求解方程组该算法简单而且求解次数少。
用matlab解线性方程组2008-04-12,17:00一。
高斯消去法1.顺序高斯消去法直接编写命令文件a=[]d=[]'[n,n]=size(a);c=n+1a(:,c)=d;,for,k=1:n-1a(k+1:n,,k:c)=a(k+1:n,,k:c)-(a(k+1:n,k)/,a(k,k))*a(k,,k:c);,,,,,%消去endx=[0,0,0,0]',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%回带x(n)=a(n,c)/a(n,n);for,g=n-1:-1:1x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)end2.列主高斯消去法*由于“[r,m]=max(abs(a(k:n,k)))”返回的行是“k:n,k”内的第几行,所以要通过修正来把m,改成真正的行的值。
该程序只是演示程序,真正机器计算不需要算主元素所在列以下各行应为零的值。
直接编写命令文件a=[]d=[],'[n,n]=size(a);c=n+1a(:,c)=d;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%(增广)for,k=1:n-1[r,m]=max(abs(a(k:n,k)));,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%选主m=m+k-1;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%(修正操作行的值),,,if(a(m,k)~=0),,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,if(m~=k)a([k,m],:)=a([m,k],:);,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%换行enda(k+1:n,,k:c)=a(k+1:n,,k:c)-(a(k+1:n,k)/,a(k,k))*a(k,,k:c);,,,,,,%消去endendx=[0,0,0,0]',,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,%回带x(n)=a(n,c)/a(n,n);for,g=n-1:-1:1x(g)=(a(g,c)-a(g,g+1:n)*x(g+1:n))/a(g,g)end3.分别用顺序高斯消去法和列主高斯消去法解方程组a*x=d,并比较结果a=[0,1,2,3;9,11,23,34;62.5,23.4,15.5,17.2;192.01,124,25.1,59.3],d=[1;1;1;1]顺序高斯消去法:提示“Warning:,Divide,by,zero.”,x,=NaN,NaN,NaN,NaN 列主高斯消去法:x,=-1.2460,2.8796,5.5206,-4.3069由此可见列主高斯消去法可以解决顺序高斯消去法所不能解决的问题。
高斯消去算法实验报告1. 实验背景高斯消去算法,也称为高斯消元法,是一种用于求解线性方程组的常用方法。
通过进行一系列的行变换,将方程组化简为阶梯矩阵,从而得到方程组的解。
本实验旨在使用高斯消去算法,解决给定的线性方程组。
2. 实验过程2.1 算法原理高斯消去算法的基本思想是通过进行行变换,将线性方程组化简为阶梯矩阵。
具体流程如下:1. 对于每一列,从对角线开始,选取主元(即该列中绝对值最大的元素),并将该主元所在的行与对角线所在的行交换位置。
这样可以避免除法中的误差积累。
2. 通过进行行变换,将主对角线以下的元素全部清零。
具体方法是,对于每一行i,通过消去第i+1行到最后一行的第i列元素,从而将下三角矩阵的元素清零。
3. 倒序遍历每一行,通过行变换,将主对角线以上的元素清零。
具体方法是,消去第i-1行到第1行的第i列元素,从而将上三角矩阵的元素清零。
4. 将矩阵化简为阶梯矩阵。
2.2 实验步骤1. 取得待解线性方程组的系数矩阵A和常数向量b。
2. 将矩阵A和向量b合并为增广矩阵Ab。
3. 通过高斯消去算法,将增广矩阵化简为阶梯矩阵。
4. 根据化简后的阶梯矩阵,求解线性方程组。
3. 实验结果以一个3阶线性方程组为例进行实验,方程组如下:2x + 3y + z = 93x + 2y + 4z = 124x + 3y + 6z = 18按照操作步骤,我们将系数矩阵A和常数向量b合并为增广矩阵Ab:markdownA = [[2, 3, 1],[3, 2, 4],[4, 3, 6]]b = [9, 12, 18]Ab = [[2, 3, 1, 9],[3, 2, 4, 12],[4, 3, 6, 18]]然后,通过高斯消去算法,将增广矩阵Ab化简为阶梯矩阵:markdownAb = [[2, 3, 1, 9],[0, 1.5, 2.5, 6],[0, 0, 0, 0]]根据化简后的阶梯矩阵,我们可以得到方程组的解:x = 1y = 2z = 0因此,该线性方程组的解为x=1,y=2,z=0。
数值计算报告——高斯消去法解线性方程组摘要本次实验主要使用Matlab 实现了通过高斯消去法求解线性方程组的程序,达到了输入系数矩阵和常系数向量就能输出求解结果的效果。
另外,本实验还验证了使用Matlab 实现的LU 分解法和乔累斯基分解法求解线性方程组的程序。
从多个方面检查了三种计算方法的性能,并考察了在多种情况下程序的稳定性。
关键词:Matlab ,高斯顺序消去法,增广矩阵,LU 分解法,乔累斯基分解法一、 算法描述在实际生活中,很多问题都涉及下面的线性方程组的求解11112211211222221122...............n n n n n n nn n na x a x a xb a x a x a x b a x a x a x b +++=⎧⎪+++=⎪⎨⎪⎪+++=⎩(1-1) 为方便起见,常将线性方程组(1-1)表示成矩阵形式Ax b =其中1111............n n nn a a A a a ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦1...n x x x ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦1...n b b b ⎡⎤⎢⎥=⎢⎥⎢⎥⎣⎦并始终假定A 是非奇异的,即方程组的解存在且唯一。
线性方程组(1-1)的增广矩阵记作(0)(0)(0)11111(0)(0)(0)11...........................n n n nn nn a a a a a a ++⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦1.1高斯顺序消去法1、步骤:消去法就是按特定顺序进行的矩阵初等变换法,当消元按自然顺序进行时,称为高斯顺序消去法。
Step1:消元。
对线性方程组的增广矩阵进行初等变换,使系数矩阵化为上三角形。
假设经1k -步消元后,增广矩阵为(0)(0)(0)(0)1112111(1)(1)(1)22221(1)(1)(1)111(1)(1)(1)1...................................................nn n n k k k kk kn k k k nknnnn a a a a a a a a a a a a a ++---+---+⎡⎤⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎣⎦其中()s ij a 的上标表示是由s 步消元得到的值。
1151091 杨晨辉高斯消去法解线性方程的Matlab 程序方法一:function x = gauss(A,b) n = length(b);for k = 1 : n-1if A(k,k)==0fprintf( 'Error: the %dth pivot element equal to zero!\n' return ;endindex = [k+1:n];m = -A(index,k)/A(k,k);A(index,index) = A(index,index) + m*A(k,index); b(index) = b(index) + m*b(k);endx = zeros(n,1);x(n) = b(n)/A(n,n);for i = n-1:-1:1x(i) = ( b(i) - A(i,[i+1:n])*x([i+1:n]) )/A(i,i); end运行结果:>> A=[1 1.355 1.4 2; 3 3.5 0.22 1; 0.5 2 2.1 3;>> b=[2.00,1.00,0.55,3.00]' b =2.00001.00000.55003.0000 >> gauss(A,b)ans =2.5225-2.23130.01771.2381 方法二:矩阵求逆:function [ B ] = qiuni( A )%UNTITLED Summary of this function goes here% Detailed explanation goes here n=numel(A);r=rank(A);B=eye(r);if n==L2for k=1:rfor i=1:r ,k);0.3 0.1 -0.55 2];for j=1:rii=i-1;jj=j-1;if ii==0 && jj==0;ii=r;jj=r;B(ii,jj)=1/A(1,1);elseif ii==0 && jj~=0;ii=r;B(ii,jj)=-A(1,j)/A(1,1);elseif jj==0 && ii~=0;jj=r;B(ii,jj)=A(i,1)/A(1,1);elseB(ii,jj)=A(i,j)-A(i,1)*A(1,j)/A(1,1);endendendA=B;B=eye(r);endB=A;elsemsgbox( ' 矩阵不可逆' , 'message' , 'warn' ); end endGr^l Jr«t jskiALM13LII4I3 S ]J. IXI f 8 4»LEF3f* ll.Tfil™'.*?a. nr-ii I. >3 DOC-1- E^:I.MQP n rml.»HGil・a血«.4WtOMHi超if iMr MHfH 曰ITfar !■ i: rIlliUliNJTL2in kLIU#•十*minilu-dzr齡 4 J 2.4 7^3.9 il-l-Z U • (14 M,1 1*1,1 i Ih.i 他[S 4 J 2 4 2 it 3.3 I ? 5.4 3 3 lh”gg飞『可选1M^4T<E AfrrE喩耳.庇賈■斗『.*玛11册V ttii< .M ■帥?脅 Q* M It 当方程不可逆时:第二种:fun ction [ B ] = lyxq inv( A )%UNTITLED Summary of this fun ctio n goes here % Detailed expla nati on goes here n=n umel(A);r=ra nk(A);B=eye(r);if n==L2E=eye(r);A=[A E];for k=1:(r-1)for i=(k+1):rfor j=(k+1):2*rA(i,j) = A(i,j)-A(i,k)* A(k,j) / A(k,k);endj=k;A(i,j) = A(i,j)-A(i,k)* A(k,j) / A(k,k);endendfor k=2:rpuspus !( .UJBM , £ .sBesseiu, £ ,廡址k 捌目# . )xoq6siu9S|9 :(j^:(i,+j )i:)a=apue pue©!)▼/(「!)皆(「!)日J^:L=[」oj」j=!」ojpue pue:(>l 1>l )V/(r>l )V.(>l 1!)V-(r!)V=(r!)V■>l=f pue:(>i i >i )v/(r>i )v.(>i i !)v-(r!)v=(r!)v j^:(i /+>i )=r 」oj(宀)J=!」OJ!■« ^'1 1 I t'C 0 £ S't t fe- S]-*-fiN1=5 3 If• ◎ ID * ・E -*w J£ 口1M^!PIS^'D-EMJ'DgfWP Sfft F IMF CGiK S^£j£K 加屜iz "UP EWtT>- UKH MX®MJFV- HQFU岡Z 伽巾w:MMsmn a t i 11 ft g i t z t if 町■ V —1 J£*frdrj_ E-C-^'P ■fp XklMC I «f*E|«ul3 5 ¥ 1 i I r'C 9 £ C I ・ ** epiiJbcMH L ^btLJ=Ul] Ci 1 J't 1 I L'L 9 ■£ R* L I 3]^j ",|Q 鼻 H-R r ft ・ 4 ■卩 * C- [- T'P- f ■门碑 :\|T- i TI :-q r R!- 3 I 旷£- « 1- 4 1- f E- F]-» 14肯1肚丫 F1 41 J. I 时4T ■ = FIT IF P 町贰F 3»rl-qll 5 I 3 -5 A I E :f B 5 P C E > 5]<*V] *■*iia t i i i E C g i P S I t ・町詐(q Fri "T<e fc-xsr[i —we*Fip - . jr r ■'w■I« !J►5 ft O EWK陆羽 LfEMLD?K :fl.«ll r miEI f lfiMlbiM.T -[| g 盅 E fi J E £'L 5> E »'Z € t £]=9 «IH -MnhiQui'u^iJEi 1I in-M ka« tfun cti on X=jie(A,b); [m,n ]=size(A);B=[A,b];RA=ra nk(A);RB=ra nk(B);formatratif RA==RB & RA==n %判断方程有唯一解 X=A\b;else if RA==RB & RA<n %判断方程有无穷解X=A\b %求特解 C=null(A,'R' );%求AX=0勺基础解系else X='方程无解’;%判断方程无解 end end上图的方程有两个,第一个有解,显示结果;第二个无解,显示 方程无解当方程有无穷解时,显示其特解■ -1^ u* sf Bi fclw JtJf• 6 •CiJ □ £J 4■谍 1 3 7 fl I 7 >7 13 D<L. rlsipc-hn- >Ji>; «»EV i > 1.4 > H >J < i T >■ t iipiM -caim 勒诵 < 3 j,4 g ].] I 7 5.? 3 fi« j a m 半・ jj.^(]!4M r A ).i i Fv.? > t 盯・・口©・ *-C5 4 3 a pfUkb)A F IB 4 ft 1J ji«L4ib)X|t 4 1 1,4 •EE i 3 2;a Jt Ct < 5 1.4 ■£L -2 J -L J -i & -J,2 I 2 -2P r «^(b 2 ]]',1 i 1J l !*«/■■ 1]X14N3 g 3.3 I T 5.S 3 5 l.|.b-[14Mi 1 6 3.3 I r 9.2 3 1 d|il>±(14rt if山n 4 I 2 4 I 4 3,9 3 r t,3 ) 6 lixim KJ Hip.EDM 酉52IDiU|i -a v -i ,s -i b o s ? ar■AT“n4 a M H 4 3 IQ:\・B I 各聲a&14+3 3l :gi52図邸H - g ><k 申r 5.71 %门.・口0医2 d ).] i. ?3 S i|,b-{^94 I■IWr=iIMIS» M 【l I 3 ・l"・l •> 4.1 5 V -«),tell < •】•.”心”」UTIMntrtE ex J 9 Q, " Si・ V12M)l»724?»n« Ut9・ i/i2«e )in^4rmi« m|g 门“t—SJ. *Mb 4 ) 1.4 2 ・).3 I r e.4 ) 1MH 4 >:.< 2 • X> I r «.? ) t ibMOHM “ 4 > 2.4 2 e X )I r 5.2 ) 3ibUOUMA^li 4 ) 2.4 2 « >.> I I C.2 ) < l)#b-(l«M IJWU.WMIS 4 > 2.4 7 • J.5 I f 5.2 S 1 IJUU.b>A F 5 < > >.4 < 3.S I > 6.J > « l).^(l«M 1 Mb <>:.<? « XI I r o.2 ) 9 lbW (l«M I "4 2 6 3.3 I 7 6.J 1 5l),W(l<M I4 > 2.4 2 • >.> t r B.2 > ■ IA=!l -2 3 -l.> -I 5 -3.2 I 2 -2!.bs(> 2 «* J A*|l 1 J -I i ・(・1 4.1 i -• -l|.b-(l 4 •)•*nu *" >«w “5*a□ Jk fi W 2f » -ute«twec»>x - €>»»<» M S^*9V«9<aa >4X<t * * J (J)Mg ■ r.Tp■"daStn m 一「一 . M4te~ 3144-18S44 3B • r *H» " MIL X14 4-189 15 M SmM*lte 3314^21719X3M4・ X144-3215152® .dbr«4M»U RMUMXH4^259O4C N 1 Qf* n M 低 an 心 2( aooTXT Mr201H-2 Id 1)518)0 &1Q @6 ■.U, _ B Ulw« Mi . : MUI 4iwAM« .。
实验一实验报告
一、实验名称:线性方程组高斯消去法。
二、实验目的:进一步熟悉理解Guass 消元法解法思路,提高matlab 编程能力。
三、实验要求:已知线性方程矩阵,利用软件求解线性方程组的解。
四、实验原理:
消元过程:
设0)0(11≠a ,令乘数)0(11)0(11/a a m i i -=,做(消去第i 个方程组的i x )
操作1i m ×第1个方程+第i 个方程(i=2,3,.....n )
则第i 个方程变为1)1(2)1(2
...i n in i b x a x a =++ 这样消去第2,3,。
,n 个方程的变元i x 后。
原线性方程组变
为:
⎪⎪⎪⎩
⎪⎪⎪⎨⎧=++=++=++)1()1(2)1(2)1(2)1(22)1(22)0(1)0(11)0(11... . .
... ...n n nn n n n n n b x a x a b x a x a b x a x a 这样就完成了第1步消元。
回代过程:
在最后的一方程中解出n x ,得:)1()1(/--=n nn n n n a b x
再将n x 的值代入倒数第二个方程,解出1-n x ,依次往上反推,即可求出方程组的解:
其通项为3,...1-n 2,-n k /)()1(1)1()1(=-=-+=--∑k kk n k j j k kj k k k a x a b
x
五、实验内容:
A=[1 1 1;0 4 -1;2 -2 1];%ϵÊý¾ØÕó b=[6 5 1]'%³£ÊýÏî
num=length(b)
for k=1:num-1
for i=k+1:num
if A(k,k)~=0
l=A(i,k)/A(k,k); A(i,:)=A(i,:)-A(k,:).*l; b(i)=b(i)-b(k)*l; end
end
end
A
b
%»Ø´úÇóx
x(num)=b(num)/A(num,num); for i=num-1:-1:1
sum=0;
for j=i+1:num
sum=sum+A(i,j)*x(j); end
x(i)=(b(i)-sum)/A(i,i); end
x
六、实验结果:
A =
1 1 1 0 4 -1
0 0 -2
b =
6
5
-6
x =
1 2 3。