迭代法与超松弛求解线性方程组

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
x2=B\b %原线性方程组的精确解
[x22,n]=SOR(B,b,x0,w) %超松弛法求解线性方程组
x2 =
1.2851
-1.8924
1.2086
x22 =
1.2851
-1.8924
1.2086
n =
7
四计算结果分析
高斯-赛德尔迭代和雅克比迭代的算法很类似。只不过,雅克比迭代的时候每次只用到上次迭代的值。而高斯-赛德尔则是算出分量后立即用于后面的运算
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
return;
end
end
(2)高斯赛德尔法:
1.function x=gaussMethod(A,b)
%高斯列主元消去法,要求系数矩阵非奇异的,
n = size(A,1);
if abs(det(A))<= 1e-8
error('系数矩阵是奇异的');
实验名称
高斯-赛德尔、超松弛迭代法求解线性方程组
实验时间
2012-5-30
姓名
班级
学号
成绩
一实验目的
[1]掌握Gauss顺序消去和选列主元消去解线性方程组基本原理和方法
[2]用MATLAB编写程序实现Gauss顺序消去和选列主元消去解线性方程组
二实验内容
1.编写MATLAB程序实现雅可比迭代法、高斯-赛德尔、超松弛迭代法求解线性方程组
x =
-0.9937
-0.9786
1.1364
n =
6
X1 =
-0.9937
-0.9786
1.1364
x11 =
-0.9937
-0.9786
1.1364
B=[0.68 0.01 0.12;0.03 -0.54 -0.05;0.2 0.08 0.74] ; x=[0 0 0]';b=[1 1 1]';w=1.07;
2.编写MATLAB程序实现超松弛迭代法求解线性方程组

二程序代码
1.(1)雅可比迭代法:
>> function [x,n]=jacobi(A,b,x0,eps)
if nargin==3
eps= 1.0e-6;
M = 1000;
elseif nargin<3
error
return
elseif nargin ==5
M = 1000;
end
D=diag(diag(A));%求A的对角矩阵
L=-tril(A,-1);%求A的下三角阵
U=-triu(A,1);%求A的上三角阵
B=D\(L+U);
f=D\b;
x=B*x0+f;
n=0;%迭代次数
while norm(x-x0)>=eps
x0=x;
x=B*x0+f;
n=nபைடு நூலகம்1;
五计算中出现的问题,解决方法及体会
通过这次实验让我初步了解了怎样运用雅可比迭代法、高斯-赛德尔、超松弛迭代法求解线性方程组的基本算法,但还不够熟练还得加强练习才是。




指导教师:年月日
end
%回代过程
x(n)=b(n)/A(n,n);
for k=n-1:-1:1;
x(k)=(b(k)-A(k,k+1:n)*x(k+1:n)')/A(k,k);
end
x=x';
end
2.超松弛法:
function [x,n]=SOR(A,b,x0,w,eps,M)
if nargin==4
eps= 1.0e-6;
A(k,:) = temp;
temp = b(index);b(index) = b(k); b(k) = temp;
%消元过程
for i=k+1:n
m=A(i,k)/A(k,k);
%消除列元素
A(i,k+1:n)=A(i,k+1:n)-m*A(k,k+1:n);
b(i)=b(i)-m*b(k);
end
M = 200;
elseif nargin<4
error
return
elseif nargin ==5
M = 200;
end
if(w<=0 || w>=2)
error;
return;
end
D=diag(diag(A)); %求A的对角矩阵
L=-tril(A,-1); %求A的下三角阵
U=-triu(A,1); %求A的上三角阵
return;
end
for k=1:n
ak = max(abs(A(k:n,k)));
index = find(A(:,k)==ak);
if length(index) == 0
index = find(A(:,k)==-ak);
end
%交换列主元
temp = A(index,:);
A(index,:) = A(k,:);
end
end
三数据结果
A=[-0.98 -0.05 -0.02;-0.04 -0.9 0.07;-0.02 0.09 0.94];x0=[0 0 0]';b=[1 1 1]';
[x,n]=jacobi(A,b,x0) %雅克比迭代法求解线性方程组
X1=inv(A)*b %原线性方程组的精确解
x11=gaussMethod(A,b) %高斯赛德儿法求解线性方程组
B=inv(D-L*w)*((1-w)*D+w*U);
f=w*inv((D-L*w))*b;
x=B*x0+f;
n=1; %迭代次数
while norm(x-x0)>=eps
x0=x;
x =B*x0+f;
n=n+1;
if(n>=M)
disp('Warning:迭代次数太多,可能不收敛!');
return;
相关文档
最新文档