基于MATLAB的线性方程组超松弛(SOR)迭代法求解器
项目介绍
本项目是一个基于MATLAB开发的数值计算工具,专门用于求解线性方程组 Ax=b。它实现了经典的超松弛迭代法(Successive Over-Relaxation, SOR),这是一种旨在提高高斯-赛德尔迭代法收敛效率的改进算法。通过合理选择松弛因子 omega,该工具能够显著加快线性系统求解的收敛速度,尤其适用于处理科学工程计算中出现的大型稀疏矩阵问题。
功能特性
- 高效线性求解:利用SOR迭代算法,支持通过配置精度容差和最大迭代次数来控制求解过程。
- 收敛性预判:在计算开始前自动检测系数矩阵的性质,包括严格对角占优(SDD)和对称正定(SPD)检查,为迭代的稳定性提供依据。
- 参数自动优化:内置松弛因子优化测试功能,能够自动遍历不同的 omega 值并识别出使迭代次数最少的最优参数。
- 全方位可视化:自动生成残差收敛曲线图以及松弛因子与收敛速度的关系曲线,便于用户直观分析算法性能。
- 健壮的求解逻辑:采用逐分量更新策略,结合残差范数监控,确保在满足精度要求时及时停止。
实现逻辑与功能细节说明
环境初始化与测试数据生成
程序首先清除工作区变量并关闭图形窗口。生成一个 100 阶的典型三对角矩阵作为测试用例,其对角线元素为4,相邻元素为-1,这种结构确保了矩阵的良好性质。初始解向量设为全零,并预设了松弛因子(1.25)、收敛容差(1e-6)和最大迭代步数。
矩阵属性分析
在执行迭代前,系统会对系数矩阵 A 进行双重校验:
- 严格对角占优检查:计算每一行对角线元素的绝对值是否大于该行其余元素绝对值之和。
- 对称正定检查:首先确认矩阵是否对称,随后尝试进行 Cholesky 分解。如果分解成功则判定为正定。
这些判别结果会实时反馈给用户,作为迭代是否会发散的警告参考。
SOR 核心迭代算法
求解器核心采用了逐分量更新的策略。在每一次迭代循环中:
- 分别计算当前分量之前已更新的解向量部分与矩阵对应行的乘积(前序项)。
- 计算当前分量之后仍为旧解的部分与矩阵对应行的乘积(后序项)。
- 应用 SOR 核心公式,结合当前分量的旧值、前序项、后序项以及松弛因子,计算出新的分量值。
- 更新完所有分量后,计算残差的二范数(||b - Ax||),并将其记录在历史记录中。
- 若残差小于预设精度,则提前终止迭代并返回结果。
松弛因子优化测试
为了寻找特定矩阵的最优收敛速度,程序包含一个自动化测试模块:
- 在 1.0 到 1.95 的范围内,以 0.05 为步长配置多个 omega 候选值。
- 针对每个候选值运行完整的求解器,记录达到收敛所需的迭代次数。
- 自动识别并输出迭代次数最少的最佳 omega 值。
结果分析与可视化
计算完成后,程序会输出解向量的部分元素(前5个)以及最终的迭代次数。同时生成两张图表:
- 收敛曲线图:使用半对数坐标展示残差随迭代次数下降的过程,直观反映收敛的线性特性。
- 性能优化图:展示不同松弛因子对迭代次数的影响曲线,并在图中标注出搜索到的最优解点。
使用方法
- 确保安装了 MATLAB 环境。
- 将程序文件放置在 MATLAB 的工作路径下。
- 直接运行主程序。用户可以在程序代码的初始化部分自行修改矩阵 A、向量 b、初始解、松弛因子以及收敛精度等参数。
- 程序运行后,控制台会实时显示收敛性判别结果、优化过程及最终解信息,并弹出分析图表。
系统要求
- 软件环境:MATLAB R2016b 或更高版本。
- 依赖项:无需外部库,仅依赖 MATLAB 内置的基础数学函数。