完整版高斯消元法MATLAB实现

合集下载

MATLAB中高斯消去法

MATLAB中高斯消去法

clear allclcdata_fname='E:\学习\计算方法\fun005.dat';%读入二进制数据a=5;%输入头文件%打开方式为二进制打开file_id=fopen(data_fname,'rb');%读取二进制文件head_data=fread(file_id,a,'uint');%头文件第一个元素为该文件的标识。

id=dec2hex(head_data(1));%头文件第二个元素为数据的版本号,十六进制ver=dec2hex(head_data(2));%其中101表示稀疏矩阵;102表示条状对角阵;201表示压缩格式下的条状对角矩阵%头文件第三个元素表示为该方程的介绍n=head_data(3);p=head_data(4);%条状矩阵下带宽q=head_data(5);%条状矩阵上带宽jump_distance=20;%跳过字节数fseek(file_id,jump_distance,'bof');[raw_data,count]=fread(file_id,inf,'float');%读入所有元素fclose(file_id);%关闭二进制文件%形成b矩阵b=raw_data(count-n+1:count); A1=raw_data(1:count-n);A=(reshape(A1,p+q+1,n))';%GAUSS算法¨%消去过程for k=1:n-1t=A(k+1,p)/A(k,p+1);for j=1:p+qA(k+1,j)=A(k+1,j)-t*A(k,j+1);endb(k+1)=b(k+1)-t*b(k);end%回待过程x(n)=b(n)/A(n,p+1);x(n-1)=(b(n-1)-A(n-1,p+2)*x(n))/A(n-1,p+1);x(n-2)=(b(n-2)-A(n-2,p+3)*x(n)-A(n-2,p+2)*x(n-1))/A(n-2,p+1);for i=n-3:-1:1s=b(i);s=s-A(i,3)*x(i+1)-A(i,4)*x(i+2)-A(i,5)*x(i+3);x(i)=s/A(i,p+1);end%输出结果fprintf('The solution of the equation set is:\n');for k=1:10fprintf('x[%d]=%f',k,x(k));fprintf('x[%d]=%f',k+10,x(k+10));fprintf('x[%d]=%f',k+n-20,x(k+n-20)); fprintf('x[%d]=%f\n',k+n-10,x(k+n-10)); end。

Gauss消去法等matlab程序

Gauss消去法等matlab程序
end
huidai.M文件:
functionx=huidaini(a)
n=length(a)-1;
x=zeros(n,1);
s=0;
fori=1:1:n
ifi==1
orj=1:1:i-1
s=s+a(i,j)*x(j)
end
x(i)=(a(i,n+1)-s)/a(i,i)
2.)列主元消去法:
functionx=GaussL(A,b)
a=[A b];
x=[];
n=length(a)-1;
fork=1:n
A=a(k:n,k);
h=max(A);
[u,v]=find(A==h);
u=u+k-1;
B=a;
a(k,:)=B(u,:);
a(u,:)=B(k,:);
fori=k+1:n
L(j+1,i)=A(j+1,i)/A(i,i)
A(j+1,:)=A(j+1,:)-L(j+1,i)*A(i,:)
end
end
U=A(:,1:n)
a1=[L b]
y=zeros(n,1)
y=huidaini(a1)
a2=[U y]
x=huidai(a2)
4:实验结果:
1.)Gauss消去法:
>> A=[2 2 3;4 7 7;-2 4 5];b=[3;1;-7];
>> Gauss(A,b)
ans =
2 -2 1
2.)列主元消去法:
>> A=[2 2 3;4 7 7;-2 4 5];b=[3;1;-7];
GaussL(A,b)

matlab高斯消元法求逆矩阵

matlab高斯消元法求逆矩阵

matlab高斯消元法求逆矩阵摘要:一、高斯消元法简介1.高斯消元法的基本思想2.高斯消元法在求逆矩阵中的应用二、MATLAB 中求逆矩阵的函数1.函数形式2.函数参数3.函数返回值三、MATLAB 中求逆矩阵的实例1.实例代码2.实例结果正文:一、高斯消元法简介高斯消元法是一种求解线性方程组的方法,它通过初等行变换将线性方程组的系数矩阵化为上三角矩阵,进而求得方程组的解。

高斯消元法不仅可以用于求解线性方程组,还可以用于求解矩阵的逆。

当求解一个n 阶方阵的逆矩阵时,需要满足该方阵的行列式不为零。

二、MATLAB 中求逆矩阵的函数在MATLAB 中,可以使用`inv()`函数来求解一个矩阵的逆矩阵。

函数的形式如下:```matlabX = inv(A)```其中,`A`为需要求逆的矩阵。

函数的参数:- `A`:输入矩阵,可以是单个矩阵,也可以是多个矩阵组成的向量。

函数返回值:- 返回一个矩阵,该矩阵是输入矩阵`A`的逆矩阵。

如果输入矩阵`A`是不可逆的,函数将返回一个错误信息。

三、MATLAB 中求逆矩阵的实例下面我们通过一个实例来演示如何使用MATLAB 求解逆矩阵:```matlab% 创建一个矩阵A = [1 2; 3 4];% 使用inv() 函数求解逆矩阵X = inv(A);% 输出逆矩阵disp(X);```运行上述代码,将得到如下输出:```2.0000 1.00001.0000 0.5000```这说明,矩阵`A`的逆矩阵为:```2 11 0.5```通过这个实例,我们可以看到MATLAB 中的`inv()`函数可以方便地求解逆矩阵。

需要注意的是,在实际应用中,要求解的矩阵可能非常大,此时使用高斯消元法求解逆矩阵可能会非常耗时。

matlab高斯-约旦消去法

matlab高斯-约旦消去法

matlab高斯-约旦消去法
高斯-约旦消去法是一种线性代数中的消元法,常用于求解线性方程组。

该方法通过矩阵的初等变换将方程组转化为阶梯型矩阵,从而求解出未知数的值。

具体步骤如下:
设有n个未知数,m个方程,方程组的系数矩阵为A,右端常数为b。

1. 将系数矩阵A和右端常数b组合成增广矩阵Ab。

2. 从第一行开始,将该行的第一个非零元素(称为主元)作为消元元素,用该元素将下面所有行的对应列元素消为零。

3. 重复以上步骤,依次将每一行的主元素作为消元元素,直到将整个矩阵消成阶梯型矩阵。

4. 倒序回代,求出每个未知数的值。

以上就是高斯-约旦消去法的主要步骤。

在实际应用中,需要注意判断矩阵是否可逆,以及主元素是否为零等情况,以保证求解的正确性。

高斯消去法matlab程序

高斯消去法matlab程序
本matlab程序实现了高斯消去法,用于解线性方程组Ax=b。首先,程序通过输入获取方程组的未知量个数n、系数矩阵A、常数向量b以及控制精度e。接着,进入高斯消去法的主循环,从第一个未知量开始,依次进行到第n-1个。在每个循环中,首先通过选主元策略,选取当前列中绝对值最大的元素作为主元,以提高数值稳定性。若主元绝对值小于控制精度e,则判定系数矩阵行列式为0,方程组无解或有无穷多解,程序退出。否则,若当前行不是主元所在行,则交换这两行,同时交换对应的常数项。然后,进行消元操作,从当前行的下一行开始,通过行变换将当前列的其他元素消为0个对角元素是否小于控制精度e,若是,则同样判定方程组无解或有无穷多解。最后,进行回代过程,从最后一个未知量开始,依次求出每个未知量的解,最终得到方程组的解向量x。

数学实验“线性方程组高斯消去法”实验报告(内含matlab程序)

数学实验“线性方程组高斯消去法”实验报告(内含matlab程序)

西京学院数学软件实验任务书实验一实验报告一、实验名称:线性方程组高斯消去法。

二、实验目的:进一步熟悉理解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。

数值分析算法在matlab中的实现

数值分析算法在matlab中的实现

数值分析matlab实现高斯消元法:function[RA,RB,n,X]=gaus(A,b)B=[A b];n=length(b);RA=rank(A);RB=rank(B);zhica=RB-RA;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-1for 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('请注意:因为RA=RB<n,所以此方程组有无穷多解.')endendX列主元消去法:function[RA,RB,n,X]=liezhu(A,b)B=[A b];n=length(b);RA=rank(A);RB=rank(B);zhica=RB-RA;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('请注意:因为RA=RB<n,所以此方程组有无穷多解.')endendXJacobi迭代法:例1用jacobi迭代法求解代数线性代数方程组,保留四位有效数字(err=1e-4)其中A=[8-11;2 10-1;11-5];b=[1;4;3]。

gauss列主元素消去法matlab

gauss列主元素消去法matlab

高斯列主元素消去法是一种解线性方程组的常用方法,特别在数值分析和线性代数中应用广泛。

在Matlab中,我们可以使用该方法来解决大规模的线性方程组,包括矩阵的求解和矩阵的反转。

一、高斯列主元素消去法的基本原理高斯列主元素消去法是一种基于矩阵消元的方法,它通过一系列的矩阵变换将原始的线性方程组转化为上三角形式,然后再进行回代求解。

这个方法的核心就是通过矩阵的变换来简化原始的线性方程组,使得求解过程更加简单高效。

在Matlab中,我们可以利用矩阵运算和函数来实现高斯列主元素消去法,如`lu`分解函数和`\"`运算符等。

通过这些工具,我们能够快速地求解各种规模的线性方程组并得到准确的结果。

二、高斯列主元素消去法在Matlab中的实现在Matlab中,我们可以通过调用`lu`函数来实现高斯列主元素消去法。

该函数返回一个上三角矩阵U和一个置换矩阵P,使得PA=LU。

通过对U进行回代求解,我们可以得到线性方程组的解。

除了`lu`函数之外,Matlab还提供了一些其他的函数和工具来帮助我们实现高斯列主元素消去法,比如`\"`运算符和`inv`函数等。

通过这些工具的组合使用,我们能够更加灵活地进行线性方程组的求解,并且可以方便地处理特殊情况和边界条件。

三、高斯列主元素消去法的应用与局限性高斯列主元素消去法在实际应用中具有广泛的适用性,特别是对于大规模的线性方程组或者稀疏矩阵的求解。

通过Matlab中的工具和函数,我们可以快速地求解各种规模的线性方程组,并得到高精度的数值解。

然而,高斯列主元素消去法也存在一些局限性,比如对于奇异矩阵或者接近奇异矩阵的情况时,该方法的求解精度可能会下降。

在实际应用中,我们需要结合具体的问题和矩阵特性来选择合适的求解方法,以确保得到准确的结果。

四、个人观点和总结作为一种经典的线性方程组求解方法,高斯列主元素消去法在Matlab 中具有较好的实现和应用效果。

通过对其原理和实现细节的深入理解,我们能够更加灵活地应用该方法,并且能够更好地理解其适用性和局限性。

Gauss消去matlab程序

Gauss消去matlab程序

%消元过程 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 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
贵州师范大学数学与计算机科学学院
Gauss列主元消去法 列主元消去法Matlab程序 (2) 列主元消去法 程序
function X=Gausslzxq(A,B) % Input A is an N×N nonsingular matrix % B is an N×1 vector % Output X is an N×1 matrix containing the solution to AX=B % Initialize X and the temporary storage matrix C [N N]=size(A); X=zeros(N,1); C=zeros(1,N+1); Az=[A B]; % 形成增广矩阵: Az=[A | B]
贵州师范大学数学与计算机科学学院
if a_max<1e-10 index=0; 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; end return;
贵州师范大学数学与计算机科学学院

gauss在matlab的程序编写

gauss在matlab的程序编写

1.高斯消元法function [x]=mgauss(A,b,flag)ticif nargin<3,flag=0;endn=length(b);for k=1:(n-1)m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b],endendx=zeros(n,1);x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endtoc2.程序验证n=6;>> r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);>> x=mgauss(a,b)Elapsed time is 0.000000 seconds.x =1.00001.00001.00001.00001.00001.0000n=100;r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);x=mgauss(a,b) Elapsed time is 0.015000 seconds.x =1.00001.00001.00001.00001.00001.00001.0000function [RA,RB,x]=gaus(A,b,flag)ticif nargin<3,flag=0;endB=[A b]; n=length(b); RA=rank(A);RB=rank(B);if RB-RA>0disp('请注意:因为RA~=RB,所以此方程组无解.')returnendif RA==RBif RA==ndisp('请注意:因为RA=RB=n,所以此方程组有唯一解.')for k=1:(n-1)m=A(k+1:n,k)/A(k,k);A(k+1:n,k+1:n)=A(k+1:n,k+1:n)-m*A(k,k+1:n);b(k+1:n)=b(k+1:n)-m*b(k);A(k+1:n,k)=zeros(n-k,1);if flag~=0,Ab=[A,b],endendx=zeros(n,1);x(n)=b(n)/A(n,n);for k=n-1:-1:1x(k)=(b(k)-A(k,k+1:n)*x(k+1:n))/A(k,k);endelsedisp('请注意:因为RA=RB<n,所以此方程组有无穷多解.')endendtoc程序验证n=100; r=rand(n);a=r'*r+n*eye(n);b=a*ones(n,1);[ra,rb,x]=gaus(a,b) 请注意:因为RA=RB=n,所以此方程组有唯一解.Elapsed time is 0.032000 seconds.ra =100rb =100x =1.00001.00001.00001.00001.00001.0000图形2.LU分解程序function[l,u,x]=mlu(a,b)ticn=length(b);l=zeros(n);u=zeros(n);x=zeros(n,1);y=zeros(n,1); for k=1:nu(k,k:n)=a(k,k:n)-l(k,1:k-1)*u(1:k-1,k:n);l(k:n,k)=(a(k:n,k)-l(k:n,1:k-1)*u(1:k-1,k))/u(k,k);l(k,k)=1;endfor k=1:ny(k)=b(k)-l(k,1:k-1)*y(1:k-1);endfor k=n:-1:1x(k)=(y(k)-u(k,k+1:n)*x(k+1:n))/u(k,k);endtoc验证n=6,r=rand(n),a=r'*r+n*eye(n);b=a*ones(n,1);[l,u,x]=mlu(a,b)n =6r =0.8462 0.6813 0.3046 0.1509 0.4966 0.34200.5252 0.3795 0.1897 0.6979 0.8998 0.28970.2026 0.8318 0.1934 0.3784 0.8216 0.34120.6721 0.5028 0.6822 0.8600 0.6449 0.53410.8381 0.7095 0.3028 0.8537 0.8180 0.72710.0196 0.4289 0.5417 0.5936 0.6602 0.3093 Elapsed time is 0.000000 seconds.l =1.0000 0 0 0 0 00.2303 1.0000 0 0 0 00.1367 0.1246 1.0000 0 0 00.2291 0.1977 0.1438 1.0000 0 00.2676 0.2622 0.1441 0.2122 1.0000 00.1814 0.1540 0.0926 0.1288 0.1104 1.0000u =8.1875 1.8854 1.1195 1.8760 2.1912 1.48510 7.8060 0.9728 1.5430 2.0464 1.20180 0 6.7424 0.9694 0.9715 0.62430 0 0 7.5994 1.6123 0.97890 0 0 0 7.6472 0.84410 0 0 0 0 6.4954 x =1.00001.00001.00001.00001.00001.0000n=90,r=rand(n),a=r'*r+n*eye(n);b=a*ones(n,1);[l,u,x]=mlu(a,b)n =90r =Columns 1 through 90.8385 0.0164 0.4199 0.2731 0.8518 0.6859 0.8686 0.5152 0.19300.5681 0.1901 0.7537 0.6262 0.7595 0.6773 0.6264 0.6059 0.90960.3704 0.5869 0.7939 0.536x =1.00001.00001.00001.00001.0000经验证是正确的,太长了只节了部分。

matlab解三元方程

matlab解三元方程

matlab解三元方程一、引言在数学中,三元方程是一种包含三个未知数的方程。

解决三元方程是数学中的一个重要问题,它在实际应用中有着广泛的应用。

而MATLAB作为一种强大的数学软件,可以帮助我们解决三元方程。

本文将介绍如何使用MATLAB解决三元方程。

二、MATLAB解三元方程的方法MATLAB提供了多种方法来解决三元方程,其中最常用的方法是高斯消元法和LU分解法。

1. 高斯消元法高斯消元法是一种基本的线性代数方法,它通过消元的方式将方程组转化为上三角矩阵,然后通过回代求解未知数。

在MATLAB中,可以使用“\”运算符来实现高斯消元法。

例如,我们要解决以下三元方程组:x + 2y + 3z = 64x + 5y + 6z = 157x + 8y + 9z = 24可以使用以下代码来解决:A = [1 2 3; 4 5 6; 7 8 9];B = [6; 15; 24];X = A\B;其中,A是系数矩阵,B是常数矩阵,X是未知数矩阵。

通过“\”运算符,MATLAB会自动使用高斯消元法来解决方程组。

2. LU分解法LU分解法是一种将系数矩阵分解为下三角矩阵和上三角矩阵的方法,然后通过回代求解未知数。

在MATLAB中,可以使用“lu”函数来实现LU分解法。

例如,我们要解决以下三元方程组:x + 2y + 3z = 64x + 5y + 6z = 157x + 8y + 9z = 24可以使用以下代码来解决:A = [1 2 3; 4 5 6; 7 8 9];B = [6; 15; 24];[L,U] = lu(A);Y = L\B;X = U\Y;其中,L是下三角矩阵,U是上三角矩阵,Y是中间变量矩阵,X是未知数矩阵。

通过“lu”函数,MATLAB会自动使用LU分解法来解决方程组。

三、总结MATLAB是一种强大的数学软件,可以帮助我们解决三元方程。

本文介绍了MATLAB解决三元方程的两种方法:高斯消元法和LU分解法。

高斯消元法(含MATLAB编程)

高斯消元法(含MATLAB编程)

第2次选列主元后的增广矩阵
1 6 5 6 6 0 11/ 3 4 13/ 3 11 0 5/ 3 5 11/ 3 4 2 0 1 0 0
第2次消元后的增广矩阵
1 6 5 6 6 0 11/ 3 4 13 / 3 11 0 0 75 /11 62 /11 9 0 0 24 /11 37 /11 6
(1)输入增广矩阵A=[-3 2 6 4;10 -7 0 7;5 -1 5 6] 第1次选列主元后的增广矩阵 10 -3 -7 2 6 0 4 6 7 61/10 5/2 7
第1次消元后的增广矩阵 5 -1 5 10 -7 0 0 0 -1/10 5/2 6 5
第2次选列主元后的增广ห้องสมุดไป่ตู้阵 10 -7 0 0 0 5/2 -1/10 5 6
3 2 1 1 4 3 2 1 1 4 3/4 4 3 2 1 3/4 7/4 3/2 5/4 1/4 ( 2) A : b 1/2 3 4 3 1 1/2 6/7 4 3 1 4 1 1/4 2 3 4 1 1/4 5/7 3 3 2 1 1 4 3 2 1 1 4 3/4 7/4 3/2 5/4 1/4 3/4 7/4 3/2 5/4 1/4 , 1/2 6/7 12/7 10/7 -12/7 1/2 6/7 12/7 10/7 -12/7 1 1/4 5/7 5/6 5/3 0 1/4 5/7 5/6 4 2 1 1 4 3 3/ 4 1 7 / 4 3/ 2 5/ 4 ,U L 1/ 2 6 / 7 1 12 / 7 10 / 7 1 5/ 3 1/ 4 5 / 7

matlab高斯消去文档

matlab高斯消去文档

1.用LU分解及列主元高斯消去法解线性方程组10 -7 0 1 x1 8-3 2.099999 6 2 x2= 5.9000015 -1 5 -1 x3 52 1 0 2 x4 1输出AX=b中系数A=LU分解的矩阵L及U,解向量x及detA;列主元法的行交换次序,解向量x及detA;比较两种方法所得结果.(1)LU分解法:Command Window中输入:>>A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2]A=10.0000 -7.0000 0 1.0000-3.0000 2.1000 6.0000 2.00005.0000 -1.0000 5.0000 -1.00002.0000 1.0000 0 2.0000>> b=[8 5.900001 5 1];>> A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2];>> [l,u]=lu(a)l =1.0000 0 0 0-0.3000 -0.0000 1.0000 00.5000 1.0000 0 00.2000 0.9600 -0.8000 1.0000u =10.0000 -7.0000 0 1.00000 2.5000 5.0000 -1.50000 0 6.0000 2.30000 0 0 5.0800>> x=A/bx =0.31810.16340.46550.1915>> A=det(A)A =-762.0001(2)列主元高斯消去法:编写文件gauss.mfunction x=gauss (A,b)%系数矩阵非奇异的, %n = size(A,1);if abs(det(A))<= 1e-8error('系数矩阵是奇异的');return;end%for k=1:nak = max(abs(A(k:n,k)));index = find(A(:,k)==ak);if length(index) == 0index = find(A(:,k)==-ak); end%交换列主元temp = A(index,:);A(index,:) = A(k,:);A(k,:) = temp;temp = b(index);b(index) = b(k); b(k) = temp;%消元过程for i=k+1:nm=A(i,k)/A(k,k);%消除列元素A(i,k+1:n)=A(i,k+1:n)-m*A(k,k+1:n);b(i)=b(i)-m*b(k);endend%回代过程x(n)=b(n)/A(n,n);for k=n-1:-1:1;x(k)=(b(k)-A(k,k+1:n)*x(k+1:n)')/A(k,k);endx=x';endCommand Window中输入:>> A=[10 -7 0 1;-3 2.099999 6 2;5 -1 5 -1;2 1 0 2]; >> b=[8 5.900001 5 1];>> x=gauss(A,b)x =0.0000-1.00001.00001.0000>> A=det(A)A =-762.0001比较两种计算方法结果可以看出两者计算结果偏差较大。

LU分解高斯消元列主元高斯消元matlab代码

LU分解高斯消元列主元高斯消元matlab代码

数学实验作业一、矩阵LU分解:function [L,U,p]=lutx(A)[n,n]=size(A);p=(1:n)';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],:);p([k m])=p([m k]);endi=k+1:n;A(i,k)=A(i,k)/A(k,k);j=k+1:n;A(i,j)=A(i,j)-A(i,k)*A(k,j);endendL=tril(A,-1)+eye(n,n)U=triu(A)pend高斯消元法求解方程:n=3;a=[1 2 3 ;4 5 6 ;7 8 9 ];b=[17 18 19];l=eye(n);y=1;for i=1:(n-1)for j=1:(n-i)if a(j+(i-1)*n+y)~=0l(j+(i-1)*n+y)=a(j+(i-1)*n+y)/a(j+(i-1)*n+y-j)for k=1:(n-i+1)a(j+(i-1)*n+y+(k-1)*n)=a(j+(i-1)*n+y+(k-1)*n)-a(j+(i-1)*n+y+(k-1)*n-j)*l(j+(i-1)*n+y) endb(j+y-1)=b(j+y-1)-b(y)*l(j+(i-1)*n+y);endendy=y+1;endsum=0;for j=1:nsum=sum+x(j)+a(k,j);endsum=0;for j=1:nx(j)=0;endfor k=n:-1:1for j=1:nsum=sum+x(j)*a(k,j)endx(k)=(b(k)-sum)/a(k,k) sum=0;end列主元高斯消元法代码:n=3;a=[1 2 3 ;4 5 6 ;7 8 9 ]; b=[17 18 19];l=eye(n);p=eye(n);ma=0for i=1:(n-1)for j=i:nif a(j,i)>ma;ma=a(j,i)endendfor k=i:nif a(k,i)==mam=k;endendfor j=1:na1=a(m,j);a(m,j)=a(i,j);a(i,j)=a1p1=p(m,j);p(m(1),j)=p(i,j);p(i,j)=p1;endb1=b(m);b(m)=b(i);b(i)=b1;ma=0;endy=1;for i=1:(n-1)for j=1:(n-i)if a(j+(i-1)*n+y)~=0l(j+(i-1)*n+y)=a(j+(i-1)*n+y)/a(j+(i-1)*n+y-j)for k=1:(n-i+1)a(j+(i-1)*n+y+(k-1)*n)=a(j+(i-1)*n+y+(k-1)*n)-a(j+(i-1)*n+y+(k-1)*n-j )*l(j+(i-1)*n+y)endb(j+y-1)=b(j+y-1)-b(y)*l(j+(i-1)*n+y);endendy=y+1;endsum=0;for j=1:nx(j)=0;endfor k=n:-1:1for j=1:nsum=sum+x(j)*a(k,j)endx(k)=(b(k)-sum)/a(k,k)sum=0;end全主元高斯消元法代码:n=3;a=[1 2 3 ;4 5 6 ;7 8 9 ];b=[17 18 19];l=eye(n);p=eye(n);q=eye(n);max=0;for i=1:(n-1)for j=i:nfor k=i:nif max<abs(a(j,k)) max=abs(a(j,k));endendendfor j=i:nfor k=i:nif max==abs(a(j,k)) m=[j,k];endendendfor j=1:na1=a(m(1),j);a(m(1),j)=a(i,j);a(i,j)=a1;p1=p(m(1),j);p(m(1),j)=p(i,j);p(i,j)=p1;endb1=b(m(1));b(m(1))=b(i);b(i)=b1;for j=1:na1=a(j,m(2));a(j,m(2))=a(j,i);a(j,i)=a1;q1=q(j,m(2));q(j,m(2))=q(j,i);q(j,i)=q1;endmax=0;endy=1;for i=1:(n-1)for j=1:(n-i)if a(j+(i-1)*n+y)~=0l(j+(i-1)*n+y)=a(j+(i-1)*n+y)/a(j+(i-1)*n+y-j)for k=1:(n-i+1)a(j+(i-1)*n+y+(k-1)*n)=a(j+(i-1)*n+y+(k-1)*n)-a(j+(i-1)*n+y+(k-1)*n-j )*l(j+(i-1)*n+y);endb(j+y-1)=b(j+y-1)-b(y)*l(j+(i-1)*n+y);endendy=y+1;endsum=0;for j=1:nx(j)=0;endfor k=n:-1:1for j=1:nsum=sum+x(j)*a(k,j)endx(k)=(b(k)-sum)/a(k,k)sum=0;end解:编写矩阵:0 1 0 0 0 -1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0a 0 0 -1 -a 0 0 0 0 0 0 0 0a 0 -1 0 -a 0 0 0 0 0 0 0 00 0 0 1 0 0 0 -1 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 0 A= 0 0 0 0 a 1 0 0 -a -1 0 0 00 0 0 0 a 0 1 0 -a 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 -10 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 1 a 0 0 -a 00 0 0 0 0 0 0 0 a 0 1 a 00 0 0 0 0 0 0 0 0 0 0 a 1B= (0 10 0 0 0 0 0 15 0 20 0 0 0)’F= (f1 f2 f3 f4 f5 f6 f7 f8 f9 f10 f11 f12 f13)’AF=B F=A\B程序及运算结果:>> a=sym(1/sqrt(2))a =2^(1/2)/2>> A=[0 1 0 0 0 -1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0a 0 0 -1 -a 0 0 0 0 0 0 0 0a 0 -1 0 -a 0 0 0 0 0 0 0 00 0 0 1 0 0 0 -1 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 a 1 0 0 -a -1 0 0 00 0 0 0 a 0 1 0 -a 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 -10 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 1 a 0 0 -a 00 0 0 0 0 0 0 0 a 0 1 a 00 0 0 0 0 0 0 0 0 0 0 a -1]A =[ 0, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0, 0, 0] [ 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0] [ 2^(1/2)/2, 0, 0, -1, -2^(1/2)/2, 0, 0, 0, 0, 0, 0, 0, 0][ 2^(1/2)/2, 0, -1, 0, -2^(1/2)/2, 0, 0, 0, 0, 0, 0, 0, 0][ 0, 0, 0, 1, 0, 0, 0, -1, 0, 0, 0, 0, 0] [ 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0] [ 0, 0, 0, 0, 2^(1/2)/2, 1, 0, 0, -2^(1/2)/2, -1, 0, 0, 0] [ 0, 0, 0, 0, 2^(1/2)/2, 0, 1, 0, -2^(1/2)/2, 0, 0, 0, 0] [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, -1] [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0] [ 0, 0, 0, 0, 0, 0, 0, 1, 2^(1/2)/2, 0, 0, -2^(1/2)/2, 0] [ 0, 0, 0, 0, 0, 0, 0, 0, 2^(1/2)/2, 0, 1, 2^(1/2)/2, 0] [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2^(1/2)/2, 1]>> B=[0;10;0;0;0;0;0;15;0;20;0;0;0] B =101520>> F=A\BF =10*2^(1/2)-101010-1010-15*2^(1/2)520-5*2^(1/2)5LU分解:>> a=2^(1/2)/2a =0.7071>> A=[0 1 0 0 0 -1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0a 0 0 -1 -a 0 0 0 0 0 0 0 0a 0 -1 0 -a 0 0 0 0 0 0 0 00 0 0 1 0 0 0 -1 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 a 1 0 0 -a -1 0 0 00 0 0 0 a 0 1 0 -a 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 -10 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 1 a 0 0 -a 00 0 0 0 0 0 0 0 a 0 1 a 00 0 0 0 0 0 0 0 0 0 0 a 1]A =Columns 1 through 80 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00.7071 0 0 -1.0000 -0.7071 0 0 00.7071 0 -1.0000 0 -0.7071 0 0 00 0 0 1.0000 0 0 0 -1.00000 0 0 0 0 0 1.0000 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0.7071 0 1.0000 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 01.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 0-0.7071 0 0 0 00 1.0000 0 0 -1.00000 0 1.0000 0 00.7071 0 0 -0.7071 00.7071 0 1.0000 0.7071 00 0 0 0.7071 1.0000>> [L,U,P]=lu(A)L =Columns 1 through 81.0000 0 0 0 0 0 0 00 1.0000 0 0 0 0 0 00 0 1.0000 0 0 0 0 01.0000 0 -1.0000 1.0000 0 0 0 00 0 0 0 1.0000 0 0 00 0 0 0 1.0000 1.0000 0 00 0 0 0 0 0 1.0000 00 0 0 1.0000 0 0 01.00000 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 01.0000 0 0 0 00 1.0000 0 0 00 0 1.0000 0 01.0000 0 1.0000 1.0000 00 0 0 0.5000 1.0000U =Columns 1 through 80.7071 0 0 -1.0000 -0.7071 0 0 00 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00 0 0 1.0000 0 0 0 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0 -1.0000 1.0000 00 0 0 0 0 0 1.0000 00 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 00 1.0000 0 0 00 0 0 0 00 0 0 0 00.7071 0 0 -0.7071 00 1.0000 0 0 -1.00000 0 1.0000 0 00 0 0 1.4142 00 0 0 0 1.0000P =0 0 1 0 0 0 0 0 0 0 0 0 01 0 0 0 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 0 0 0 1 0 0 0 0 00 0 0 0 0 1 0 0 0 0 0 0 00 0 0 0 1 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0 0 1 00 0 0 0 0 0 0 0 0 0 0 0 1>> F=U\(L\B)F =10.606637.500010.606627.5000-15.000010.606627.5000-10.60667.5000解:程序及运算结果:Lutx.m文件:function [L,U,p,sig] = lutx(A) %LU Triangular factorization% [L,U,p,sig] = lutx(A) computes a unit lower triangular % matrix L, an upper triangular matrix U, a permutation % vector p, and a scalar sig, so that L*U = A(p,:) and% sig = +1 or -1 if p is an even or odd permutation. [n,n] = size(A);p = (1:n)';w=0for k = 1:n-1% Find largest element below diagonal in k-th column [r,m] = max(abs(A(k:n,k)));m = m+k-1;% Skip elimination if column is zeroif (A(m,k) ~= 0)% Swap pivot rowif (m ~= k)A([k m],:) = A([m k],:);p([k m]) = p([m k]);w=w+1;end% Compute multipliersi = k+1:n;A(i,k) = A(i,k)/A(k,k);% Update the remainder of the matrixj = k+1:n;A(i,j) = A(i,j) - A(i,k)*A(k,j);endend% Separate resultL = tril(A,-1) + eye(n,n)U = triu(A)psig=(-1)^wmydet.m文件:function det=mydet(A)[L,U,p,sig] = lutx(A)det=sig*prod(diag(U))运行结果:>> a=2^(1/2)/2a =0.7071>> A=[0 1 0 0 0 -1 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 0a 0 0 -1 -a 0 0 0 0 0 0 0 0a 0 -1 0 -a 0 0 0 0 0 0 0 00 0 0 1 0 0 0 -1 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 a 1 0 0 -a -1 0 0 00 0 0 0 a 0 1 0 -a 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 -10 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 1 a 0 0 -a 00 0 0 0 0 0 0 0 a 0 1 a 00 0 0 0 0 0 0 0 0 0 0 a 1]A =Columns 1 through 80 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00.7071 0 0 -1.0000 -0.7071 0 0 00.7071 0 -1.0000 0 -0.7071 0 0 00 0 0 1.0000 0 0 0 -1.00000 0 0 0 0 0 1.0000 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0.7071 0 1.0000 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 01.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 0-0.7071 0 0 0 00 1.0000 0 0 -1.00000 0 1.0000 0 00.7071 0 0 -0.7071 00.7071 0 1.0000 0.7071 00 0 0 0.7071 1.0000>> mydet(A)w =L =Columns 1 through 81.0000 0 0 0 0 0 0 00 1.0000 0 0 0 0 0 00 0 1.0000 0 0 0 0 01.0000 0 -1.0000 1.0000 0 0 0 00 0 0 0 1.0000 0 0 00 0 0 0 1.0000 1.0000 0 00 0 0 0 0 0 1.0000 00 0 0 1.0000 0 0 01.00000 0 0 0 0 0 0-1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 01.0000 0 0 0 00 1.0000 0 0 00 0 1.0000 0 01.0000 0 1.0000 1.0000 00 0 0 0.5000 1.0000U =Columns 1 through 80.7071 0 0 -1.0000 -0.7071 0 0 00 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00 0 0 1.0000 0 0 0 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0 -1.0000 1.0000 00 0 0 0 0 0 1.0000 00 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 00 1.0000 0 0 00 0 0 0 00 0 0 0 00.7071 0 0 -0.7071 00 1.0000 0 0 -1.00000 0 1.0000 0 00 0 0 1.4142 00 0 0 0 1.0000p =31247865119101213sig =-1L =Columns 1 through 81.0000 0 0 0 0 0 0 00 1.0000 0 0 0 0 0 00 0 1.0000 0 0 0 0 01.0000 0 -1.0000 1.0000 0 0 0 00 0 0 0 1.0000 0 0 00 0 0 0 1.0000 1.0000 0 00 0 0 0 0 0 1.0000 00 0 0 1.0000 0 0 01.00000 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 01.0000 0 0 0 00 1.0000 0 0 00 0 1.0000 0 01.0000 0 1.0000 1.0000 00 0 0 0.5000 1.0000U =Columns 1 through 80.7071 0 0 -1.0000 -0.7071 0 0 00 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00 0 0 1.0000 0 0 0 00 0 0 0 0.7071 1.0000 0 00 0 0 0 0 -1.0000 1.0000 00 0 0 0 0 0 1.0000 00 0 0 0 0 0 0 -1.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 00 1.0000 0 0 00 0 0 0 00 0 0 0 00.7071 0 0 -0.7071 00 1.0000 0 0 -1.00000 0 1.0000 0 00 0 0 1.4142 00 0 0 0 1.0000 p =31247865119101213sig =-1ans =-0.5000解:程序及运算结果:function [L,U,p] = lutx1(A)[n,n] = size(A);p = (1:n)';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],:);p([k m]) = p([m k]);endfor i=k+1:nA(i,k)=A(i,k)/A(k,k);endfor j=k+1:nA(i,j)=A(i,j)-A(i,k)*A(k,j);endendendL=tril(A,-1)+eye(n,n)U=triu(A)运行结果:>> lutx1(A)L =1 0 0 0 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 0 01 0 -1 0 1 0 0 0 0 0 0 0 00 0 0 0 -1 1 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 0 0 0 1 0 0 0 0 00 0 0 0 -1 0 1 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 -1 0 1 1 00 0 0 0 0 0 0 0 0 0 0 1 1 U =Columns 1 through 80.7071 0 0 -1.0000 -0.7071 0 0 00 1.0000 0 0 0 -1.0000 0 00 0 1.0000 0 0 0 0 00 0 0 1.0000 0 0 0 -1.00000 0 0 0 -0.7071 0 0 00 0 0 0 0 1.0000 0 00 0 0 0 0 0 1.0000 00 0 0 0 0 0 01.00000 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 00 0 0 0 0 0 0 0Columns 9 through 130 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 00 0 0 0 0-0.7071 -1.0000 0 0 00 0 0 0 00.7071 0 0 -0.7071 0-0.7071 0 0 0 00 1.0000 0 0 -1.00000 0 1.0000 0 00 0 0 0.7071 00 0 0 0 1.0000ans =1 0 0 0 0 0 0 0 0 0 0 0 00 1 0 0 0 0 0 0 0 0 0 0 00 0 1 0 0 0 0 0 0 0 0 0 00 0 0 1 0 0 0 0 0 0 0 0 01 0 -1 0 1 0 0 0 0 0 0 0 00 0 0 0 -1 1 0 0 0 0 0 0 00 0 0 0 0 0 1 0 0 0 0 0 00 0 0 0 0 0 0 1 0 0 0 0 00 0 0 0 -1 0 1 0 1 0 0 0 00 0 0 0 0 0 0 0 0 1 0 0 00 0 0 0 0 0 0 0 0 0 1 0 00 0 0 0 0 0 0 0 -1 0 1 1 00 0 0 0 0 0 0 0 0 0 0 1 1。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《数值分析》实验报告
一、实验目的与要求
1.掌握高斯消去法的基本思路和迭代步骤;
2.培养编程与上机调试能力。

二、实验内容
1.编写用高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.
5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2)
21x?8x?32x?2.137x?3.712x?4.623?1.347x???312312??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312
2.编写用列主元高斯消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.
5x?2x?x?80.101x?2.304x?3.555x?1.183??312312??(1)(2)
2x?8x?3x?212.137?4.6231.347?x?3.712x?x??321321??1x?3x?6x??2.835x?1.072x?5.643x?3.035??132 312三.MATLAB计算源程序
AX?b MATLAB1. 程序用高斯消元法解线性方程组的b;输入的量:系数矩阵和常系数向量A RA,RB, n方程组中未知量的个数的秩输出的量:系数矩阵和增广矩阵BA.及其解的信息和有关方程组解X
gaus(A,b)
function [RA,RB,n,X]=B=[A b]; n=length(b); RA=rank(A);
RB=rank(B);zhica=RB-RA;
if zhica>0,
disp('RA~=RB.') ,所以此方程组无解请注意:因为return
end
if RA==RB
if RA==n
disp('RA=RB=n.') ,所以此方程组有唯一解请注意:因为X=zeros(n,1); C=zeros(1,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
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);
end
else
disp('RA=RB<n.') ,所以此方程组有无穷多解请注意:因为End
End
2.列主元消元法及其MATLAB程序
AX?b TLAB MA 程序用列主元消元法解线性方程组的b;输入的量:系数矩阵和常系数向量A RA,RB, 方程组中未知量的个的秩和增广矩阵输出的量:系数矩阵BAn.
及其解的信息和有关方程组解数X
function [RA,RB,n,X]=liezhu(A,b)
B=[A b]; n=length(b); RA=rank(A);
RB=rank(B);zhica=RB-RA;
if zhica>0,
disp('RA~=RB.') ,所以此方程组无解请注意:因为return
end
if RA==RB
if RA==n
disp('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: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
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);
end
else
disp('RA=RB<n.') ,所以此方程组有无穷多解请注意:因为end
end
三.实验过程:
1(1)编写高斯消元法的MATLAB文件如下:
clear;
A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];
b=[1.183;2.137;3.035];
[RA,RB,n,X] =gaus (A,b)
运行结果为:
请注意:因为RA=RB=n,所以此方程组有唯一解.
RA =
3
RB =
3
n =
3
X =
-0.3982
0.0138
0.3351
(2)编写高斯消元法MATLAB文件如下:
clear;
A=[5 2 1;2 8 -3;1 -3 -6];
b=[8;21;1;];
[RA,RB,n,X] =gaus (A,b)
运行结果为:
请注意:因为RA=RB=n,所以此方程组有唯一解.
RA =
3
RB =
3
n =
3
X =
1
2
-1
在MATLAB中利用逆矩阵法检验结果:
(1) 在command windows中直接运行命令:
A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];
b=[1.183;2.137;3.035];X=A\b
运行结果为:
X =
-0.3982
0.0138
0.3351
(2) 在command windows中直接运行命令:
A=[5 2 1;2 8 -3;1 -3 -6];
b=[8;21;1;];X=A\b
运行结果为:
X =
1
2
-1
两小题所得结果相同,检验通过
2(1)编写列组高斯消元法MATLAB文件如下:
clear;
A=[0.101 2.304 3.555;-1.347 3.712 4.623;-2.835 1.072 5.643];
b=[1.183;2.137;3.035];
[RA,RB,n,X] =liezhu(A,b)
运行结果:
请注意:因为RA=RB=n,所以此方程组有唯一解.
RA =
3
RB =
3
n =
3
X =
-0.3982
0.0138
0.3351
(2)编写列组高斯消元法的MATLAB文件如下:
clear;
A=[5 2 1;2 8 -3;1 -3 -6];
b=[8;21;1;]
[RA,RB,n,X] =liezhu(A,b)
运行结果为:
请注意:因为RA=RB=n,所以此方程组有唯一解.
RA =
3
RB =
3
n =
3
X =
1
2
-1
与题中逆矩阵计算所得结果相同,检验通过1
四.实验体会:
通过实验我掌握了消元法解方程的一些基本算法以及用matlab实现矩阵的几种基本计算。

对MATLAB软件有了更深的了解。

同时,在实验中,在输入向量b=[8;21;1;]时错误的输成b=[8;21;1;],
致使程序不能运行,无法得到预期的实验结果,后经多番仔细查找,最终发现分号应为英文输入法,以后在编程时,一定更加认真仔细,不犯同样的错误!.。

相关文档
最新文档