1考虑两点边值问题
容易知道精确解
微分方程离散化[01]区间n等分令h1n
差分方程
简化
离散化线性方程组系数矩阵
分Jacobi迭代法GS迭代法SOR迭代法求线性方程组解求4位效数字然较精确解误差
考虑样问题
解 (1)出算法:
解令中
利Jacobi迭代法GS迭代法SOR迭代法解线性方程组均步骤求解:
step1定初始量x0(000)迭代次数N精度求c令k1
step2令xB*x0+g
step3||xx0||2
Jacobi迭代法中BD1*(L+U)gD1*b
GS迭代法中BD1*(L+U)gD1*b
SOR迭代法中B(Dw*L)1*[(1w)*D+w*U]gw*(Dw*L)1*b
外SOR迭代法中面算法step1中定松弛子w中0
(2) 定方程
Axb中矩阵A题目示n1阶矩阵
第1n1方程中y(0)y(1)存方程右端应减y(0)y(1)项b(1)a*h2c*y(0)b(n1)a*h2(c+h)*y(n)b(i)a*h2i2n1
程序
1 Jacobi迭代法编成函数[xk]Jacobi(AbcN)
function [xk]Jacobi(AbcN)
Ddiag(diag(A))
Ltriu(A)A
Utril(A)A
BD^(1)*(L+U)
gD^(1)*b
x0zeros(length(A)1)
xB*x0+g
k1
while norm(xx02)>000001
x0x
xB*x0+g
kk+1
if k>N
break
end
end
end
2 GS迭代法编成函数 [xk]GaussSeidel(AbcN)
function [xk]GaussSeidel(AbcN)
Udiag(diag(A))triu(A)
x0zeros(length(A)1)
Btril(A)^(1)*U
gtril(A)^(1)*b
xB*x0+g
k1
while norm(xx02)>000001
x0x
xB*x0+g
kk+1
if k>N
break
end
end
end
3 SOR迭代法编成函数 [xk]SOR(AbwcN)
function [xk]SOR(AbwcN)
Ddiag(diag(A))
LDtril(A)
UDtriu(A)
x0zeros(length(A)1)
B(Dw*L)^(1)*((1w)*D+w*U)
gw*(Dw*L)^(1)*b
xB*x0+g
k1
while norm(xx02)>000001
x0x
xB*x0+g
kk+1
if k>N
break
end
end
end
4 问题1求解 ex4_1
clearclc
c1
c01
c001
c00001
a12n100h1n
w12N1000000
A(2*c+h)*eye(n1)
for i2n1w
A(i1i)c+h
A(ii1)c
end
b[a*h^2*ones(n21)a*h^2(c+h)]
for i1n1
x(i)i*h
y(i)((1a)(1exp(1c)))*(1exp(x(i)c))+a*x(i)
end
[y1n1]Jacobi(AbcN)
[y2n2]GaussSeidel(AbcN)
[y3n3]SOR(AbwcN)
disp(['c'num2str(c)'时'])
disp(['Jacobi迭代精确解差'num2str(norm(y'y1inf))])
disp(['迭代次数'num2str(n1)])
disp(['GS迭代精确解差'num2str(norm(y'y2inf))])
disp(['迭代次数'num2str(n2)])
disp(['SOR迭代精确解差'num2str(norm(y'y3inf))])
disp(['迭代次数'num2str(n3)])
计算结果
(1)
c1时
Jacobi迭代精确解差00021999
迭代次数11796
GS迭代精确解差00017027
迭代次数6227
SOR迭代精确解差0004511
迭代次数15367
(2)
c01时
Jacobi迭代精确解差00094349
迭代次数5353
GS迭代精确解差00093007
迭代次数2797
SOR迭代精确解差0010279
迭代次数7300
(3)
c001时
Jacobi迭代精确解差0066098
迭代次数532
GS迭代精确解差0066089
迭代次数318
SOR迭代精确解差006615
迭代次数834
(4)
c00001时
Jacobi迭代精确解差00049526
迭代次数116
GS迭代精确解差00049507
迭代次数108
SOR迭代精确解差00049789
迭代次数267
结果分析
三种迭代法误差基相GS迭代法收敛速度明显Jacobi迭代法SOR迭代法收敛速度较慢原收敛子非佳
2 考虑偏微分方程
中边界条件u1x方y方均匀剖分N等份令h1N设应中心差分离散化差分方程代数方程组
取g(xy)f(xy)分exp(xy)x+yGS迭代法求解述方程组请列表较N204080时收敛需迭代次数CPU时间迭代终止条件||xk+1xk||2<107
解 求解程问题1
定方程组成(n1)2维列量记
Axbg(xy)f(xy)分exp(xy)x+yA形式
边值
中标存0n时h2(i*h+j*h)应相应加12(两变量标均含0n时)
程序
(1)Jacobi迭代法程序问题1
(2)问题2求解程序ex4_2
clearclc
c10^(7)
n[204080]
N1000000
for m13
h1n(m)
Azeros((n(m)1)^2)
bzeros((n(m)1)^21)
for i1(n(m)1)^2
if i>1
A(i1i)1 A(ii1)1
end
if i>n(m)1
A(iin(m)+1)1 A(in(m)+1i)1
end
iiceil(i(n(m)1))
if mod(in(m)1)~0
jjmod(in(m)1)
else
jjn(m)1
end
A(ii)4+exp(ii*jj*h^2)
b(i)h^3*(ii+jj)
if ii1||iin(m)1
b(i)b(i)+1
end
if jj1||jjn(m)1
b(i)b(i)+1
end
end
disp(['n'num2str(n(m))])
tic
[yk]GaussSeidel(AbcN)
toc
disp(['迭代次数'num2str(k)])
end
结果
n
20
40
80
CPU time
0080063 seconds
1941715 seconds
112580604 seconds
迭代次数
24
26
27
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档