求方阵(矩阵)的特征值和特征向量用的是python中的numpy.linagl.eig方法,它需要一个二维数组作为参数,输出一个一位数组(元素为特征值)和一个二维数组(特征向量组),我们还是在例子中学习一哈:
- 先引入numpy模块
![python 线性代数:[10]求方阵的特征值特征向量](/2015/05/03/python%20%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%EF%BC%9A%5B10%5D%E6%B1%82%E6%96%B9%E9%98%B5%E7%9A%84%E7%89%B9%E5%BE%81%E5%80%BC%E7%89%B9%E5%BE%81%E5%90%91%E9%87%8F/a1ad16fa513d2697caee42aa57fbb2fb4216d8cd.jpg)
- 创建一个对角矩阵,关于diag的用法可以看我前几篇文章
![python 线性代数:[10]求方阵的特征值特征向量](/2015/05/03/python%20%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%EF%BC%9A%5B10%5D%E6%B1%82%E6%96%B9%E9%98%B5%E7%9A%84%E7%89%B9%E5%BE%81%E5%80%BC%E7%89%B9%E5%BE%81%E5%90%91%E9%87%8F/29752a9b033b5bb57ea46a0934d3d539b700bc93.jpg)
- 求矩阵x的特征值和特征向量,特征值保存在a中,特征向量保存在b中
![python 线性代数:[10]求方阵的特征值特征向量](/2015/05/03/python%20%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%EF%BC%9A%5B10%5D%E6%B1%82%E6%96%B9%E9%98%B5%E7%9A%84%E7%89%B9%E5%BE%81%E5%80%BC%E7%89%B9%E5%BE%81%E5%90%91%E9%87%8F/b3ba5d166d224f4abaa439e40bf790529922d1cd.jpg)
使用循环的方法,我们来验证一下特征值和特征向量,验证的方法是特征值和特征向量的定义法:
设A为n阶矩阵,若存在常数λ及非零的n维向量x,使得
Ax=λx,
则称λ是矩阵A的特征值,x是A属于特征值λ的特征向量。
![python 线性代数:[10]求方阵的特征值特征向量](/2015/05/03/python%20%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%EF%BC%9A%5B10%5D%E6%B1%82%E6%96%B9%E9%98%B5%E7%9A%84%E7%89%B9%E5%BE%81%E5%80%BC%E7%89%B9%E5%BE%81%E5%90%91%E9%87%8F/5202e5f2b21193137630b54767380cd790238d93.jpg)
- 这是我今天犯的错误:
![python 线性代数:[10]求方阵的特征值特征向量](/2015/05/03/python%20%E7%BA%BF%E6%80%A7%E4%BB%A3%E6%95%B0%EF%BC%9A%5B10%5D%E6%B1%82%E6%96%B9%E9%98%B5%E7%9A%84%E7%89%B9%E5%BE%81%E5%80%BC%E7%89%B9%E5%BE%81%E5%90%91%E9%87%8F/6a22e8246b600c332d44943f184c510fd8f9a1cd.jpg)
这是今天用到的所有代码:
import numpy
x=numpy.diag((1,2,3))
x
array([[1, 0, 0],
[0, 2, 0],
[0, 0, 3]])
a,b=numpy.linalg.eig(x)
a
array([ 1., 2., 3.])
b
array([[ 1., 0., 0.],
[ 0., 1., 0.],
[ 0., 0., 1.]])
for i in range(3):
if numpy.dot(x,b[:][i])==a[i]*b[:][i]:
print ‘正确’
else:print ‘错误‘
SyntaxError: EOL while scanning string literal
for i in range(3):
if numpy.dot(x,b[:][i])==a[i]*b[:][i]:
print ‘正确’
else:print ‘错误’
Traceback (most recent call last):
File “<pyshell#38>”, line 2, in
if numpy.dot(x,b[:][i])==a[i]*b[:][i]:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
for i in range(3):
if (numpy.dot(x,b[:][i])==a[i]*b[:][i]).all():
print ‘正确’
else:print ‘错误’
正确
正确
正确
转载请注明来自DataScience.
邮箱: 675495787@qq.com