matlab矩阵特征值分解,矩阵特征值分解与奇异值分解含义解析及应用

原文在此,仅仅将原文的Matlab代码改为Python3版本。

特征值与特征向量的几何意义

矩阵的乘法是什么,别只告诉我只是“前一个矩阵的行乘以后一个矩阵的列”,还会一点的可能还会说“前一个矩阵的列数等于后一个矩阵的行数才能相乘”,然而,这里却会和你说——那都是表象。

矩阵乘法真正的含义是变换,我们学《线性代数》一开始就学行变换列变换,那才是线代的核心——别会了点猫腻就忘了本——对,矩阵乘法:

09bb4f08f9f6

就是线性变换,若以其中一个向量A为中心,则B的作用主要是使A发生如下变化:

1. 伸缩

import numpy as np

import matplotlib.pyplot as plt

from matplotlib.font_manager import FontProperties

#设置中文字体

myfont = FontProperties(fname='C:/Windows/Fonts/msyh.ttc')

以上几行为下面三段代码相同的铺垫部分,后面不再重复

A = np.array([[0, 1, 1, 0, 0],[1, 1, 0, 0, 1]]) #原空间

B = np.array([[3,0],[0,2]]) #线性变换矩阵

Y = np.dot(B,A)

plt.clf()

plt.plot(A[0],A[1],'-*',lw=2)

plt.text(0.6,1.03,u'变换前',fontsize =14,fontproperties=myfont)

plt.plot(Y[0],Y[1],'-r*',lw=2)

#font size: xx-small;x-small;small;medium;large;x-large;xx-large

plt.text(0.6,2.03,u'变换后',fontsize ='large',fontproperties=myfont)

plt.axis([0,3,0,3]);plt.grid(True)

plt.show()

09bb4f08f9f6

从上图可知,y方向进行了2倍的拉伸,x方向进行了3倍的拉伸,这就是B=[3 0; 0 2]的功劳,3和2就是伸缩比例。请注意,这时B除了对角线元素为各个维度的倍数外,非正对角线元素都为0,因为下面将要看到,对角线元素非0则将会发生切变及旋转的效果。

2. 切变

A = np.array([[0, 1, 1, 0, 0],[1, 1, 0, 0, 1]]) #原空间

plt.clf()

B1=np.array([[1,0],[1,1]])

B2=np.array([[1,0],[-1,1]])

B3=np.array([[1,1],[0,1]])

B4=np.array([[1,-1],[0,1]])

Y1 = np.dot(B1,A)

Y2 = np.dot(B2,A)

Y3 = np.dot(B3,A)

Y4 = np.dot(B4,A)

plt.subplot(221)

plt.plot(A[0],A[1],'-*',lw=2)

plt.plot(Y1[0],Y1[1],'-r*',lw=2)

plt.axis([-1,3,-1,3]);plt.grid(True)

plt.subplot(222)

plt.plot(A[0],A[1],'-*',lw=2)

plt.plot(Y2[0],Y2[1],'-r*',lw=2)

plt.axis([-1,3,-1,3]);plt.grid(True)

plt.subplot(223)

plt.plot(A[0],A[1],'-*',lw=2)

plt.plot(Y3[0],Y3[1],'-r*',lw=2)

plt.axis([-1,3,-1,3]);plt.grid(True)

plt.subplot(224)

plt.plot(A[0],A[1],'-*',lw=2)

plt.plot(Y4[0],Y4[1],'-r*',lw=2)

plt.axis([-1,3,-1,3]);plt.grid(True)

plt.show()

09bb4f08f9f6

3. 旋转

所有的变换其实都可以通过上面的伸缩和切变变换的到,如果合理地对变换矩阵B取值,能得到图形旋转的效果,如下:

A = np.array([[0, 1, 1, 0, 0],[1

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值