数值分析第一次作业matlab实验报告
- 格式:doc
- 大小:50.00 KB
- 文档页数:5
几种线性方程组迭代算法的MATLAB 实现和性能比较
用有限差分方法(五点差分格式)求解正方形域上的Poisson 方程边值问题
用MA TLAB 语言编写算法程序求解线性方程组f Au =的算法程序,采用下列方法,比较计算结果和算法性能,对计算结果给出讨论。
一、算法实现
解:由差分格式可得:
2,1,1,,1,10,1,,0,14 (1,)0(0,)
i j i j i j i j i j ij j N j i i N u u u u u h f i j N u u u u i j N -+-+++----=≤≤====≤≤,
写成矩阵形式:Au=f
11112222......,,.
......
....NN N N A I
v b I A v b A v b I I
A v b -⎡⎤⎡⎤⎡⎤⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥===⎢
⎥⎢⎥⎢⎥⎢⎥⎢⎥⎢⎥
⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥-⎢⎥⎢⎥⎢⎥⎣
⎦⎣⎦⎣⎦
其中:
4114....,....
.114N N ii ii A A R ⨯-⎡⎤⎢⎥-⎢⎥⎢⎥=∈⎢
⎥⎢
⎥⎢⎥
-⎢⎥-⎣⎦
其中:
11,12,1,121,22,2,21,2,,2211,12,1,121,22,2,221,2,,(,,...,),(,,...,),......,(,,...,)(,,...,),(,,...,),......,(,,...,)T T N N T
N N N N N T T N N T
N N N N N v u u u v u u u v u u u b h f f f b h f f f b h f f f ======
(1)用Jacobi 迭代法求解线性方程组f Au = function[u,k,er,t]=xsgs(n) % Jacobi 迭代法
⎪⎩
⎪⎨⎧====<<==⎪⎪⎭
⎫
⎝⎛∂∂+∂∂-0
)1,()0,(),1(),0(1,0,2),(2222x u x u y u y u y x y x f y u x u
% U 表示方程组的解;h 表示步长;A 表示迭代矩阵;k 表示迭代次数;n 表示非边界点数
% f 表示线性方程组A*U=f的右端矩阵f ;e 表示允许误差界;er 表示迭代误差
% t 表示计算时间
tic;
b(2:n+1,2:n+1)=(n+1)^(-2)*2;
u=zeros(n+2,n+2);
e=10^(-9);
for k=1:1000 %迭代求解
er=0;
ub=u;
for j=2:n+1
for i=2:n+1
u(i,j)=(ub(i-1,j)+ub(i+1,j)+ub(i,j-1)+ub(i,j+1)+b(i,j))/4;
er=er+abs(u(i,j)-ub(i,j)); %估计当前误差
end
end
er=er/n^2;
if er end %判断是否达到计算精度,如果达到则退出循环 end toc; t=toc; end 计算结果: u = 0 0 0 0 0 0 0 0 0 0 0 0 0.0256 0.0413 0.0508 0.0560 0.0577 0.0560 0.0508 0.0413 0.0256 0 0 0.0413 0.0686 0.0859 0.0955 0.0986 0.0955 0.0859 0.0686 0.0413 0 0 0.0508 0.0859 0.1088 0.1216 0.1258 0.1216 0.1088 0.0859 0.0508 0 0 0.0560 0.0955 0.1216 0.1364 0.1412 0.1364 0.1216 0.0955 0.0560 0 0 0.0577 0.0986 0.1258 0.1412 0.1462 0.1412 0.1258 0.0986 0.0577 0 0 0.0560 0.0955 0.1216 0.1364 0.1412 0.1364 0.1216 0.0955 0.0560 0 0 0.0508 0.0859 0.1088 0.1216 0.1258 0.1216 0.1088 0.0859 0.0508 0 0 0.0413 0.0686 0.0859 0.0955 0.0986 0.0955 0.0859 0.0686 0.0413 0 0 0.0256 0.0413 0.0508 0.0560 0.0577 0.0560 0.0508 0.0413 0.0256 0 0 0 0 0 0 0 0 0 0 0 0 k = 304 er = 9.7771e-10 t = 0.0140 Au (2)用块Jacobi迭代法求解线性方程组f function [ u,k ,er,t] = xsbgs( n ) %块Jacobi迭代法 % u 表示方程组的解h 表示步长;k 表示迭代次数;n 表示非边界点数; % f 表示线性方程组A*u=f的右端矩阵f;q 表示n+2维向量;a 表示方程组系数矩阵的下对角线元素 % b 表示方程组系数矩阵的主对角线元素;c 表示方程组系数矩阵的上对角线元素;d 表示追赶法所求方程的右端向量 % e 表示允许误差界;er 表示迭代误差;l 表示系数矩阵A所分解成的下三角阵L中的下对角线元素l(i);z 表示系数矩阵A所分解成的上三角阵U中的主对角线元素z(i) tic; f=2*1/(n+1)^2*ones(n+2,n+2); a=-1*ones(1,n);b=4*ones(1,n); c=-1*ones(1,n);u=zeros(n+2,n+2); e=10^(-9); for k=1:1000 %迭代求解 er=0; ub=u; for j=2:n+1 d(1:n)=f(2:n+1,j)+ub(2:n+1,j-1)+ub(2:n+1,j+1); x=zg(a,b,c,d); %用追赶法求解 u(2:n+1,j)=x'; er=er+norm(ub(:,j)-u(:,j),1); end er=er/n^2; if er end toc; t=toc; end 计算结果: u = 0 0 0 0 0 0 0 0 0 0 0 0 0.0256 0.0413 0.0508 0.0560 0.0577 0.0560 0.0508 0.0413 0.0256 0 0 0.0413 0.0686 0.0859 0.0955 0.0986 0.0955 0.0859 0.0686 0.0413 0 0 0.0508 0.0859 0.1088 0.1216 0.1258 0.1216 0.1088 0.0859 0.0508 0 0 0.0560 0.0955 0.1216 0.1364 0.1412 0.1364 0.1216 0.0955 0.0560 0 0 0.0577 0.0986 0.1258 0.1412 0.1462 0.1412 0.1258 0.0986 0.0577 0 0 0.0560 0.0955 0.1216 0.1364 0.1412 0.1364 0.1216 0.0955 0.0560 0 0 0.0508 0.0859 0.1088 0.1216 0.1258 0.1216 0.1088 0.0859 0.0508 0 0 0.0413 0.0686 0.0859 0.0955 0.0986 0.0955 0.0859 0.0686 0.0413 0 0 0.0256 0.0413 0.0508 0.0560 0.0577 0.0560 0.0508 0.0413 0.0256 0 0 0 0 0 0 0 0 0 0 0 0 k = 163