数值分析5-用Jacobi迭代法和Gauss-Seidel迭代法求解线性方程组
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
G=zeros(n);%G=-inv(D+L)*U d=zeros(n,1);%d=inv(D+L)*b x=zeros(n,1); for i=1:n%初始化 L 和 U for j=1:n if i<j L(i,j)=A(i,j); end if i>j U(i,j)=A(i,j); end end end for i=1:n%初始化 D D(i,i)=A(i,i); end G=-inv(D+L)*U;%初始化 G d=(D+L)\b;%初始化 d %迭代开始 x1=x; x2=G*x+d; while norm(x2-x1,inf)>10^(-6)
warning('不收敛'); end end x=x0;
2
程序结果
(1)
3
(2)
4
Gauss-Seidel 迭代法:
程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3];
A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵 A 不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 L=zeros(n);%分解 A=D+L+U,D 是对角阵,L 是下三角阵,U 是上三角阵 U=zeros(n); D=zeros(n);
作业六:分别编写用 Jacobi 迭代法和 Gauss-Seidel 迭代法求解 线性方程组 Ax=B 的标准程序,并求下列方程组的解。
可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1)
= (2)
= Jacobi 迭代法:
流程图 开
始
判断 b 中的最大值 有没有比误差大
for i=1:n d=A(i,i); if abs(d)<e warning('矩阵 A 输入有误'); return; end sum=0; for j=1:n if j~=i sum=sum+A(i,j)*x0(j); end end x1(i)=(b(i)-sum)/A(i,i);
end k=k+1; r=max(abs(x1-x0)); x0=x1; fprintf('第%d 次迭代:',k) fprintf('\n 与上次计算结果的距离:%f \n',r) disp(x1); if k>100
5
x1=x2; x2=G*x2+d; N=N+1; end x=x2; 程序结果
(1)
ຫໍສະໝຸດ Baidu
(2)
6
给 x 赋初值
进行迭代
求出 x,弱到 100 次还没到,警告不收 敛 结束
1
程序 clear;clc; A=[8,-1,1;2,10,01;1,1,-5]; b=[1;4;3]; e=1e-6; x0=[0;0;0]'; n=length(A); x=zeros(n,1); k=0; r=max(abs(b)); while r>e
warning('不收敛'); end end x=x0;
2
程序结果
(1)
3
(2)
4
Gauss-Seidel 迭代法:
程序 clear;clc; %A=[8,-1,1;2,10,01;1,1,-5]; %b=[1;4;3];
A=[5,2,1;-1,4,2;2,-3,10]; b=[-12;20;3]; m=size(A); if m(1)~=m(2) error('矩阵 A 不是方阵'); end n=length(b); %初始化 N=0;%迭代次数 L=zeros(n);%分解 A=D+L+U,D 是对角阵,L 是下三角阵,U 是上三角阵 U=zeros(n); D=zeros(n);
作业六:分别编写用 Jacobi 迭代法和 Gauss-Seidel 迭代法求解 线性方程组 Ax=B 的标准程序,并求下列方程组的解。
可取初始向量 X(0) =(0,0,0)’; 迭代终止条件||x(k+1)-x(k)||<=10e-6 (1)
= (2)
= Jacobi 迭代法:
流程图 开
始
判断 b 中的最大值 有没有比误差大
for i=1:n d=A(i,i); if abs(d)<e warning('矩阵 A 输入有误'); return; end sum=0; for j=1:n if j~=i sum=sum+A(i,j)*x0(j); end end x1(i)=(b(i)-sum)/A(i,i);
end k=k+1; r=max(abs(x1-x0)); x0=x1; fprintf('第%d 次迭代:',k) fprintf('\n 与上次计算结果的距离:%f \n',r) disp(x1); if k>100
5
x1=x2; x2=G*x2+d; N=N+1; end x=x2; 程序结果
(1)
ຫໍສະໝຸດ Baidu
(2)
6
给 x 赋初值
进行迭代
求出 x,弱到 100 次还没到,警告不收 敛 结束
1
程序 clear;clc; A=[8,-1,1;2,10,01;1,1,-5]; b=[1;4;3]; e=1e-6; x0=[0;0;0]'; n=length(A); x=zeros(n,1); k=0; r=max(abs(b)); while r>e