当前位置:文档之家› 线性方程组的Guass消元法求解

线性方程组的Guass消元法求解

西京学院数学软件实验任务书
课程名称数学软件实验班级数学0901 学号0912020112 姓名***
实验课题
线性方程组高斯消去法,高斯列主元消去法,高斯全
主元消去法
实验目的熟悉线性代数方程组高斯消去法,高斯列主元消去法,高斯全主元消去法
实验要求运用Matlab/C/C++/Java/Maple/Mathematica等其中一种语言完成
实验内容线性方程组高斯消去法
线性方程组高斯列主元消去法线性方程组高斯全主元消去法
成绩教师
实 验 报 告
实验名称:Guass 消元法编程求解线性方程 实验目的:进一步熟悉理解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步消元。

对线性方程组中有第2,3,.。

N 个方程组成的n —1元线性方程组做同样的处理,消去其除第一个方程组之外的所有变元2x ,可得到
⎪⎪⎪⎪
⎪⎩

⎪⎪⎪⎪⎨⎧=++=++=++=++)3()3(3)3(3)2(3)2(33)2(33)1(2)1(22)1(22)0(1)0(11)0(11... . . . ... ... ...n n nn n n n n n n n b x a x a b x a x a b x a x a b x a x a
依次类推,当做到n-1步消元后,就完成了Guass 消元过程,得到上三角方程组
实验内容:利用Guass 消元操作的原理,求解线性方程组
⎪⎪
⎪⎩

⎪⎪⎨⎧==++=++--)
1()1()1(2)1(22)1(22)
0(1)0(11)0(11 . . ... ...n n n n nn n n n n b 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
流程图如下:
开始
输入矩阵

判断是否唯一解

运用Guass消元法求解
输出结果
程序如下:
function[A X Y]=togglebutton3_Callback(hObject, eventdata, handles) % hObject handle to togglebutton3 (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) [filename,pathname]=uigetfile('.txt','打开系数矩阵数据文件');
filepath=strcat(pathname,filename);
A=load(filepath)
if ~isempty(filepath)
A=load(filepath);
X=A(:,1)';
Y=A(:,2)';
handles.A=A;
handles.X=X;
handles.Y=Y;
guidata(hObject, handles);
else
msgbox('打开文件失败','对话框','warn');
end
A1=A
set(handles.text1,'string',A1)
[n,m]=size(A);
b=A(1:n,m);
dataA1=A(:,1:n);
y=inv(dataA1)*b; %matlab的计算结果
n=length(b);%方程个数n
x=zeros(n,1);%未知向量]
%判断是否非奇异
for i=1:n
if det(dataA1(1:i,1:i))==0
msgbox('矩阵输入有误,请修改','对话框','warn'); exit;
end
end
%-------------消去-----------
for k=1:n-1
if A(k,k)==0;
T=A(k,:);
A(k,:)=A(k+1,:);
A(k+1,:)=T;
break
end
for i=k+1:n
% A(i,k)=A(i,k)/A(k,k);
Aik=A(i,k)/A(k,k);
for j=k:n
A(i,j)=A(i,j)-Aik*A(k,j);
end
A;
b(i)=b(i)-Aik*b(k);
end
end
%-------------回代-----------x(n)=b(n)/A(n,n);
for k=n-1:-1:1
S=b(k);
for j=k+1:n
S=S-A(k,j)*x(j);
end
x(k)=S/A(k,k);
end
x %程序的计算结果
调试
输入数据:3 -5 6 50 -2 -3 8 11
1 1 -9 15 1 -9
2 2
2 -1 7 5 -1 6 11 29 -1 1
3 2 7 -1 -2 9
4 3 1 -7 2 1 1 5
2 9 -8 11 -1 -4 -1 8 7 2 -1 2 7 -1 9 25
输出结果:
x =
-1.7853
2.2529
0.6746
0.0746
1.2013
0.0337
2.7934。

相关主题