三种消元法程序——数学软件实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
北京大学数学软件实验任务书
课程名称数学软件实验班级数学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 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
【程序设计】
function maintest1 clc clear all
num=input('please input the order n=') A=zeros(num,num); for i=1:num for j=1:num
A(i,j)=input(''); end
end A
if det(A)~=0
for i=1:num
b(i)=input('');
end
b=b'
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
end
【实验结论】
高斯消元能很好的求解线性方程组,和用克莱姆法则求解方程组该算法简单而且求解次数少。但是高斯顺序消元是有缺陷的,它并没有考虑主对角元素相对其他同列元素绝对值很小,有时会导致用绝对值较小的数字做分母而出现较大的数字与较小数字进行相加减运算而被“吞掉”的现象,以至于产出某一未知元较小的误差却引起其他元更大的误差。
实验二列主元消去法求解线性方程组
【实验名称】列主元消去法求解线性方程组
【实验目的】进一步熟悉理解列主元消去法求解线性方程组解法思路,提高matlab编程能力。
【实验要求】已知线性方程矩阵,利用软件求解线性方程组的解。
【实验原理】
列主元消去法基本思路:
设有线性方程组x b A =,设A 是可逆矩阵。列主元消去法的基本思想就是通过列主元的选取将初等行变换作用于方程组的增广矩阵[]A |b =A ,将其中的A 变换成一个上三角矩阵,然后求解这个三角形方程组。
将方程组用增广矩阵[]()(1)|ij n n b a ⨯+A =A =表示。 1 消元过程
Step1:选主元,找{},1,,k i k k n ∈+ 使得
,max k i k ik k i n
a a ≤≤=,1,2,,1k n =-
Step2:如果,0k i k a =,则矩阵A 奇异,程序结束;否则执行step3;
Step3:如果k i k ≠,则交换第k 行与第k i 行对应元素位置,k kj i j a a ↔, ,,1j k n =+ ; Step4:消元,对,,i k n = ,求解/,ik ik kk l a a =对1,,1j k n =++ ,求解
.ij ij ik kj a a l a =-
2 回代过程:
Step1:若0,nn a =则矩阵奇异,程序结束;否则执行step2 Step2:,1/;n n n nn x a a +=对1,,2,1i n =- ,求解:
,11/n i i n ij j ii j i x a a x a +=+⎛⎫
=- ⎪⎝⎭
∑
【程序设计】
function [x,XA]=GaussLiezhuYuan(A,b) N=size(A) n=N(1); index = 0; for i=1:(n-1)
me=max(abs(A(1:n,i))); %确定每一列绝对值最大的数值 for k=i:n
if(abs(A(k,i))==me) index=k; break; end end
temp=A(i,1:n);
A(i,1:n)=A(index,1:n);
A(index,1:n)=temp; %与主元所在的行进行交换 bb=b(index); b(index)=b(i);