- 1、本文档共28页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
数值计算实验
重庆大学经济与工商管理学院
信息管理与信息系统专业01班
周洲
学号2011年11月13日
实验一 线性方程组的数值解法
1.实验目的:
(1)高斯列主元消去法求解线性方程组的过程
(2)熟悉用迭代法求解线性方程组的过程
(3)设计出相应的算法,编制相应的函数子程序
2.实验内容
分别用高斯列主元消去法 ,Jacobi迭代法,Gauss--Saidel迭代法,超松弛迭代法求解线性方程组
3、实验步骤与过程
①.高斯列主元消去法代码如下:
A=[2,10,0,-3;-3,-4,-12,13;1,2,3,-4;4,14,9,-13];
b=[10;5;-2;7];
disp(A=);
disp(A);
disp(b=);
disp(b);
[m,n]=size(A);
%先检查系数正确性
if m~=n
error(矩阵A的行数和列数必须相同);
return;
end
if m~=size(b)
error(b的大小必须和A的行数或A的列数相同);
return;
end
%再检查方程是否存在唯一解
if rank(A)~=rank([A,b])
error(A矩阵的秩和增广矩阵的秩不相同,方程不存在唯一解);
return;
end
c=n+1;
A(:,c)=b; %(增广)
for k=1:n-1
[r,m]=max(abs(A(k:n,k))); %选主元
m=m+k-1; %修正操作行的值
if(A(m,k)~=0)
if(m~=k)
A([k m],:)=A([m k],:); %换行
end
A(k+1:n, k:c)=A(k+1:n, k:c)-(A(k+1:n,k)/ A(k,k))*A(k, k:c); %消去
end
end
x=zeros(length(b),1); %回代求解
x(n)=A(n,c)/A(n,n);
for k=n-1:-1:1
x(k)=(A(k,c)-A(k,k+1:n)*x(k+1:n))/A(k,k);
end
disp(X=);
disp(x);
format short;%设置为默认格式显示,显示5位
实验输出结果为:
A=
2 10 0 -3
-3 -4 -12 13
1 2 3 -4
4 14 9 -13
b=
10
5
-2
7
X=
1.0000
2.0000
3.0000
4.0000
实验结果分析与小结:
从输出结果可看出,实验代码应该是正确的并且做出了正确的计算,计算的结果也是正确的,本次试验顺利完成了。从这次实验中我对高斯列主元消元法有了进一步的认识,在写实验代码的过程中进一步体会到了高斯消元法的核心思想。
②、Jacobi迭代法代码如下:
clc;
A=[2,10,0,-3,10;-3,-4,-12,13,5;1,2,3,-4,-2;4,14,9,-13,7]
MAXTIME=50;%最多进行50次迭代
eps=1e-5;%迭代误差
[n,m]=size(A);
x=zeros(n,1);%迭代初值
y=zeros(n,1);
k=0;
%进入迭代计算
disp(迭代过程X的值情况如下:)
disp(X=);
while 1
disp(x);
for i=1:1:n
s=0.0;
for j=1:1:n
if j~=i
s=s+A(i,j)*x(j);
end
y(i)=(A(i,n+1)-s)/A(i,i);
end
end
for i=1:1:n
maxeps=max(0,abs(x(i)-y(i))); %检查是否满足迭代精度要求
end
if maxeps=eps%小于迭代精度退出迭代
for i=1:1:n
x(i)=y(i);%将结果赋给x
end
return;
end
for i=1:1:n%若不满足迭代精度要求继续进行迭代
x(i)=y(i);
y(i)=0.0;
end
k=k+1;
if kMAXTIME%超过最大迭代次数退出
error(超过最
文档评论(0)