MATLAB共轭梯度法数值求解器
项目介绍
本项目基于MATLAB实现了共轭梯度法(Conjugate Gradient Method)的完整数值求解算法,专门用于高效求解大型稀疏对称正定线性方程组Ax=b。该算法采用迭代优化策略,通过共轭方向的构建和步长的精确计算,在有限步内收敛到理论解。实现中充分考虑了数值稳定性和计算效率,特别适用于病态矩阵和高维问题的求解场景。
功能特性
- 完整算法实现:标准的共轭梯度迭代流程,包含方向向量更新和最优步长计算
- 智能收敛控制:支持自定义容差阈值和最大迭代次数,提供收敛状态监测
- 性能分析工具:实时记录残差范数变化历程,输出计算时间统计
- 矩阵优化处理:同时支持稠密矩阵和稀疏矩阵格式,自动优化存储和计算效率
- 鲁棒性增强:内置数值稳定性控制机制,有效处理病态问题
使用方法
基本调用格式
[x, iter_count, converged, residual_history, elapsed_time] = main(A, b, x0, tol, max_iter);
参数说明
- A:n×n维对称正定系数矩阵(支持稠密或稀疏格式)
- b:n×1维右端向量
- x0:n×1维初始猜测解(可选参数,默认值为零向量)
- tol:收敛容差阈值(可选参数,默认值为1e-6)
- max_iter:最大迭代次数限制(可选参数,默认值为1000)
输出结果
- x:方程组的数值近似解
- iter_count:实际执行的迭代次数
- converged:收敛状态指示(true表示达到收敛条件)
- residual_history:每次迭代的残差范数记录
- elapsed_time:算法总执行时间(秒)
应用示例
% 生成测试问题
n = 1000;
A = diag(1:n) + 0.01*randn(n); % 对称正定矩阵
b = randn(n,1);
% 调用求解器
[x, iter, flag, res_hist, time] = main(A, b, [], 1e-8, 500);
% 分析结果
fprintf('迭代次数: %d, 计算时间: %.4f秒n', iter, time);
semilogy(res_hist); title('残差收敛历程');
系统要求
- MATLAB R2016b或更高版本
- 推荐内存容量:≥4GB(用于处理大型稀疏矩阵)
- 无需额外工具箱依赖
文件说明
主程序文件实现了共轭梯度法的核心求解逻辑,包括迭代过程的初始化设置、方向向量的共轭正交化处理、最优步长的解析计算、收敛条件的动态判断以及残差范数的实时监控。该文件还集成了算法性能分析模块,能够精确统计计算耗时并记录完整的收敛历程数据,同时通过稀疏矩阵识别机制自动优化存储和运算效率。