数值分析作业 - 对称正定线性方程组的解法
数值分析Problem 1
![](https://cdn.duanyll.com/img/20230419144112.png)
则该矩阵正定. Cholesky 分解:
回代求解:
先求解
再求解
Problem 2
![](https://cdn.duanyll.com/img/20230419152528.png)
共轭方向法
首先产生两个共轭方向
然后进行迭代
共轭梯度法
Problem 3
![](https://cdn.duanyll.com/img/20230419225136.png)
仍然基于 CUDA C++ 和 cuBLAS 实现两种算法. 算法实现参见 spd.cu
.
对于问题 1 中的方程, 使用梯度下降法以及共轭梯度法进行求解:
1 | Testing small matrix |
观察到梯度下降法经过 50 次迭代达到设置的极限时, 仍然有较明显的误差, 而共轭梯度法只需很少的迭代即可收敛到精确解.
为了充分测试算法的性能, 通过下列方法构造大规模的测试数据:
- 使用
区间内均匀随机数填充 确保 至少是半正定- 使用
区间内均匀随机数填充
取
1 | Testing large matrix with n = 1000 |
能注意到梯度下降法的迭代速度略快与共轭梯度法, 但是即使梯度下降法消耗了更长时间, 其精度仍不如共轭梯度法.