matlab下的矩阵运算

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

第二讲矩阵运算

§1基本矩阵运算元

我们在第一讲章已说明过 MATLAB 的运算是以数组(array>及矩阵 (matrix> 方式在做运算,而这二者在MATLAB的基本运算性质不同,数组强调元素对元素的运算,而矩阵则采用线性代数的运算方式。我们就来说明矩阵运算的特点。

以下将数组及矩阵的运算符号及其意义列出

>> A=[2 5 1。 7 3 8。 4 5 21。 16 13 0]。

>> A' % A的转置矩阵

A =

2 7 4 16

5 3 5 13

1 8 21 0

>> A=[4 -1 3]。 B=[-2 5 2]。

>> dot_prod = sum(A.*B> % 二个数组做内积

dot_prod =

-7

>> c=dot(A,B> % 以dot函数也可做内积运算

c =

-7

>> A=[4。 -1。 3]。

>> dot_prod = sum(A'.*B>。 % 如果A是行数组则先做转置,再做内积

>> F=[2 5 -1]。 G=[0 1 -3]。

>> out_prod=F'*G。 % 二矩阵做外积

>> A=[2,5,1。 0,3,-1]。

>> B=[1,0,2。 -1,4,-2。 5,2,1]。

>> C=A*B % 矩阵相乘,注意二个矩阵的大小须相容

C =

2 22 -5

-8 10 -7

>> A=[2 1。 4 3]。

>> A^2 % 矩阵次方

ans =

8 5

20 13

下面我们演示一个具体的例子。

假设我们把本地区的天气分为3种状态:晴,阴,雨。若今天天阴,则明天天晴的概率为1/2,阴的概率为1/4,下雨的概率为1/4。如果今天天阴,或者今天下雨,则明天天气是其它情况的概率会是其它的值,将这些概率值列入下面的表中。

天气状态转移概率表

2行第3列(最后一列>的值为1/2,,这给出了今天下雨明天转阴的概率。

将上表内的概率数据用矩阵A表示

矩阵A中概率称为转移概率,矩阵A称为转移矩阵。

已知今天天气晴、阴、雨的概率,可以用转移矩阵A提供的数据来计算明天天气晴、阴

、雨的概率。记、、分别为今天天气是晴、阴、雨的概率,、、分别为明

天天气是晴、阴、雨的概率,两个列向量

分别称为今日概率向量和明日概率向量,则有矩阵计算式

以当前状态预测未来状态的概率模型称为Markov链。如果在清晨我们听到的天气预报为,今天阴或雨的概率都是1/2,

那么,今日概率向量。利用上式计算明日概率向量的Matlab操作是:

A=[3/4 1/2 1/4。1/8 1/4 1/2。1/8 1/4 1/4]。 %输入矩阵A

P=[0 1/2 1/2]'。 %输入向量P

P1=(A*P>'

P1 =

3/8 3/8 1/4

这里,P1就是按行向量的形式输出的结果。明天天气为晴、阴的概率都是3/8,下雨的概率是1 /4。

明日的概率向量可以用前面的Markov链求出,那么两天的概率向量可用公式

给出。这里需要计算,我们再用Matlab完成矩阵乘积的计算。

A2=A^2

A2 =

21/32 9/16 1/2

3/16 1/4 9/32

5/32 3/16 7/32

用键盘敲入A2 = A^2

后再按下【Enter】键就得到了结果A2。从本例可见,Matlab的操作并不复杂,它用于矩阵

运算十分方便。

§2 线性方程组的求解

因为矩阵的乘法运算一般不具有可交换性,所以AX与XA一般不相同,为求解X,Matla b提供了两种除法运算符:斜杠“\”和“/”分别表示左除和右除。

左除“\”:用X=A\B表示AX=B的解;右除“/”:用X=B/A表示XA=B的解。

例解线性方程组

输入:

A=[2 1 -5 1 。1 -3 0 -6。0 2 -1 2。1 4 -7 6],b=[8 9 -5 0]

A =

2 1 -5 1

1 -3 0 -6

0 2 -1 2

1 4 -7 6

b =

8 9 -5 0

方程组的解为

X=(A\b'>'

X =

3.0000 -

4.0000 -1.0000 1.0000

§3多项式与矩阵多项式

一、多项式行向量的创建方法

在MATLAB里,多项式由一个行向量表示,它的系数是按降序排列。例如,输入多项式x4-12x3+0x2+25x+116

>> p=[1 -12 0 25 116]

p =

1 -1

2 0 25 116

注意,必须包括具有零系数的项。除非特别地辨认,MATLAB无法知道哪一项为零。给出这种形式,用函数roots找出一个多项式的根。

?>>r=roots(p>

r =

11.7473

2.7028

-1.2251 + 1.4672i

-1.2251 - 1.4672i

因为在MATLAB中,无论是一个多项式,还是它的根,都是向量,MATLAB按惯例规定,多项式是行向量,根是列向量。给出一个多项式的根,也可以构造相应的多项式。在MATLAB中,命令poly执行这个任务。

>> pp=poly(r>

pp =

1.0e+002 *

Columns 1 through 4

0.0100 -0.1200 0.0000 0.2500

Column 5

1.1600 + 0.0000i

>> pp=real(pp> %throw away spurious imaginary part

pp =

1.0000 -1

2.0000 0.0000 25.0000 116.0000

因为MATLAB无隙地处理复数,当用根重组多项式时,如果一些根有虚部,因为截断误差,则poly的结果有一些小的虚部,这是很普通的。消除虚假的虚部,如上所示,只要使用函数real抽取实部。

二、多项式乘法

函数conv支持多项式乘法(执行两个数组的卷积>。考虑两个多项式a(x>=x3+2x2+3x+4和b(x>= x3+4x2+9x+16的乘积:

相关文档
最新文档