二、超松弛迭代法(SOR)

1.原理:

​ 回顾:

​ 在一般情况下 : 收敛过慢甚至不收敛的$B$与$f$,经过对系数矩阵$A$分裂成$A = M - N$的形式, 使得迭代公式变为: $x^{k+1}=(I-M^{-1})Ax^{k}+M^{-1}f$

​ 雅克比迭代法选取 : 现将$A$如下分解$A = D-L-U$,$D$为对角阵,$L$为下三角阵,$U$为上三角阵,取$M \equiv D$,取$N \equiv L+U$,

​ 在这一章中我们选取下三角矩阵$M=\frac{1}{\omega}(D-\omega L),\omega>0$,其中$\omega$为松弛因子,我们可以发现当$\omega$为1时,$M=D-L$,正是高思-赛德尔迭代法,下面推导迭代公式: $$ \textbf{x}{k+1}=I-M^{-1}A\textbf{x}{k}+M^{-1}b $$

$$ \textbf{x}{k+1}=I-\omega(D-\omega L)^{-1}A\textbf{x}{k}+\omega (D-\omega L)^{-1}b $$

$$ \textbf{x}{k+1}=(D-\omega L)^{-1}((1-\omega)D+\omega U)\textbf{x}{k}+\omega (D-\omega L)^{-1}b $$

​ 推导完毕,我们较为常用的是下式: $$ (D-\omega L)\textbf{x}{k+1}=((1-\omega)D+\omega U)\textbf{x}{k}+\omega b $$ 以及: $$ \left{ \begin{matrix} \textbf{x}^{(0)} &=& (x_1^{(0)},\textbf{...},x_n^{(0)})^{T}, \ x_i^{(k+1)} &=& x_i^{(k+)}+ \Delta x_{i} \ \Delta x_{i} &=& \omega \frac{b_{i}- \sum\limits_{j=1}^{i-1}a_{ij}x_{j}^{(k+1)}-\sum\limits_{j=1}^{n}a_{ij}x_{j}^{(k)}}{a_{ii}} \ i &=&1,2,...,n,k=0,1,...,\ \omega为松弛因子 \end{matrix} \right. $$

当$\omega>1$时为超松弛迭代,当$\omega<1$时为低松弛迭代

迭代终止条件:$\mathop{max}\limits_{1\le i\le n}|\Delta x_{i}| = \mathop{max}\limits_{1\le i\le n}|x_{i}^{(k+1)}-x_{i}^{(k)}|

2.实现:

import numpy as np

import matplotlib.pyplot as plt

MAX = 110 # 遍历最大次数

A = np.array([[-4, 1, 1, 1], [1, -4, 1, 1], [1, 1, -4, 1], [1, 1, 1, -4]])

b = np.array([[1], [1], [1], [1]]) # 注意这里取列向量

omega_list = [1 + 0.005 * i for i in range(100)] # 取到不同的omega值,观察趋势

length = len(A)

count = [] # 记录遍历的次数

for omega in omega_list: # 遍历每一个omega值

times = 0

x_0 = np.zeros((length, 1))

x_hold = x_0 + np.ones((length, 1))

while (np.linalg.norm(x_hold - x_0, ord=2) >= 10 ** (-5)) and (times <= MAX):

# 遍历停止条件以k+1次与k次迭代的向量差的二范数以及遍历最大次数为标准

x_hold = x_0.copy() # 这里不要用赋值,要用copy

x_new = x_0.copy()

for i in range(length):

# 根据迭代公式迭代

x_new[i][0] = x_0[i][0] + omega * (b[i][0] - sum([A[i][j] * x_new[j][0] for j in range(i)]) - sum(

[A[i][j] * x_0[j][0] for j in range(i, length)])) / A[i][i]

x_0 = x_new.copy()

times += 1

count.append(times)

plt.plot(omega_list, count) # 观察omega与迭代次数的关系

plt.show()

思路:

​ 1.遍历设限:第一种是到达精度,到达精度停止迭代,第二种是到达规定最大次数,这个可以自己设定.

​ 2.在根据迭代公式改变各个向量分量时,要注意遍历范围.

结果:

原文出处:https://www.cnblogs.com/MyBlog-MrY/p/10848322.html

sor松弛迭代matlab,数值分析Python实现系列—— 二、逐次超松弛迭代法(SOR)相关推荐

  1. 逐次超松弛迭代法SOR

    %SOR:逐次超松弛迭代法 %本函数只能求解当A为n*n的矩阵 %2010-10-21 function x=SOR(A,b,w)     tic;     if nargin==2         ...

  2. 3.3 数值分析: 逐次超松弛迭代法-SOR方法

    本文内容为东北大学数值分析国家精品慕课课程的课程讲义, 将其整理为OneNote笔记同时添加了本人上课时的课堂笔记, 且主页中的思维导图就是根据课件内容整理而来, 为了方便大家和自己查看,特将此上传到 ...

  3. Matlab转Python问题之二维数组单索引寻值

    在Matlab中,对于二维数组来说,是可以用一个索引来找单个元素的,但是python中,如果只写一个索引,意味着指的是一整行的数值. A=[1,2,3;4,5,6;7,8,9] A =1 2 34 5 ...

  4. 【Python学习系列二十六】networkx库图最短路径求解

    场景:基于python库networkx来求解图最短路径,相关算法基础参考 http://blog.csdn.net/fjssharpsword/article/details/52931373 ht ...

  5. 【Python学习系列二十三】Scikit_Learn库降维方法(矩阵分解)-PCAFA

    1主成分分析PCA 1.1 精确PCA和似然估计 PCA基于最大方差的正交变量分解多维数据集.在scikit-learn库中,PCA的实现是先通过fit方法计算n维的特征值和特征向量,然后通过tran ...

  6. 【Python学习系列二十】scikit-learn库模型持久化

    场景:需要将模型保存到内存,或磁盘. 代码: # -*- coding: utf-8 -*-import pandas as pd import pickle as pkl from sklearn. ...

  7. 【Python学习系列二】Python默认编码和Eclipse环境的冲突问题

    1.问题:在Eclipse+PyDev开发环境中写个 print 'Hello,python!'; 执行却提示: SyntaxError: Non-ASCII character '\xc4' 2.原 ...

  8. 扩展Python模块系列(二)----一个简单的例子

    本节使用一个简单的例子引出Python C/C++ API的详细使用方法.针对的是CPython的解释器. 目标:创建一个Python内建模块test,提供一个功能函数distance, 计算空间中两 ...

  9. selenium+python自动化测试系列(二):AutoIt工具实现本地文件上传

    AutoIt使用简单说明 AutoIt的安装这里就不在啰嗦,可以参考AutoIt安装或者自行搜索解决. 第一步:定位上传文件路径的文本框 这里举例说明,如何定位?如图 这里我们看到上传文件的类型是bu ...

最新文章

  1. python设计模式12-代理模式
  2. 《Java高级程序设计》第一周作业
  3. python进阶21之actor
  4. java 不让滚动条随着拖拽滑动_「最近项目小结」使用Vue实现一个简单的鼠标拖拽滚动效果插件...
  5. 如何做到免驱打印_创想三维:3D打印机制造光感护眼台灯
  6. 体表面积在线计算机,体表面积计算器
  7. 0x0F转换成二进制
  8. SMTP:mail、sendmail、mailx、postfix等邮件服务总结
  9. 编译器和编辑器的区别
  10. 微服务出现Shutting down DiscoveryClient问题
  11. python3.4学习笔记(十八) pycharm 安装使用、注册码、显示行号和字体大小等常用设置...
  12. H3C交换机环路监测,NTP时间同步。
  13. javascript如何获取request中的数据
  14. uoj #311.【UNR #2】积劳成疾 dp
  15. 好友列表页面java_怎样制作QQ好友列表的界面?
  16. bert中文情感分析二分类任务详解
  17. 泛函分析--from BBS 水木清华站
  18. 1064:奥运奖牌计数(C C++)
  19. Sata接口读取新硬盘读不出问题解决
  20. UVa-10082-WERTYU

热门文章

  1. Android nomedia 避免图片等资源泄露在系统图库当中
  2. 企业如何有效利用PLM系统(上)
  3. 用AI给娃定制绘本 #麻瓜+AI混合工作流试验 9
  4. Linux usb 4. Device 详解
  5. 22.10.29 CF-1294C
  6. Path Planning for UAV Ground Target Tracking via Deep Reinforcement Learning(IEEE Access-2020)
  7. 《增长黑客》的背后逻辑是什么?(二)
  8. 黑客美化版大马_2012版
  9. Python学习笔记Task07(异常)
  10. 向大家推荐一款功能强大且免费的杀毒软件:avast! 4 Professional Edition