4.2  矩阵特征值和奇异值

对于n阶方阵A,求数λ和向量X,使得等式AX=λX成立,满足等式的数λ称为A的特征值,向量X称为A的特征向量。方程AX=λX和(A-λI)X=0是两个等价方程,要使方程(A-λI)X=0有非0解X,则必须使其行列式等于0,即|A-λI |=0。

由线性代数可知,行列式|A-λI |是一个关于λ的n阶多项式,因此方程|A-λI |=0是一个n次方程,有n个根(包含重根)。n个根就是矩阵A的n个特征值,每一个特征值对应无穷多个特征向量。所以,矩阵的特征值问题有确定的解,但特征向量问题没有确定的解。

4.2.1  特征值和特征向量的求取

特征值和特征向量在科学研究和工程计算中的应用非常广泛。在MATLAB中,计算矩阵A的特征值和特征向量的函数是eig(A),常用的调用格式有以下3种。

(1)E=eig(A):用于求矩阵A的全部特征值,构成向量E。

(2)[V,D]=eig(A):用于求矩阵A的全部特征值,构成对角矩阵D,并求A的特征向量,构成V的列向量。

(3)[V,D]=eig(A,’nobalance’):与上一种格式类似,只是上一种格式中是先对A作相似变换后再求矩阵A的特征值和特征向量,而本格式中则是直接求矩阵A的特征值和特征向量。

一个矩阵A的特征向量有无穷多个,eig函数只找出其中的n个,A的其他特征向量均可由这n个特征向量组合表示。

【例4-11】  简单实数矩阵的特征值示例。

>> A=[1,-3;2,2/3]

1.0000   -3.0000

2.0000    0.6667

>> [V,D]=eig(A)

0.7746 + 0.0000i   0.7746 + 0.0000i

0.0430 - 0.6310i   0.0430 + 0.6310i

0.8333 + 2.4438i   0.0000 + 0.0000i

0.0000 + 0.0000i   0.8333 - 2.4438i

【例4-12】  矩阵中有元素与截断误差相当时的特性值问题。

>> A=[3     -2      -0.9    2*eps

-2      4       -1    -eps

-eps/4   eps/2   -1     0

>> [V1,D1]=eig(A);                        %   求特征值

>> ER1=A*V1-V1*D1                     %  查看计算误差

0.0000         0   -0.0000    0.0000

0   -0.0000    0.0000   -0.0000

0.0000   -0.0000   -0.0000         0

0    0.0000    0.0000   -0.3789

>> [V2,D2]=eig(A,'nobalance');

>> ER2=A*V2-V2*D2                       %  查看计算误差

-0.1776   -0.0111   -0.0559   -0.0833

0.3553    0.1055    0.0343    0.0555

0.0017    0.0002    0.0007         0

0.0264   -0.0222    0.0222    0.0333

在本例,若求特征值的过程中不采用'nobalance'参数,那么计算结果是具有相当大的计算误差的。这是因为在执行eig命令的过程中,首先要调用使原矩阵各元素大致相当的“平衡”程序,这些“平衡”程序使得原来方阵中本可以忽略的小元素(本例中如eps)的作用被放大了,所以产生了较大的计算误差。

但是这种误差被放大的情况只发生在矩阵中有元素与截断误差相当的时候,在一般情况下,“平衡”程序的作用是减小计算误差。

【例4-13】  函数eig 与eigs 的比较示例。eigs函数是计算矩阵最大特征值和特征向量的函数。

>> rand('state',0)            %  设置随机种子,便于读者验证

>> A=rand(100,100)-0.5;

>> t0=clock;[V,D]=eig(A);T_full=etime(clock,t0)   %  函数eig的运行时间

>> options.tol=1e-8;                               %  为eigs设置计算精度

>> options.disp=0;                                %  不显示中间迭代结果

>> t0=clock;[v,d]=eigs(A,1,'lr',options);        %  计算最大实部特征值和特征向量

>> T_part=etime(clock,t0)                  %  函数eigs的运行时间

>> [Dmr,k]=max(real(diag(D)));       %  在eig求得的全部特征值中找实部最大的

>> d,D(1,1)

运行结果为:

2.7278 + 0.3006i

2.5933 + 1.5643i

>> vk1=V(:,k);              %  与d相同的特征向量应是V的第k列

>> vk1=vk1/norm(vk1);v=v/norm(v);   %  向量长度归一

8.5377e-007

>> D_err=abs(D(k,k)-d)/abs(d)        %  求两个特征值间的相对误差

2.6420e-009

在本例中,对函数运行所需要的时间进行了评估。需要指出的是:在实际使用中因为计算机的配置和系统状态不同,评估得到的绝对时间也不尽相同,不过我们可以通过同一台计算机上两种函数运行所需要时间比较得到两种算法的优劣。通过本例可以得出结论:使用eigs函数求一个特征值和特征向量所需要的时间,反而比使用eig函数求全部特征值和特征向量的时间多。

【例4-14】  用求特征值的方法,求解方程的根。

求解方程组要先构造与方程对应的多项式的伴随矩阵A,再求A的特征值,伴随矩阵A的特征值即为方程的解。具体过程如下:

>>  B=[1,-2,3,4,-5]

1    -2     3     4    -5

>> A=compan(B)            %  求B 的伴随矩阵

2    -3    -4     5

1     0     0     0

0     1     0     0

0     0     1     0

>> C=eig(A)

1.1641 + 1.8573i

1.1641 - 1.8573i

-1.1973 + 0.0000i

0.8691 + 0.0000i

>> D=roots(B)             %  直接求多项式B的零点

1.1641 + 1.8573i

1.1641 - 1.8573i

-1.1973 + 0.0000i

0.8691 + 0.0000i函数compan计算的是矩阵B的伴随矩阵A。伴随矩阵的特征值C就是方程的根。roots函数用于直接对线形方程求解,得到结果D,可以看出两种方法得出的结果C和D是一样的。

4.2.2  奇异值分解

如果存在两个矢量u、v及一个常数s,使得矩阵A满足下式:

则称s为奇异值,称u、v为奇异矢量。

将奇异值写成对角方阵∑,而相对应的奇异矢量作为列矢量,则可写成两个正交矩阵U、V,使得:

因为U、V正交,所以可得奇异值的表达式为:

一个m行n列的矩阵A经奇异值分解,可求得m行m列的距阵U,m行n列的矩阵∑,n行n列的矩阵V。

奇异值分解是另一种正交矩阵分解法,是最可靠的分解法,但是它与QR分解法相比,要花近10倍的计算时间。奇异值分解由svd函数实现,其调用格式为:[U,S,V]=svd(A)。

【例4-15】  奇异值分解示例。

>> A=magic(4)

16     2     3    13

5    11    10     8

9     7     6    12

4    14    15     1

>> [U,S,V] = svd(A)               %  奇异值分解

-0.5000    0.6708    0.5000   -0.2236

-0.5000   -0.2236   -0.5000   -0.6708

-0.5000    0.2236   -0.5000    0.6708

-0.5000   -0.6708    0.5000    0.2236

34.0000         0         0         0

0   17.8885         0         0

0         0    4.4721         0

0         0         0    0.0000

-0.5000    0.5000    0.6708    0.2236

-0.5000   -0.5000   -0.2236    0.6708

-0.5000   -0.5000    0.2236   -0.6708

-0.5000    0.5000   -0.6708   -0.2236

>> U*S*V'                   %  分解结果正确性验证

16.0000    2.0000    3.0000   13.0000

5.0000   11.0000   10.0000    8.0000

9.0000    7.0000    6.0000   12.0000

4.0000   14.0000   15.0000    1.0000

编辑:蓬荜生辉、倾国倾城、青樱、我本年轻复核:数韵校园工作室

如你对话题感兴趣,

matlab 求矩阵奇异值,MATLAB矩阵特征值和奇异值.相关推荐

  1. matlab求表达式绝对值,matlab绝对值怎么表示

    Matlab 的内部常数 Matlab 的常用内部数学函数 指数函数 exp(x) log(x) 对数函数 log10(x) log2(x) 开方函数 sqrt(x) 绝对值函数 abs(x) sin ...

  2. matlab 求曲面体积,matlab求两曲面之间的体积

    MATLAB求曲面相交所成空间曲线的图形 放在你程序后也可,单独运行也行:t=-0.1:0.1:2*pi;x=2*cos(t);%交线参数方程z=2*sin(t);y1=sqrt(5)*ones(si ...

  3. matlab求最短路,Matlab最短路学习

    文章目录 1.无向图最短路引例 2.有向图最短路引例 3.单源最短路函数graphshortestpath 1)对函数graphshortestpath进行解释 2)对于find函数解释 3)对于sp ...

  4. 试用matlab求e值,matlab中如何求e精确到20位

    MATLAB语言基础 第一节 使用MATLAB的窗口环境 一.MATLAB语言的显著特点 1.具有强大的矩阵运算能力:Matrix Laboratory(矩阵实验室),使得矩阵运算非常简单. 2.是一 ...

  5. matlab求微分方程精确解,matlab求微分方程精确解及近似解.ppt

    matlab求微分方程精确解及近似解.ppt 还剩 24页未读, 继续阅读 下载文档到电脑,马上远离加班熬夜! 亲,喜欢就下载吧,价低环保! 内容要点: 求微分方程的解q 自牛顿发明微积分以来,微分方 ...

  6. 运用数学软件matlab求无穷积分,matlab积分的计算及其简单应用论文.doc

    积分的计算及其简单应用 摘要:本文简要的概述了MATLAB 在高等数学中积分的计算及应用:利用MATLAB 中符号积分和数值积分的命令,计算定积分和不定积分.同时,也可以通过这些命令来解决一些实际问题 ...

  7. matlab 求留数,用matlab求留数

    <用matlab求留数>由会员分享,可在线阅读,更多相关<用matlab求留数(3页珍藏版)>请在金锄头文库上搜索. 1.收稿日期: 2006) 05- 29作者简介: 贾新民 ...

  8. matlab求方程实根,matlab怎么求方程的根

    MATLAB解方程_IT/计算机_专业资料.一般的代数方程函数solve用于求解一般代数方程的根,假定S为符 号表达式,命令solve (S)求解表达式等于0的根,也 可以再输入一个...... MA ...

  9. 用matlab求累次极限,Matlab笔记——数值计算—高数篇015

    15. 数值计算-高数篇 一.求极限 limit(f,x,a)--求极限lim ()x a f x → limit(f,x,a,'right')--求右极限lim ()x a f x +→ limit ...

  10. matlab 求系统码的校验矩阵,数字通信系统matlab仿真

    课程设计报告 题目:基于MATLAB的通信系统仿真 ---信道编码对通信系统性能的影响 专业: 通信工程 姓名: XXX 学号: 0730xxxx 基于MATLAB的通信系统仿真 ---信道编码对通信 ...

最新文章

  1. 阿里巴巴400集python教程_阿里巴巴推荐的400集Python视频合集免费学起来,学完万物皆可爬...
  2. 阿里云短信官方的java示例是错误的
  3. 算法练习day10——190328(二叉树的先序、 中序、 后序遍历, 包括递归方式和非递归方式、找到一个节点的后继节点、二叉树的序列化和反序列化)
  4. 基于Vmware player的Windows 10 IoT core + RaspberryPi2安装部署
  5. 如何在新版的gitbook上写自己的书
  6. 深度评测丨GaussDB(for Redis)大Key操作的影响
  7. Exchange 2016 之分层通讯簿
  8. UI设计入门:解析设计标注规范和图标规范
  9. L2-008. 最长对称子串
  10. HDU 1754 I Hate It 线段树RMQ
  11. Powershell About Active Directory Server
  12. 定时任务cron表达式
  13. 西数推出首款SanDisk驱动器:蓝盘和绿盘
  14. 《看聊天记录都学不会C语言?太菜了吧》(3)人艰不拆,代码都在谈恋爱?!
  15. 人生的镜像-菌群人生,从出生到死亡的菌群演替
  16. 用python实现分段函数_python:集成分段函数
  17. 一种基于蜂窝信令数据的数据驱动型OD矩阵构建的方法:以里昂地区(法国)作为研究...
  18. C# 进行 Starlink 仿真03:72轨道面 * 22颗卫星 F相位因子==11 的Walker星座,创建3168条星间链路,并与 icarus 论文的Python结果相对比。
  19. Java JVM 动态方法调用指令 invokedynamic 实现分析(以 Lambda 表达式实现原理为例)...
  20. PigGo配置Gitee仓库出现“Not Found Project“的错误解决方案

热门文章

  1. python网址下载文件语言_python爬虫实战之自动下载网页音频文件
  2. html数据透视,Excel数据透视表使用过程中常见问题 如何在excel数据透视表中使用函数公式...
  3. linux目录权限为rws,Linux-文件权限
  4. epcs1s是epcs1系列的么_串行FLASH配置芯片(EPCS1或EPCS4)数据手册
  5. 基于知识图谱的智能问答项目
  6. springboot/vue 前后端分离项目搭建流程
  7. Python中while循环的基本用法
  8. ctc decoder
  9. To prevent a memory leak, the JDBC Driver has been forcibly unregistered.异常处理
  10. Deep Adversarial Decomposition: A Unified Framework for Separating Superimposed Images