python - 欧米茄在连续过松弛率法中的意义是什么?
问题描述
我有以下矩阵
我已将其转换为严格占优矩阵,并应用 Guass-Siedel 和连续松弛率方法,其中 omega=1.1 和 epsilon=1e-4 容差,收敛公式如下
通过手动使用python(不使用线性代数库)解决这个问题,我发现这两种方法都采用相同数量的迭代(6),但根据我的理解,如果矩阵在 Gauss-Siedel 和 1<omega<2 中收敛连续超过松弛率方法,那么 SOR 方法应该需要更少的迭代次数,这不会发生?
那么,我的理解正确吗?SOR 方法是否必须减少迭代次数?
解决方案
这实际上是我在尝试解决相同问题时遇到的问题。在这里,我将包括来自 GS 和 SOR 方法的第 6 次迭代的结果,并将分析我对为什么会这样的看法。对于初始向量 x = (0,0,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 可以提供一种方便的方法来加快 Jacobian 和 Gauss-Seidel 方法来求解我们的线性系统。参数 ω 被称为松弛参数。显然,对于 ω = 1,我们恢复了原始方程。如果ω < 1 我们谈论欠松弛,这对于一些在正常雅可比松弛下不会收敛的系统可能很重要。如果 ω > 1,我们会过松弛,我们会更加关注。它是在如果我们超过 Gauss-Seidel 校正,那么多年来的手工计算收敛速度更快。粗略地说,这些近似值保持在解 x 的同一侧。过松弛因子 ω 使我们更接近解。当 ω = 1 时,我们恢复 Gauss-Seidel;当 ω > 1 时,该方法称为 SOR。ω 的最优选择永远不会超过 2。它通常在 1.9 附近。
有关 ω 的更多信息,您还可以参考 Strang, G., 2006 年第 410 页的“线性代数及其应用”一书以及论文A rapidfinite Difference algorithm, using continuous over-relaxation to solve Poisson –玻尔兹曼方程。
根据上面的学术描述,我认为这两种方法都有 6 次迭代,因为 1.1 不是最优的 ω 值。将 ω 更改为更接近的值可能会产生更好的结果,因为过度松弛的全部目的是发现这个最佳 ω。(我再次相信这个 1.1 不是最佳欧米茄,一旦我进行计算就会更新你)。图片来自 Strang, G.,2006 年“线性代数及其应用”第 4 版第 411 页。
编辑:确实,通过在 SOR 中运行 omega - 迭代的图形表示,我的最佳 omega 似乎在 1.0300 到 1.0440 的范围内,并且这些 omega 的整个范围给了我五次迭代,这是比纯高斯更有效的方法-Seidel at omega = 1,给出 6 次迭代。
推荐阅读
- javascript - Zabbix 使用 javascript for 循环预处理项目
- python - 我找不到使用 python selenium 输入文本的元素
- amazon-s3 - 每当我将图像上传到 S3 AWS 时,如何设置“始终公开图像”?
- google-cloud-functions - 从 Cloud Function 的文件到达事件触发 Composer DAG 上的任务
- ansible - Ansible:当使用带有 == 的 'when' 条件时,'dict object' 没有属性
- python - 如何在onedrive中读取无法在python中下载的Excel?
- solr - 如何在 Solr 核心中获取每个 TLD 的文档数?
- drake - 覆盖 C++ 绑定系统的动态
- css - 带有负 Z 索引的下拉菜单隐藏在元素下
- shell - 如何摆脱构建控制台中的 Jenkins“节点:/usr/lib/libstdc++.so.6:没有可用的版本信息(节点需要)”消息