欧米茄在连续过度松弛率法中有何意义?

如何解决欧米茄在连续过度松弛率法中有何意义?

我有以下矩阵

enter image description here

我已将其转换为严格占优的矩阵,并应用了Guass-Siedel和omega = 1.1的逐次超松弛率方法以及epsilon = 1e-4的容差,其收敛公式如下:

enter image description here

通过使用python手动解决此问题(不使用线性代数库),我发现这两种方法都具有相同的迭代次数(6),但是据我了解,矩阵是否在Gauss-Siedel和1

那么,我的理解正确吗? SOR方法是否必须减少迭代次数

解决方法

这实际上是我自己在尝试解决同一问题时遇到的一个问题。在这里,我将包括来自 GS 和 SOR 方法的第 6 次迭代的结果,并将分析我对为什么会这样的看法。对于初始向量 x = (0,0)。实际上,我们看到每种方法的 L 无穷范数都不同(见下文)。

对于高斯-赛德尔:

The solution vector in iteration 6 is: 
[[ 1.0001]
[ 2.    ]
[-1.    ]
[ 1.    ]]
The L infinity norm in iteration 6 is: [4.1458e-05]

对于 SOR:

The solution vector in iteration 6 is: 
[[ 1.0002]
[ 2.0001]
[-1.0001]
[ 1.    ]]
The L infinity norm in iteration 6 is: [7.8879e-05]

从学术上讲,“SOR 可以提供一种方便的方法来加速解决线性系统的雅可比和高斯-赛德尔方法。参数 ω 被称为松弛参数。显然,对于 ω = 1,我们恢复了原始方程。如果 ω 1,我们有过度松弛,我们将更关注它。它在多年的手工计算中发现,如果我们超越 Gauss-Seidel 校正,收敛速度会更快。粗略地说,这些近似值保持在解 x 的同一侧。过松弛因子 ω 使我们更接近解。随着 ω = 1,我们恢复 Gauss-Seidel;当 ω > 1,该方法被称为 SOR。ω 的最佳选择永远不会超过 2。它通常在 1.9 附近。"

有关 ω 的更多信息,您还可以参考 Strang,G.,2006 年“线性代数及其应用”一书的第 410 页以及论文 A rapid finite difference algorithm,utilizing successive over‐relaxation to solve the Poisson–Boltzmann equation

基于上面的学术描述,我认为这两种方法都有 6 次迭代,因为 1.1 不是最佳的 ω 值。将 ω 更改为更接近 optimal ω 的值可能会产生更好的结果,因为过度松弛的全部意义在于发现这个最佳 ω。 (我再次相信这个 1.1 不是最佳的 omega,一旦我进行计算就会更新你)。图片来自 Strang,G.,2006 年“线性代数及其应用”第 4 版第 411 页。

编辑:确实通过在 SOR 中运行 omega - 迭代的图形表示,我的最佳 omega 似乎在 1.0300 到 1.0440 的范围内,并且这些 omega 的整个范围给了我五次迭代,这是一种更有效的方法比 omega = 1 时的纯 Gauss-Seidel 给出 6 次迭代。

efficiency plot

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?