完整版高斯消元法MATLAB实现
- 格式:doc
- 大小:19.47 KB
- 文档页数:5
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。
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高斯-约旦消去法
高斯-约旦消去法是一种线性代数中的消元法,常用于求解线性方程组。
该方法通过矩阵的初等变换将方程组转化为阶梯型矩阵,从而求解出未知数的值。
具体步骤如下:
设有n个未知数,m个方程,方程组的系数矩阵为A,右端常数为b。
1. 将系数矩阵A和右端常数b组合成增广矩阵Ab。
2. 从第一行开始,将该行的第一个非零元素(称为主元)作为消元元素,用该元素将下面所有行的对应列元素消为零。
3. 重复以上步骤,依次将每一行的主元素作为消元元素,直到将整个矩阵消成阶梯型矩阵。
4. 倒序回代,求出每个未知数的值。
以上就是高斯-约旦消去法的主要步骤。
在实际应用中,需要注意判断矩阵是否可逆,以及主元素是否为零等情况,以保证求解的正确性。
西京学院数学软件实验任务书实验一实验报告一、实验名称:线性方程组高斯消去法。
二、实验目的:进一步熟悉理解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实现高斯消元法: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]。
高斯列主元素消去法是一种解线性方程组的常用方法,特别在数值分析和线性代数中应用广泛。
在Matlab中,我们可以使用该方法来解决大规模的线性方程组,包括矩阵的求解和矩阵的反转。
一、高斯列主元素消去法的基本原理高斯列主元素消去法是一种基于矩阵消元的方法,它通过一系列的矩阵变换将原始的线性方程组转化为上三角形式,然后再进行回代求解。
这个方法的核心就是通过矩阵的变换来简化原始的线性方程组,使得求解过程更加简单高效。
在Matlab中,我们可以利用矩阵运算和函数来实现高斯列主元素消去法,如`lu`分解函数和`\"`运算符等。
通过这些工具,我们能够快速地求解各种规模的线性方程组并得到准确的结果。
二、高斯列主元素消去法在Matlab中的实现在Matlab中,我们可以通过调用`lu`函数来实现高斯列主元素消去法。
该函数返回一个上三角矩阵U和一个置换矩阵P,使得PA=LU。
通过对U进行回代求解,我们可以得到线性方程组的解。
除了`lu`函数之外,Matlab还提供了一些其他的函数和工具来帮助我们实现高斯列主元素消去法,比如`\"`运算符和`inv`函数等。
通过这些工具的组合使用,我们能够更加灵活地进行线性方程组的求解,并且可以方便地处理特殊情况和边界条件。
三、高斯列主元素消去法的应用与局限性高斯列主元素消去法在实际应用中具有广泛的适用性,特别是对于大规模的线性方程组或者稀疏矩阵的求解。
通过Matlab中的工具和函数,我们可以快速地求解各种规模的线性方程组,并得到高精度的数值解。
然而,高斯列主元素消去法也存在一些局限性,比如对于奇异矩阵或者接近奇异矩阵的情况时,该方法的求解精度可能会下降。
在实际应用中,我们需要结合具体的问题和矩阵特性来选择合适的求解方法,以确保得到准确的结果。
四、个人观点和总结作为一种经典的线性方程组求解方法,高斯列主元素消去法在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经验证是正确的,太长了只节了部分。
《数值分析》实验报告
一、实验目的与要求
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;],
致使程序不能运行,无法得到预期的实验结果,后经多番仔细查找,最终发现分号应为英文输入法,以后在编程时,一定更加认真仔细,不犯同样的错误!.。