高斯赛德尔迭代c语言_逐次超松弛SOR迭代概述
本文使用 Zhihu On VSCode 创作并发布
逐次超松弛(SOR)迭代法概述
一、方法背景
逐次超松弛迭代法是高斯-塞德尔迭代法的一种变种,是为了解决线性方程组的一种迭代方法。由David M. Young, Jr. 和Stanley P. Frankel于1950年提出,主要为了实现在计算机上求解线性方程组。逐次超松弛迭代法从高斯-塞德尔迭代出发,加入了
高斯-塞德尔迭代:
逐次超松弛迭代:
二、数学推导
1. 基础迭代法
对于
假定A有如下分解
有
建立迭代公式:
若
令
2. 迭代形式
考虑高斯-塞德尔迭代法
令
因此
在改变量r
合并
3. 矩阵形式
由高斯-塞德尔迭代的矩阵形式:
故
记
则SOR迭代为
两边同时左乘D,可得
即
令
则
三、收敛分析与误差分析
1. 收敛条件的判定
- 收敛的充要条件是
- 收敛的必要条件是
- 若系数矩阵A对称正定,则
时SOR迭代收敛
- 若系数矩阵A为严格对角占优矩阵,则
时SOR迭代收敛
2. 收敛速度分析
假设
收敛速度可以如下表示
最佳松弛参数
3. 误差分析
给定初值
四、理论分析
对于线性方程组,可以通过高斯消去、LU分解等直接法进行求解,但是直接法对于系数矩阵要求高,且程序复杂,对于求解大型线性方程组有较多限制。而像SOR迭代法的基础迭代法,只需按照迭代格式进行迭代,便于编程求解,可以迭代到任意精度,节省计算量和空间。
SOR迭代法由高斯-塞德尔迭代法改进而来,通过加入了松弛因子
编程时常使用SOR迭代法的矩阵形式,当对角矩阵D中对角线上元素有0时,下三角矩阵
五、MATLAB实现与实验
function [x,iter] = sor(A,b,x0,omega,tol)
if det(A) == 0error('无解或无唯一解');
end%方程组预处理
b=A'*b;
A=A'*A;D = diag(diag(A));
L = D-tril(A);
U = D-triu(A);
x=x0;
for iter=1:500B = (D-L*omega)((1-omega)*D+omega*U);f = (D-L*omega)b*omega;x = B*x+f;eerror = norm( b-A*x ) / norm(b);if ( eerror < tol )break;end
end
![](/assets/blank.gif)
![](/assets/blank.gif)
六、总结
逐次超松弛(SOR)迭代法从高斯-塞德尔迭代法出发,通过加入松弛因子
七、参考资料
[1] https://en.wikipedia.org/wiki/Successive_over-relaxation
[2] https://zhuanlan.zhihu.com/p/31066592
[3] https://www.jianshu.com/p/e14d9e910984
高斯赛德尔迭代c语言_逐次超松弛SOR迭代概述相关推荐
- matlab迭代算法实例sor,SOR迭代 - 程序语言 - MATLAB/Mathematica - 小木虫论坛-学术科研互动平台...
方法一:建立了SOR.m的脚本文件,实现的是SOR迭代,程序语言如下: %SOR迭代 clear; clc; format long; i=1; n=6; H=hilb(n); X=ones(n,1) ...
- 雅可比迭代和高斯—赛德尔迭代法
一.雅可比迭代法 对于线性方程组AX=b,我们首先将系数矩阵A分解为对角矩阵D.下三角矩阵L和上三角矩阵U: 1.1雅可比迭代法的matlab代码 在这里,我们求解下面的带状方程(以下程序均是以求解该 ...
- 三种迭代法解方程组(雅可比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 ...
- 用MATLAB实现雅克比迭代、高斯-赛德尔迭代以及超松弛迭代
文章目录 前言 一.解线性方程组的方法 二.解线性方程组的迭代法及其代码实现 1. 迭代法的收敛性 2. 基本参数设置 3. 雅克比(Jacobi)迭代 4. 高斯-塞德尔(Gauss-Seidel) ...
- 2021-01-07 matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法
matlab数值分析 线性方程组的迭代解法 高斯-赛德尔迭代法 Function [x,iter]=gs(A,b,tol) D=diag(diag(A)); L=D-tril(A); U=D-triu ...
- C语言实现高斯-赛德尔迭代gauss seidel(附完整源码)
实现C语言高斯-赛德尔迭代gauss seidel 高斯-赛德尔迭代gauss seidel的完整源码(实现,main函数测试) 高斯-赛德尔迭代gauss seidel的完整源码(实现,main函数 ...
- python解二元一次方程组 迭代法_使用python实现高斯-赛德尔迭代法的简单运算
今天传热学老师说到高斯-赛德尔迭代法,我就想拿python写一个小程序来计算. 在网上找例子,发现居然没有人拿python写,都是C / C++ / Matlab的.没有参考答案,真是写得我焦头烂额啊 ...
- 高斯赛尔德c语言算法,高斯-赛德尔迭代法的算法及程序设计.doc
PAGE 题 目:高斯-赛德尔迭代法的算法及程序设计 摘要 本文通过理论与实例对线性方程组的解法.收敛性及误差分析进行了探讨.在对线性方程组数值解法的讨论下用到了高斯-赛德尔迭代法,进一步研究和总结了 ...
- 高斯-赛德尔迭代法简介
高斯-赛德尔迭代法是解线性方程组的常用迭代法之一,设线性方程组为 高斯-赛德尔迭代法的迭代公式为 当然,此处假定 ,在很多情况下,它比简单迭代法收敛快,它和简单迭代法的不同点在于计算 时,利用了刚刚 ...
最新文章
- python 是什么类型的语言-Python什么意思是一门什么样的语言
- mysql 优惠卷表设计_这些年MySQL表设计踩过的坑!
- pandas(二) -- Dataframe创建及索引
- Hibernate sql查询
- 读《系统虚拟化-原理与实现》-第二章
- webgl限制帧率_从《长安十二时辰》到《Science Advances》:大帧数高帧率超表面动态全息显示新方法...
- pytorch梯度下降函数_Pytorch学习笔记6:激活函数/单层感知机/梯度下降求最小值实例...
- jenkins 控制台输出中文乱码
- 《使命召唤7:黑色行动》有什么简单办法进入僵尸模式
- seafile Windows MySQL_seafile4.3.1 + windows 2012 server +mysql 部署记录(3)
- autofs后 卸载_autofs自动挂载
- DevExpress DateEdit 5 常见问题解决方法
- WebService入门(二)wsimport的使用
- 微软员工和 GitHub 员工宣布支持 996.ICU 运动,来签个名呗?
- Spring Cloud 工具集
- 【最全】ISTQB- FL大纲(含重点)
- 今年应届的我面试37次,在16个offer上岸后总结了一些面试心得
- LC5454.统计全1子矩阵(矩阵统计)
- as 运行java 程序失败,为JBoss AS 7运行Java服务包装程序时出错
- java公众号上传素材及发送图文消息实现
热门文章
- python笔记基础-Python学习笔记(基础)
- python的用途-请问在python中的% 是什么意思, 起到什么作用?
- python使用del保留字定义一个函数-python中自定义函数的保留字是
- python小游戏编程实例-Python实现的弹球小游戏示例
- php和python写爬虫-为什么写爬虫都喜欢用python?
- python linux命令-Python执行Linux系统命令的4种方法
- 计算机专业名词术语raid,RAID中的9个专业术语详解
- UVa11292 - Dragon of Loowater(贪心)
- 数据库设计中的范式形式
- LeetCode Intersection of Two Linked Lists