线性方程组迭代解法——雅可比(Jacobi)迭代法,Gauss-Seidel迭代法和超松弛(SOR)迭代法

一、3种经典线性迭代算法

(1)雅可比迭代法

1.1 算法思想

1.2 算法流程

(2) Gauss-Seidel迭代法

(3)逐次超松弛(SOR)迭代法

二、matlab实现

下面matlab代码将三种迭代法在同一个函数下实现:具体函数如下:

function [x,k]=slp_iteration(A,b,x0,type_iterate,eps,alpha)
%%  参数说明
%A--线性方程组系数矩阵;
%b--方程组右端列向量;
%x0--初始向量;
%type_iterate--迭代方式,可选'jacobi'(雅可比迭代法),'GS'(Gauss-Seidel迭代法)和'SOR'(逐次超松弛法);
%eps--精度,例如选用1e-5;
%alpha--松弛因子;在采用SOR迭代法时,需要用一个合适的松弛因子alpha
%x--迭代解
%k--迭代次数;
%%  调用格式:%first:[x,k]=slp_iteration(A,b,x0,type_iterate,eps):采用jacobi迭代法或GS迭代法时;%second: [x,k]=slp_iteration(A,b,x0,type_iterate,eps,alpha):采用SOR迭代法时;
%%
[~,m]=size(A);
A_diag=diag(A);  %提取对角元素;
A(1:m+1:end)=0;  %将对角元素赋值为0;
x=x0;
flag=1;  %循环标记;
k=0;      %计数器;
K_max=100; %最大迭代次数,如果超过最大迭代次数,则认为不收敛;
%%
if min(abs(A_diag))==0disp('error!!!方程组系数矩阵不符合迭代要求:对角线元素不能为零!');
end
switch type_iteratecase 'jacobi'  %%  Jacobi Methedwhile flagfor i=1:mx(i)=(b(i)-A(i,:)*x0)/A_diag(i);endif norm(x-x0,inf)<=eps   %判断素法达到精度breakendx0=x;k=k+1;if k>=K_maxdisp('在最大迭代次数内不收敛!,可能是此迭代方法不收敛。')breakendendcase 'GS'%% Gauss-Seidel Methedwhile flagfor i=1:mx(i)=(b(i)-A(i,:)*x)/A_diag(i);endif norm(x-x0,inf)<=epsbreakendx0=x;k=k+1;if k>=K_maxdisp('在最大迭代次数内不收敛!,可能是此迭代方法不收敛。')breakendendcase 'SOR'%% Successive Overrelaxation Methedwhile flagfor i=1:mx(i)=(1-alpha)*x0(i)+alpha*(b(i)-A(i,:)*x)/A_diag(i);endif norm(x-x0,inf)<=epsbreakendx0=x;k=k+1;if k>=K_maxdisp('在最大迭代次数内不收敛!,可能是此迭代方法不收敛。')breakendend
end
实例检验:

运行结果

线性方程组迭代解法——雅可比(Jacobi)迭代法,Gauss-Seidel迭代法和超松弛(SOR)迭代法相关推荐

  1. 数值计算大作业:Jacobi与Gauss -Seidel迭代求解线性方程组(Matlab实现)

    作为研究生的入门课,数值计算的大作业算是所有研究生开学的重要编程作业. 我把Jacobi与Gauss -Seidel迭代求解线性方程组的数值计算作业在MATLAB中编程实现.具体的程序详细标注后放在文 ...

  2. 【数值分析】Jacobi、Seidel和Sor迭代法求解线性方程组(附matlab代码)

    线性方程组迭代解法公式类似非线性方程求根的简单迭代法公式, 有Jacobi迭代法. Seidel迭代法及Sor法等. 题目1-Jacobi迭代法和Seidel迭代法 来源:<数值分析>第5 ...

  3. 高斯—赛德尔(Gauss - Seidel)迭代法解线性方程组(Matlab程序)

    %---高斯-赛德尔迭代法----- %---Gauss - Seidel iteration method clear;clc; % A=[10,-1,-2;-1,10,-2;-1,-1,5]; % ...

  4. 三种迭代法解方程组(雅可比Jacobi、高斯-赛德尔Gaisi_saideer、逐次超松弛SOR)

    分析用下列迭代法解线性方程组 4 -1 0 -1 0 0       0 -1 4 -1 0 -1 0        5 0 -1 4 -1 0 -1        -2 -1 0 -1 4 -1 0 ...

  5. Matlab | Lab4——用LU 分解法、 Jacobi 迭代、 Gauss-Seidel 迭代 解线性病态方程组(系数矩阵为Hilbert矩阵)

    1.要求 考虑线性方程组Hx=b,其中H为n阶Hilbert矩阵,即 通过先给定解(例如取x的各个分量为1),再计算出右端向量b的办法给出一个精确解已知的问题. (1)分别编写Doolittle LU ...

  6. 2021-01-07 matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法

    matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法 Function [x,iter]=gs(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu ...

  7. 基于Python实现Jacobi迭代法、Gauss-Seidel迭代法和SOR法方程组(一)

    标题基于Python实现Jacobi迭代法方程组计算(一) 一.首先根据习题的方程求出迭代矩阵如下: x11=round(-0.4x2-0.2x3-2.4,7) x22=round(0.25x1-0. ...

  8. Jacobi的GPU并行迭代 OpenACC

    目录 1. 搭建OpenACC运行环境 1.1 安装CUDA11.1 1.2 配置CUDA环境 1.3 安装OpenACC 21.3 1.4 配置openACC环境 2. 程序执行 2.1 GPU上并 ...

  9. 数值分析线性方程组迭代法之SOR迭代法详解及其C语言算法实现

    SOR迭代法,又名逐次超松弛迭代法,与Jacobi迭代法和Guass-Seidel迭代法相比,收敛速度更快其原理如下(想详细了解,可以点击这里数值分析(东北大学)): 1.构造迭代式时,要加上一个大于 ...

  10. sor迭代法matlab实例,Jacobi G-S SOR迭代法在matlab中例子.pdf

    [数值分析报告] [数学基地班 赵晨晓 2011301000007] 关于Jacobi G -S SOR 方法的收敛速度比较 摘要:本论文主要通过判断比较Jacobi G -S SOR 三种 计算方法 ...

最新文章

  1. 200.Number of Islands
  2. java 环境部署——java源码包的安装——java-rpm包的安装
  3. 【数字智能三篇】之一: 一页纸说清楚“什么是大数据”
  4. ecmobile实现支付宝支付和百度云推送遇到的问题及解决方案(android)
  5. iframe中父子窗口的调用
  6. 音视频技术开发周刊 | 158
  7. php使用ftp远程上传文件类(解决主从文件同步问题的简单方法)
  8. 设计模式——代理模式与装饰模式的异同
  9. C语言水平镜像处理16色位图,C语言使用HZK16显示每个像素的代码
  10. Java——零基础速成学习
  11. 锐浪报表 Grid++Report uniGUI Web表格打印
  12. DHT分布式哈希表通俗讲解
  13. Google Dapper 大规模分布式系统的跟踪方案
  14. 软件工程导论学习笔记
  15. python表示差值_python差值函数
  16. 如何用HTML和css实现简单的手风琴菜单效果,附带详细注释
  17. 想象力无限,人工智能时代你对AGV有什么期许
  18. 华为云ecs服务器镜像上传到容器镜像服务SWR
  19. mysql千万级数据查询select、插入insert慢 可能原因总结
  20. 什么是HTTP HOST

热门文章

  1. java递归遍历文件夹_java递归遍历获取目录下所有文件
  2. linux安装jdk和tomcat7.0
  3. FFmpeg总结(十四)FFmpeg如何解析直播点播m3u8
  4. Android Multimedia框架总结(六)C++中MediaPlayer的C/S架构
  5. 2021高考成绩查询甘肃天水,2021年天水高考成绩排名及成绩公布时间什么时候出来...
  6. html输入输出文件,学习如何用 C 语言来进行文件输入输出操作
  7. linux安装中文输入法sc,Ubuntu 设置中文输入法
  8. java编译速度_[译] Kotlin VS Java:编译速度大比拼
  9. excel处置4000行数据卡_Pandas读取并修改excel的示例代码
  10. c语言游戏源码_【C语言/C++】益智游戏开发:2048(思路+源码详解)