当前位置:文档之家› 消元法实验报告4

消元法实验报告4

西京学院数学软件实验任务书
《数值分析》实验报告
实验一
一、实验目的与要求
1.掌握高斯列主元消去法解线性方程组的基本思路;
2.了解一些计算机的算法,会以某种汇编语言实现算法结果(本实验主要用matlab编程)
二、实验内容
1.编写用高斯列主元消元法解线性方程组的MATLAB程序,并求解下面的线性方程组,然后用逆矩阵解方程组的方法验证.
(1)
123
123
123
221
1
221
x x x
x x x
x x x
+-=


++=

⎪++=

(2)
123
123
123
21
1
21
x x x
x x x
x x x
-+=


++=

⎪+-=

2.列主元消元法及其matlab程序function [Ra,Rb,n,X]=GaussXQLineMain(A,b) %高斯列主元消元法,其中B为增广矩阵
B=[A b];
%读入b的长度
n=length(b);
%读出矩阵a,b秩
Ra=rank(A);
Rb=rank(B);
if (Rb-Ra)>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
%调用格式
% clear;
% A=[1 2 3;4 5 6;7 8 9 ];
% b=[21;22;23];
% [Ra,Rb,n,X] =GaussXQLineMain(A,b)三、实验过程
方程组(1)过程
>> clear;
A=[1 2 -2;1 1 1;2 2 1 ];
b=[1;1;1];
[Ra,Rb,n,X] =GaussXQLineMain(A,b) 因为Ra=Rb=n,所以此方程组有唯一解.
Ra =
3
Rb =
3
n =
3
X =
-3.0000
3.0000
1.0000
方程组(2)过程
clear;
A=[2 -1 1;1 1 1;1 1 -2 ];
b=[1;1;1];
[Ra,Rb,n,X] =GaussXQLineMain(A,b)
因为Ra=Rb=n,所以此方程组有唯一解.
Ra =
3
Rb =
3
n =
3
X =
0.6666
0.3333
在MATLAB中利用逆矩阵法检验结果:
(1) 在command windows中直接运行命令:
A=[1 2 -2;1 1 1;2 2 1 ];
b=[1;1;1];
X=A\b
结果
X =
-3.0000
3.0000
1.0000
(2) 在command windows中直接运行命令:
A=[2 -1 1;-1 1 1;1 1 -2 ];
b=[1;1;1];
X=A\b
结果
X =
0.6666
0.3333
四、实验总结
通过本次实验再次熟悉了高斯列主元消元法的思想,加深了对matlab语言的理解,简洁明了,在实验过程中函数编写实现不了,最后参考matlab算法通过实验,学会了matlab函数的调用使得matlab编写的函数通用实用。

相关主题