MATLAB数值与矩阵运算.docx

上传人:b****6 文档编号:6184455 上传时间:2023-01-04 格式:DOCX 页数:27 大小:63.86KB
下载 相关 举报
MATLAB数值与矩阵运算.docx_第1页
第1页 / 共27页
MATLAB数值与矩阵运算.docx_第2页
第2页 / 共27页
MATLAB数值与矩阵运算.docx_第3页
第3页 / 共27页
MATLAB数值与矩阵运算.docx_第4页
第4页 / 共27页
MATLAB数值与矩阵运算.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

MATLAB数值与矩阵运算.docx

《MATLAB数值与矩阵运算.docx》由会员分享,可在线阅读,更多相关《MATLAB数值与矩阵运算.docx(27页珍藏版)》请在冰豆网上搜索。

MATLAB数值与矩阵运算.docx

MATLAB数值与矩阵运算

第三讲矩阵及其基本运算

矩阵是线性代数的基本运算单元,MATLAB支持线性代数所定义的全部矩阵运算。

本讲主要讲述矩阵的表示以及矩阵的基本运算。

1.1矩阵的表示

1.1.1数值矩阵的生成

1.实数值矩阵输入

MATLAB的强大功能之一体现在能直接处理向量或矩阵。

当然首要任务是输入待处理的向量或矩阵。

不管是任何矩阵(向量),我们可以直接按行方式输入每个元素:

同一行中的元素用逗号(,)或者用空格符来分隔,且空格个数不限;不同的行用分号(;)分隔。

所有元素处于一方括号([])内;当矩阵是多维(三维以上),且方括号内的元素是维数较低的矩阵时,会有多重的方括号。

如:

>>Time=[111212345678910]

Time=

111212345678910

>>X_Data=[2.323.43;4.375.98]

X_Data=

2.433.43

4.375.98

>>vect_a=[12345]

vect_a=

12345

>>Matrix_B=[123;

>>234;345]

Matrix_B=123

234

345

>>Null_M=[]%生成一个空矩阵

2.复数矩阵输入

复数矩阵有两种生成方式:

第一种方式

例1-1

>>a=2.7;b=13/25;

>>C=[1,2*a+i*b,b*sqrt(a);sin(pi/4),a+5*b,3.5+1]

C=

1.00005.4000+0.5200i0.8544

0.70715.30004.5000

第2种方式

例1-2

>>R=[123;456],M=[111213;141516]

R=

123

456

M=

111213

141516

>>CN=R+i*M

CN=

1.0000+11.0000i2.0000+12.0000i3.0000+13.0000i

4.0000+14.0000i5.0000+15.0000i6.0000+16.0000i

1.1.2符号矩阵的生成

在MATLAB中输入符号向量或者矩阵的方法和输入数值类型的向量或者矩阵在形式上很相像,只不过要用到符号矩阵定义函数sym,或者是用到符号定义函数syms,先定义一些必要的符号变量,再像定义普通矩阵一样输入符号矩阵。

1.用命令sym定义矩阵:

这时的函数sym实际是在定义一个符号表达式,这时的符号矩阵中的元素可以是任何的符号或者是表达式,而且长度没有限制,只是将方括号置于用于创建符号表达式的单引号中。

如下例:

例1-3

>>sym_matrix=sym('[abc;Jack,HelpMe!

,NOWAY!

],')

sym_matrix=

[abc]

[JackHelpMe!

NOWAY!

]

>>sym_digits=sym('[123;abc;sin(x)cos(y)tan(z)]')

sym_digits=

[123]

[abc]

[sin(x)cos(y)tan(z)]

2.用命令syms定义矩阵

先定义矩阵中的每一个元素为一个符号变量,而后像普通矩阵一样输入符号矩阵。

例1-4

>>symsabc;

>>M1=sym('Classical');

>>M2=sym('Jazz');

>>M3=sym('Blues')

>>syms_matrix=[abc;M1,M2,M3;int2str([235])]

syms_matrix=

[abc]

[ClassicalJazzBlues]

[235]

把数值矩阵转化成相应的符号矩阵。

数值型和符号型在MATLAB中是不相同的,它们之间不能直接进行转化。

MATLAB提供了一个将数值型转化成符号型的命令,即sym。

例1-5

>>Digit_Matrix=[1/3sqrt

(2)3.4234;exp(0.23)log(29)23^(-11.23)]

>>Syms_Matrix=sym(Digit_Matrix)

结果是:

Digit_Matrix=

0.33331.41423.4234

1.25863.36730.0000

Syms_Matrix=

[1/3,sqrt

(2),17117/5000]

[5668230535726899*2^(-52),7582476122586655*2^(-51),5174709270083729*2^(-103)]

注意:

矩阵是用分数形式还是浮点形式表示的,将矩阵转化成符号矩阵后,都将以最接近原值的有理数形式表示或者是函数形式表示。

1.1.3特殊矩阵的生成

命令全零阵

函数zeros

格式B=zeros(n)%生成n×n全零阵

B=zeros(m,n)%生成m×n全零阵

B=zeros([mn])%生成m×n全零阵

B=zeros(size(A))%生成与矩阵A相同大小的全零阵

命令单位阵

函数eye

格式Y=eye(n)%生成n×n单位阵

Y=eye(m,n)%生成m×n单位阵

Y=eye(size(A))%生成与矩阵A相同大小的单位阵

命令全1阵

函数ones

格式Y=ones(n)%生成n×n全1阵

Y=ones(m,n)%生成m×n全1阵

Y=ones([mn])%生成m×n全1阵

Y=ones(size(A))%生成与矩阵A相同大小的全1阵

命令均匀分布随机矩阵

函数rand

格式Y=rand(n)%生成n×n随机矩阵,其元素在(0,1)内

Y=rand(m,n)%生成m×n随机矩阵

rand%无变量输入时只产生一个随机数

rand('state',sum(100*clock))%每次重置到不同状态

例1-9产生一个3×4随机矩阵

>>R=rand(3,4)

R=

0.95010.48600.45650.4447

0.23110.89130.01850.6154

0.60680.76210.82140.7919

例1-10产生一个在区间[10,20]内均匀分布的4阶随机矩阵

>>a=10;b=20;

>>x=a+(b-a)*rand(4)

x=

19.218119.354710.578911.3889

17.382119.169013.528712.0277

11.762714.102718.131711.9872

14.057118.936510.098616.0379

命令正态分布随机矩阵

函数randn

格式Y=randn(n)%生成n×n正态分布随机矩阵

Y=randn(m,n)%生成m×n正态分布随机矩阵

例1-11产生均值为0.6,方差为0.1的4阶矩阵

>>mu=0.6;sigma=0.1;

>>x=mu+sqrt(sigma)*randn(4)

x=

0.83110.77990.13351.0565

0.78270.51920.52600.4890

0.61270.48060.63750.7971

0.81410.50640.69960.8527

命令产生随机排列

函数randperm

格式p=randperm(n)%产生1~n之间整数的随机排列

例1-12

>>randperm(6)

ans=

321546

命令产生线性等分向量

函数linspace

格式y=linspace(a,b)%在(a,b)上产生100个线性等分点

y=linspace(a,b,n)%在(a,b)上产生n个线性等分点

命令产生对数等分向量

函数logspace

格式y=logspace(a,b)%在(

)之间产生50个对数等分向量

y=logspace(a,b,n)

y=logspace(a,pi)

命令计算矩阵中元素个数

n=numel(a)%返回矩阵A的元素的个数

命令产生以输入元素为对角线元素的矩阵

函数blkdiag

格式out=blkdiag(a,b,c,d,…)%产生以a,b,c,d,…为对角线元素的矩阵

例1-13

>>out=blkdiag(1,2,3,4)

out=

1000

0200

0030

0004

命令hadamard矩阵

函数hadamard

格式H=hadamard(n)%返回n阶hadamard矩阵

例1-15

>>h=hadamard(4)

h=

1111

1-11-1

11-1-1

1-1-11

命令Hilbert矩阵

函数hilb

格式H=hilb(n)%返回n阶Hilbert矩阵,其元素为H(i,j)=1/(i+j-1)。

例1-17产生一个3阶Hilbert矩阵

>>formatrat%以有理形式输出

>>H=hilb(3)

H=

11/21/3

1/21/31/4

1/31/41/5

命令逆Hilbert矩阵

函数invhilb

格式H=invhilb(n)%产生n阶逆Hilbert矩阵

命令Magic(魔方)矩阵

函数magic

格式M=magic(n)%产生n阶魔方矩阵

例1-18

>>M=magic(3)

M=

816

357

492

命令Pascal矩阵

函数pascal

格式A=pascal(n)%产生n阶Pascal矩阵,它是对称、正定矩阵,它的元素由Pascal三角组成,它的逆矩阵的所有元素都是整数。

A=pascal(n,1)%返回由下三角的Cholesky系数组成的Pascal矩阵

A=pascal(n,2)%返回Pascal(n,1)的转置和交换的形式

例1-19

>>A=pascal(4)

A=

1111

1234

13610

141020

>>A=pascal(3,1)

A=

100

1-10

1-21

>>A=pascal(3,2)

A=

111

-2-10

100

1.2矩阵运算

1.2.1加、减运算

运算符:

“+”和“-”分别为加、减运算符。

运算规则:

对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。

例1-22

>>A=[1,1,1;1,2,3;1,3,6]

>>B=[8,1,6;3,5,7;4,9,2]

>>A+B=A+B

>>A-B=A-B

结果显示:

A+B=

927

4710

5128

A-B=

-70-5

-2-3-4

-3-64

1.2.2乘法

运算符:

*

运算规则:

按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。

1.两个矩阵相乘

例1-23

>>X=[2345;

1221];

>>Y=[011;

110;

001;

100];

Z=X*Y

结果显示为:

Z=

856

333

2.矩阵的数乘:

数乘矩阵

上例中:

a=2*X

则显示:

a=

46810

2442

向量的点乘(内积):

维数相同的两个向量的点乘。

数组乘法:

A.*B表示A与B对应元素相乘。

3.向量点积

函数dot

格式C=dot(A,B)%若A、B为向量,则返回向量A与B的点积,A与B长度相同;若为矩阵,则A与B有相同的维数。

C=dot(A,B,dim)%在dim维数中给出A与B的点积

例>>X=[-102];

>>Y=[-2-11];

>>Z=dot(X,Y)

则显示:

Z=

4

还可用另一种算法:

sum(X.*Y)

ans=

4

4.向量叉乘

在数学上,两向量的叉乘是一个过两相交向量的交点且垂直于两向量所在平面的向量。

在Matlab中,用函数cross实现。

函数cross

格式C=cross(A,B)%若A、B为向量,则返回A与B的叉乘,即C=A×B,A、B必须是3个元素的向量;若A、B为矩阵,则返回一个3×n矩阵,其中的列是A与B对应列的叉积,A、B都是3×n矩阵。

C=cross(A,B,dim)%在dim维数中给出向量A与B的叉积。

A和B必须具有相同的维数,size(A,dim)和size(B,dim)必须是3。

例1-24计算垂直于向量(1,2,3)和(4,5,6)的向量。

>>a=[123];

>>b=[456];

>>c=cross(a,b)

结果显示:

c=

-36-3

可得垂直于向量(1,2,3)和(4,5,6)的向量为±(-3,6,-3)

5.混合积

混合积由以上两函数实现:

例1-25计算向量a=(1,2,3)、b=(4,5,6)和c=(-3,6,-3)的混合积

解:

>>a=[123];b=[456];c=[-36-3];

>>x=dot(a,cross(b,c))

结果显示:

x=

54

注意:

先叉乘后点乘,顺序不可颠倒。

6.矩阵的卷积和多项式乘法

函数conv

格式w=conv(u,v)%u、v为向量,其长度可不相同。

说明长度为m的向量序列u和长度为n的向量序列v的卷积(Convolution)定义为:

式中:

w向量序列的长度为(m+n-1),当m=n时,

w

(1)=u

(1)*v

(1)

w

(2)=u

(1)*v

(2)+u

(2)*v

(1)

w(3)=u

(1)*v(3)+u

(2)*v

(2)+u(3)*v

(1)

w(n)=u

(1)*v(n)+u

(2)*v(n-1)+…+u(n)*v

(1)

w(2*n-1)=u(n)*v(n)

例1-26展开多项式

解:

>>w=conv([1,2,2],conv([1,4],[1,1]))

w=

1716188

>>P=poly2str(w,'s')%将w表示成多项式

P=

s^4+7s^3+16s^2+18s+8

7.反褶积(解卷)和多项式除法运算

函数deconv

格式[q,r]=deconv(v,u)%多项式v除以多项式u,返回商多项式q和余多项式r。

注意:

v、u、q、r都是按降幂排列的多项式系数向量。

例1-27,则其卷积为

>>u=[1234]

>>v=[102030]

>>c=conv(u,v)

c=

1040100160170120

则反褶积为

>>[q,r]=deconv(c,u)

q=

102030

r=

000000

1.2.3除法运算

Matlab提供了两种除法运算:

左除(\)和右除(/)。

一般情况下,x=a\b是方程a*x=b的解,而x=b/a是方程x*a=b的解。

例:

a=[123;426;749]

b=[4;1;2];

x=a\b

则显示:

x=

-1.5000

2.0000

0.5000

如果a为非奇异矩阵,则a\b和b/a可通过a的逆矩阵与b阵得到:

a\b=inv(a)*b

b/a=b*inv(a)

数组除法:

A./B表示A中元素与B中元素对应相除。

1.2.4矩阵转置

运算符:

运算规则:

若矩阵A的元素为实数,则与线性代数中矩阵的转置相同。

若A为复数矩阵,则A转置后的元素由A对应元素的共轭复数构成。

若仅希望转置,则用如下命令:

A.′。

1.2.5方阵的行列式

函数det

格式d=det(X)%返回方阵X的多项式的值

例1-42

>>A=[123;456;789]

A=

123

456

789

>>D=det(A)

D=

0

1.2.6逆与伪逆

命令逆

函数inv

格式Y=inv(X)%求方阵X的逆矩阵。

若X为奇异阵或近似奇异阵,将给出警告信息。

例1-43求

的逆矩阵

方法一

>>A=[123;221;343];

>>Y=inv(A)或Y=A^(-1)

则结果显示为

Y=

1.00003.0000-2.0000

-1.5000-3.00002.5000

1.00001.0000-1.0000

1.2.7矩阵的秩

函数rank

格式k=rank(A)%求矩阵A的秩

1.2.8特殊运算

1.矩阵对角线元素的抽取

函数diag

格式X=diag(v,k)%以向量v的元素作为矩阵X的第k条对角线元素,当k=0时,v为X的主对角线;当k>0时,v为上方第k条对角线;当k<0时,v为下方第k条对角线。

X=diag(v)%以v为主对角线元素,其余元素为0构成X。

v=diag(X,k)%抽取X的第k条对角线元素构成向量v。

k=0:

抽取主对角线元素;k>0:

抽取上方第k条对角线元素;k<0抽取下方第k条对角线元素。

v=diag(X)%抽取主对角线元素构成向量v。

例1-46

>>v=[123];

>>x=diag(v,-1)

x=

0000

1000

0200

0030

>>A=[123;456;789]

A=

123

456

789

>>v=diag(A,1)

v=

2

6

2.上三角阵和下三角阵的抽取

函数tril%取下三角部分

格式L=tril(X)%抽取X的主对角线的下三角部分构成矩阵L

L=tril(X,k)%抽取X的第k条对角线的下三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。

函数triu%取上三角部分

格式U=triu(X)%抽取X的主对角线的上三角部分构成矩阵U

U=triu(X,k)%抽取X的第k条对角线的上三角部分;k=0为主对角线;k>0为主对角线以上;k<0为主对角线以下。

例1-47

>>A=ones(4)%产生4阶全1阵

A=

1111

1111

1111

1111

>>L=tril(A,1)%取下三角部分

L=

1100

1110

1111

1111

>>U=triu(A,-1)%取上三角部分

U=

1111

1111

0111

0011

3.矩阵的变维

矩阵的变维有两种方法,即用“:

”和函数“reshape”,前者主要针对2个已知维数矩阵之间的变维操作;而后者是对于一个矩阵的操作。

(1)“:

”变维

例1-48

>A=[123456;678901]

A=

123456

678901

>>B=ones(3,4)

B=

1111

1111

1111

>>B(:

)=A(:

B=

1740

6396

2851

(2)Reshape函数变维

格式B=reshape(A,m,n)%返回以矩阵A的元素构成的m×n矩阵B

B=reshape(A,siz)%由siz决定变维的大小,元素个数与A中元素个数

相同。

例1-49矩阵变维

>>a=[1:

12];

>>b=reshape(a,2,6)

b=

1357911

24681012

4.矩阵的变向

(1)矩阵旋转

函数

格式B=rot90(A)%将矩阵A逆时针方向旋转90°

B=rot90(A,k)%将矩阵A逆时针方向旋转(k×90°),k可取正负整数。

例1-50

>>A=[123;456;789]

A=

123

456

789

>>Y1=rot90(A),Y2=rot90(A,-1)

Y1=%逆时针方向旋转

369

258

147

Y2=%顺时针方向旋转

741

852

963

(2)矩阵的左右翻转

函数fliplr

格式B=fliplr(A)%将矩阵A左右翻转

(3)矩阵的上下翻转

函数flipud

格式B=flipud(A)%将矩阵A上下翻转

例1-51

>>A=[123;456]

A=

123

456

>>B1=fliplr(A),B2=flipud(A)

B1=

321

654

B2=

456

123

(4)按指定维数翻转矩阵

65656

5.矩阵元素的数据变换

对于小数构成的矩阵A来说,如果我们想对它取整数,有以下几种方法:

(1)按-∞方向取整

函数floor

格式floor(A)%将A中元素按-∞方向取整,即取不足整数。

(2)按+∞方向取整

函数ceil

格式ceil(A)%将A中元素按+∞方向取整,即取过剩整数。

(3)四舍五入取整

函数round

格式round(A)%将A中元素按最近的整数取整,即四舍五入取整。

(4)按离0近的方向取整

函数fix

格式fix(A)%将A中元素按离0近的方向取整

例1-55

>>A=-1.5+4*rand(3)

A=

2.30050.44390.3259

-0.57542.0652-1.4260

0.92741.54841.7856

>>B1=floor(A),B2=ceil(A),B3=round(A),B4=fix(A)

B1=

200

-12-2

011

B2=

311

03-1

122

B3=

200

-12-1

122

B4=

200

02-1

011

(6)矩阵元素的余数

函数rem

格式C=rem(A,x)%表

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 人力资源管理

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1