20241230 基础数学-线性代数-(1)求解特征值(numpy, scipy)

所有代码实现,基于教程中的理论通过python实现出来的。效率不高,但有代码可以看。

由于scipy/sckitlearn/sparkx 底层的实现都被封装了(小白兔水平有限,fortran代码实在没看懂)这里的实现至少可以和理论公式对应的上。

1. 求特征值和特征向量

这是后面解线性方程的基础。解方程及拆分过程依赖eigVal,eigVec,很重要。

基本的解析法很好理解,所有的教程都有介绍。但是工程实现numpy等都是用的其他数值求解方法,这里实验了QR方法(水平有限,是最基础的QR),证明QR方法不难实现,并且有更多方法优化可以提高QR的数值稳定性和收敛效率(水平有限,placeholder,given旋转等,未研究)。

|--------|---------------------------------------------------------|-------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| | 解析 | 解析 | 数值 |
| eig | polynomial | *symmetric matrix lanrange multiples | *symmetric matrix QR Iteration |
| 算法 | det(A-lambda*E)=0 解lambda的n次方程, 对应每个eigval[*]解齐次方程。 | 基于对称矩阵转标准二次型原理,A= (PN...P1) D (P1.T ... PN.T) eigVec=(PN...P1) eigVal=D | 1. 将A=QR,Q为规范正交矩阵,R为A在这个矩阵上的投影系数。 2. AK=RQ, 迭代k次, Q.T A= R, A1= Q.T A Q; ... Q1.T A1= R1; A2= Q1.T A1 Q1 = Q1.T Q.T A Q Q1 ... AK = (QK.T ... Q.T) A (Q ... QK ) //AK 就是特征值对角矩阵, Q...QK 就是特征向量 //AK为什么会收敛为对角矩阵,待研究//TODO eigVec=(PN...P1) eigVal=D |
| PYTHON | E00_eigVal_by_polynomial.py | P00_lagrange_mul_resolver00.py | E01_eigVal_by_qr_mm.py //*没有完全解决数值稳定性问题,devide0 等等;[URL]有大神写了QR算法文章,有更优的算法。 |

参考代码

​​​​​​参考代码: AITutorial02: AI初学,AI幼儿园练习

写在最后

* 线性代数理论及证明过程请参考教材。公式推理可以参考AI。感谢数学大师们。感谢《学兔兔》网。

相关推荐
西农小陈9 小时前
Python-基于PyQt5,wordcloud,pillow,numpy,os,sys的智能词云生成器
开发语言·python·小程序·pycharm·numpy·pyqt·pillow
Zda天天爱打卡1 天前
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.28 存储之道:跨平台数据持久化方案
开发语言·python·numpy
iloveas20141 天前
three.js+WebGL踩坑经验合集(6.1):负缩放,负定矩阵和行列式的关系(2D版本)
线性代数·矩阵·webgl
游王子1 天前
Python NumPy(10):NumPy 统计函数
开发语言·python·numpy
游王子2 天前
Python NumPy(7):连接数组、分割数组、数组元素的添加与删除
开发语言·python·numpy
SteveKenny2 天前
Python 梯度下降法(四):Adadelta Optimize
开发语言·python·深度学习·机器学习·numpy·matplotlib
Zda天天爱打卡2 天前
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.27 线性代数王国:矩阵分解实战指南
python·线性代数·numpy
belldeep2 天前
python:洛伦兹变换
python·numpy·lorenz
Zda天天爱打卡2 天前
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.30 性能巅峰:NumPy代码优化全攻略
开发语言·python·numpy
Zda天天爱打卡3 天前
【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.25 视觉风暴:NumPy驱动数据可视化
python·信息可视化·numpy