SOR迭代法 求MATLAB程序

SOR迭代法 求MATLAB程序,第1张

迭代法 matlab实现代码如下

function [x,n] = jacobi(A,b,x0,eps,varargin)

if nargin ==3

eps = 1.0e-6

M = 200

elseif nargin<3

disp('输入参数数目不足3个')

return

elseif nargin ==5

M = varargin{1}

end

D = diag(diag(A))          %%求A的对角矩阵

L = -tril(A,-1)      中稿启           %%求A的下三角矩阵

U = -triu(A,1)                %%求A的上三角矩阵

B = D\(L+U)

f = D\b

x = B*x0+f

n = 1%迭代次数

while norm(x-x0)>=eps

x0 = x

x = B*x0+f

n = n+1

if(n>=M)

disp('Warning:迭代次数太多,可能不收敛!')

return

end

end

运行效果如下:

扩展资料:

迭代法的收敛性判别

收敛性判别条件

SOR迭代法收敛的充分必要条件是ρ(λω)<1,ρ(λω)与松弛因子ω有关。ρ(λω)与ω的关系以及SOR方法收敛的条件有如下定理。

定理1:(Kahan)对卖如任意的A

,设敬宽其对角元皆非零,则对所有实数ω,有:ρ(λω)≥ ω-1。

推论:如果解Ax=b的SOR方法收敛,则有ω-1<1,即0<ω<2。

定理2:(Ostrowski-Reich)设A

,A对称正定,且0<ω<2,则解Ax=b的SOR方法收敛。

参考资料来源:百度百科-逐次超松驰迭代法

在matlab中执行循环迭代的方法:

a是一个由nk个数组成的数组、

对应的y也应该是由nk个数组成的数组

a=某数组

b=某常数

d=某常数

for k=1:1:nk

c=1

n=0

errf=1

求X1000:

while errf>1e-8n<100%计算结果精度要求1e-8,如果迭代超过100次还不收敛,退出循环。

y(k)=a(k)*b*c

c1=y*d

errf=(c1-c)/c1

X1000=c1。

扩展资料

利用迭代算法解决问题,需要做好以下三个方面的工作:

一、确定迭代变量。在可以用迭代算法解决的问题中,至少存在一个直接或间接差告地不断由旧值递推出新值的变量,这个变量就是迭代变量。

二、建立迭代关系式。所谓迭代关系式,指如何从变量的前一个值推出其下一个值的公式(或关系)。迭代关系式的建立是解决迭代问题的关键,通常可以使用递推或倒推的方法来完成。

三、对迭代过程进行碧老控制。

参考资料虚慧明:百度百科——迭代循环


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12223545.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-22
下一篇 2023-05-22

发表评论

登录后才能评论

评论列表(0条)

保存