线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性方程组的迭代解法(Jacobi迭代法Gauss-Seidel迭
按照算法(Jacobi迭代法)编写Matlab程序(Jacobi.m) function [x, k, index]=Jacobi(A, b, ep, it_max)
% 求解线性方程组的Jacobi迭代法,其中
% A --- 方程组的系数矩阵
% b --- 方程组的右端项
% ep --- 精度要求。
省缺为1e-5
% it_max --- 最大迭代次数,省缺为100
% x --- 方程组的解
% k --- 迭代次数
% index --- index=1表示迭代收敛到指定要求;
% index=0表示迭代失败
if nargin <4 it_max=100; end
if nargin <3 ep=1e-5; end
n=length(A); k=0;
x=zeros(n,1); y=zeros(n,1); index=1;
while 1
for i=1:n
y(i)=b(i);
for j=1:n
if j~=i
y(i)=y(i)-A(i,j)*x(j);
end
end
if abs(A(i,i))<1e-10 | k==it_max
index=0; return;
end
y(i)=y(i)/A(i,i);
end
if norm(y-x,inf)<ep
break;
end
x=y; k=k+1;
end
用Jacobi迭代法求方程组
的解。
输入:
A=[4 3 0;3 3 -1;0 -1 4];
b=[24;30;-24];
[x, k, index]=Jacobi(A, b, 1e-5, 100)
输出:
x =
-2.9998
11.9987
-3.0001
k =
100
index =
2. 熟悉Gauss-Seidel迭代法,并编写Matlab程序
function
[v,sN,vChain]=gaussSeidel(A,b,x0,errorBound,maxSp) %Gauss-Seidel迭代法求解线性方程组
%A-系数矩阵 b-右端向量 x0-初始迭代点 errorBound-近似精度maxSp-最大迭代次数
%v-近似解 sN-迭代次数 vChain-迭代过程的所有值
step=0;
error=inf;
s=size(A);
D=zeros(s(1));
vChain=zeros(15,3);%最多能记录15次迭代次数
k=1;
fx0=x0;
for i=1:s(1)
D(i,i)=A(i,i);
end;
L=-tril(A,-1);
U=-triu(A,1);
while error>=errorBound & step<maxsp
x0=inv(D)*(L+U)*x0+inv(D)*b;
vChain(k,:)=x0';
k=k+1;
error=norm(x0-fx0);
fx0=x0;
step=step+1;
end
v=x0;
sN=step;
用Gauss-Seidel迭代法求解上题的线性方程组,取。
输入:
A=[4 3 0;3 3 -1;0 -1 4];
b=[24;30;-24];
x0=[0;0;0];
[v,sN,vChain]=gaussSeidel(A,b,x0,0.00001,11)
输出:
v =
0.6169
11.1962
-4.2056
sN =
11
vChain =
6.0000 10.0000 -6.0000 -1.5000 2.0000 -3.5000 4.5000 10.3333 -5.5000 -1.7500 3.6667 -3.4167 3.2500 10.6111 -5.0833 -1.9583 5.0556 -3.3472 2.2083 10.8426 -4.7361 -2.1319 6.2130 -3.2894 1.3403 11.0355 -4.4468 -2.2766
7.1775 -3.2411 0.6169 11.1962 -4.2056 0 0 0
0 0 0
0 0 0
0 0 0
</maxsp
</ep。