消元法实验报告8Word文档格式.docx
《消元法实验报告8Word文档格式.docx》由会员分享,可在线阅读,更多相关《消元法实验报告8Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
实验内容及数据来源
用列主元消去法计算方程组
实验步骤
步骤一:
编写列主元消去法的程序。
打开Editor编辑器,输入以下语句:
functionmaintest2
clc
clearall
%num=input('
pleaseinputtheordern='
)
%A=zeros(num,num);
%fori=1:
num
%forj=1:
%A(i,j)=input('
'
);
%end
%end
%A
%ifdet(A)~=0
%b(i)=input('
%b=b'
A=[123;
135;
136];
%系数矩阵
b=[234]'
%常数项
num=length(b)
fork=1:
num-1
fori=k+1:
ifA(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
A
B
%回代求x
x(num)=b(num)/A(num,num);
fori=num-1:
-1:
1
sum=0;
forj=i+1:
sum=sum+A(i,j)*x(j);
x(i)=(b(i)-sum)/A(i,i);
x
运算结果
A=
123
012
001
b=
2
1
x=
1-11
实验结论
高斯消元能很好的求解线性方程组,和用克莱姆法则求解方程组该算法简单而且计算次数少。
但是高斯顺序消元是有缺陷的,它并没有考虑主对角元素相对其他同列元素绝对值很小,有时会导致用绝对值较小的数字做分母而出现较大的数字与较小数字进行相加减运算而被“吞掉”的现象,以至于产出某一未知元较小的误差却引起其他元更大的误差。
实验2
列主元消去法计算线性方程组
高斯顺序消元法最后指出了在逐次消元过程中,如果主对角元素相对其他同列元素绝对值很小,有时会导致用绝对值较小的数字做分母而出现较大的数字与较小数字进行相加减运算而被“吞掉”的现象,以至于产出某一未知元较小的误差却引起其他元更大的误差。
为了使消元过程中见效舍入误差和不至于中断,我们可以不按照自然顺序进行消元。
事实上,在第
步消元的时候,我们不一定选取
作为主元,而从同列
中选择绝对值最大的作为主元素,即使
如此我们就得到了列主元消去法。
functionmaintest
n=input('
A=zeros(n,n);
fori=1:
n
forj=1:
A(i,j)=input('
ifdet(A)~=0
b(i)=input('
b=b'
zengguang=[A,b]
n-1
%%取出各列绝对值最大的放在上面作为主元
[Y,j]=max(abs(zengguang(k:
n,k)));
C=zengguang(k,:
zengguang(k,:
)=zengguang(j+k-1,:
zengguang(j+k-1,:
)=C;
%高斯消元
m=zengguang(i,k)/zengguang(k,k);
zengguang(i,k:
n+1)=zengguang(i,k:
n+1)-m*zengguang(k,k:
n+1);
b=zengguang(1:
n,n+1);
A=zengguang(1:
n,1:
n);
x(n)=b(n)/A(n,n);
fori=n-1:
把文件以maintest.m为文件名保存。
步骤二:
解方程。
在命令窗口输入:
pleaseinputtheordern=3
并且输入系数矩阵
135
136
输入常数项为
3
4
得到增广矩阵为:
zengguang=
1232
1353
1364
运行结果得到
把向量计算得到的解向量代入原方程,可以发现符合的还是比较好的。
这说明了列主元消去法计算这一类方程的有效性。
事实上,对于普通Gauss消去法的修正,还可以有行主元消去法,全主元消去法。
但是全主元消去法相对于行、列主元消去法的工作量要大的多。
所以列主元消去法是解线性方程组实用的方法之一。
实验3
高斯全主元消去法解线性方程组
全主元消去法是对于一般的矩阵,每一步都要处理的矩阵中选取绝对值最大的元素最为主元,从而使高斯消去具有更好的数值稳定性的方法。
用高斯全主元消去法计算方程组
编写求上三角矩阵线性方程组的函数。
functionx=SolveUpTriangle(A,b)
%求上三角系数矩阵的线性方程组Ax=b的解
%线性方程组的系数矩阵:
%线性方程组中的常数向量:
b
%线性方程组的解:
N=size(A);
n=N
(1);
fori=n:
if(i<
n)
s=A(i,(i+1):
n)*x((i+1):
n,1);
else
s=0;
x(i,1)=(b(i)-s)/A(i,i);
把文件以SolveUpTriangle.m为文件名保存。
编写高斯全主元消去的算法。
%利用高斯全主元消去法求AX=b方程组的解
A=[3200;
1420;
0121;
00-11]
b=[572-2]'
n=N
(1);
index_l=0;
index_r=0;
order=1:
n;
%记录未知数顺序的向量
(n-1)
me=max(max(abs(A(i:
n,i:
n))))%选取全主元
fork=i:
forr=i:
if(abs(A(k,r))==me)
index_l=k;
index_r=r;
%保存主元所在的行和列
k=n;
break;
temp=A(i,1:
A(i,1:
n)=A(index_l,1:
A(index_l,1:
n)=temp;
bb=b(index_l);
b(index_l)=b(i);
b(i)=bb;
%交换主行
temp=A(1:
n,i);
A(1:
n,i)=A(1:
n,index_r);
n,index_r)=temp;
%交换主列
pos=order(i);
order(i)=order(index_r);
order(index_r)=pos;
%主列的交换会造成未知数顺序的变化
forj=(i+1):
if(A(i,i)==0)
disp('
对角元素为0!
return;
l=A(j,i);
m=A(i,i);
A(j,1:
n)=A(j,1:
n)-l*A(i,1:
n)/m
b(j)=b(j)-l*b(i)/m
x=SolveUpTriangle(A,b);
%调用上三角系数矩阵求线性方程组的函数
y=zeros(n,1);
if(order(j)==i)
y(i)=x(j);
end%恢复未知数原来的顺序
x=y;
XA=A;
把文件以GaussQuanzhuyuan.m为文件名保存。
运行上面这段程序得到计算结果:
4.00001.00002.00000
02.5000-1.00000
001.40001.0000
0001.7143
7.0000
1.5000
0.4000
-1.7143
1.0000
-1.0000
虽然全主元消去法的求解结果更加可靠,高斯消去具有更好的数值稳定性。
但是由于全选主元每步消耗的时间更多,而且要进行列交换,那么所求未知量x1,x2,……xn的顺序就会被打乱,因此,时间应用中一般使用列主元消去法。