【Matlab】JOR迭代法

本文分享了一段用Matlab编写的JOR迭代法代码,该方法用于求解线性方程组。代码中包含了如何寻找最佳松弛因子的步骤,如果最佳松弛因子不存在,则使用1/2作为默认值。此代码适用于计算方法实验,有助于理解迭代法的实现过程。
摘要由CSDN通过智能技术生成

最近在做计算方法实验,需要JOR迭代法的Matlab代码,本来想到网上随便找找看一下,找了半天没找到,最后只好自力更生了。现在分享给大家。

简介

JOR迭代法是在Jacobi迭代法的基础上增加松弛因子来意图实现快速收敛,不过松弛因子的话选取不当反而会增加迭代次数。下面代码给出了最佳松弛因子的求法,如果其不存在则赋为1/2.

代码

 function x = JOR(A,b,N,tol)%%A为系数矩阵
 %%b为对应的列向量,N为最大迭代次数,tol为计算精度
format long;%%增加了显示位数,可以去掉
count=0;%%count记录实际迭代次数
n = length(A);
x0=zeros(n,1);%%x0为初始向量,这里取为0向量
x =zeros(n,1);
D = diag(diag(A));
L=-tril(A,-1);
U=-triu(A,1);
Bj=D\(L+U);%%Bj为Jacobi迭代法的迭代系数
[~,p]=eig(Bj);%%p对角线上的值为Bj的特征值
q=diag(p);%%q为Bj特征值组成的向量
%%判断是否有最佳omega:如果有则Omega为最佳omega的值,否则为1/2
if isreal(q)&&(max(q)<1)%%判断是否有最佳omega
   omega=2/(2-max(q)-min(q));%求最佳omega的值
else omega=1/2;
end
omega
I=eye(n);
F=omega*(D\b);
B=I-omega*(D\A);%%B为JOR的迭代系数
for i=1:N
x = B*x0+F;
if norm(x-x0)<tol
break;
end
x0=x;
count=count+1;
end
count
end
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值