解(1):
采用Jacobi迭代法时,Matlab计算程序为: clear
clc i=1;
a=[5 2 1;-1 4 2;2 -3 10]; d=diag(diag(a)); l=d-tril(a); u=d-triu(a); d0=inv(d); b=[-12;20;3]; x0=[1;1;1]; B=d0*(l+u); f=d0*b; x=B*x0+f;
while norm(x-x0,inf)>=1e-4 x0=x; x=B*x0+f; i=i+1; end x
i
采用Gauss-Seidel迭代法计算时,Matlab计算程序为: clear
clc i=1;
a=[5 2 1;-1 4 2;2 -3 10]; d=diag(diag(a)); l=d-tril(a); u=d-triu(a); b=[-12;20;3]; x0=zeros(3,1); B=inv(d-l)*u; f=inv(d-l)*b; x=B*x0+f;
while norm(x-x0,inf)>=1e-4 x0=x; x=B*x0+f; i=i+1; end x i
习题6.7
function [n,x]=sor22(A,b,X,x1,nm,w,ww) %用超松弛迭代法求解方程组Ax=b
%输入:A为方程组的系数矩阵,b为方程组右端的列向量,X为迭代初值构成的列向量,x1为方程的精确解,nm为最大迭代次数,w为误差精度,ww为松弛因子
%输出:x为求得的方程组的解构成的列向量,n为迭代次数 n=1;
m=length(A);
D=diag(diag(A)); %令A=D-L-U,计算矩阵D L=tril(-A)+D; %令A=D-L-U,计算矩阵L U=triu(-A)+D; %令A=D-L-U,计算矩阵U M=inv(D-ww*L)*((1-ww)*D+ww*U); %计算迭代矩阵
g=ww*inv(D-ww*L)*b; %计算迭代格式中的常数项 %下面是迭代过程 while n<=nm
x=M*X+g; %用迭代格式进行迭代 if norm(x1-X,'inf') %上面:达到精度要求就结束程序,输出迭代次数和方程组的解 end X=x;n=n+1; end %下面:如果达到最大迭代次数仍不收敛,输出警告语句及迭代的最终结果(并

