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方法收敛。

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

雅可比迭代

function [x,n]=jacobi2(A,b,x0,eps,M)

% Jacobi迭代

%A=[9 1 11 8 11 1 9]

%b=[111]

%x0=[000]

%[x,n]=jacobi(A,b,x0)

if nargin==3

eps=1.0e-6

M=10000

elseif nargin==4

M=10000

end

D=diag(diag(A))L=-tril(A,-1)

U=-triu(A,1)B=inv(D)*(L+U)

f=inv(D)*bx=x0n=0

tol=1

while tol>eps

x=B*x0+f

n=n+1

tol=norm(x-x0)%极大范数 等同于tol=max(abs(x-x0))但不能这样用

x0=x

if(n>=M)

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

break

end

end

高斯赛德尔迭代

function[x,n]=gauseidel2(A,b,x0,eps,M )

% Detailed explanation goes here

% 解的精度:eps% 迭代步数控制:M

% 解 x% 求解所需的实际步数迭代:n

%[x,n]=gauseidel(A,b,x0)

if nargin==3

eps=1.0e-6

M=10000

elseif nargin==4

M=10000

end

D=diag(diag(A))

L=-tril(A,-1)

U=-triu(A,1)

G=(D-L)\U

f=(D-L)\历枝此b

x=x0

n=0

tol=1

while tol>=eps

x=G*x0+f

n=n+1

tol=norm(x-x0)%算矩阵sup范数

x0=x

if(n>=M)

disp('Warning:迭代次数太多肢迅可能不收搭御敛')

break

end

end

在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/12391944.html

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

发表评论

登录后才能评论

评论列表(0条)

保存