矩阵及字符串运算.docx

上传人:b****3 文档编号:3521577 上传时间:2022-11-23 格式:DOCX 页数:34 大小:43.37KB
下载 相关 举报
矩阵及字符串运算.docx_第1页
第1页 / 共34页
矩阵及字符串运算.docx_第2页
第2页 / 共34页
矩阵及字符串运算.docx_第3页
第3页 / 共34页
矩阵及字符串运算.docx_第4页
第4页 / 共34页
矩阵及字符串运算.docx_第5页
第5页 / 共34页
点击查看更多>>
下载资源
资源描述

矩阵及字符串运算.docx

《矩阵及字符串运算.docx》由会员分享,可在线阅读,更多相关《矩阵及字符串运算.docx(34页珍藏版)》请在冰豆网上搜索。

矩阵及字符串运算.docx

矩阵及字符串运算

三MATLAB矩阵及运算

3.1MATLAB矩阵的生成和修改

3.1.1矩阵的生成

1.直接输入数据

当需要输入的矩阵维数比较小时,可以直接输入数据建立矩阵。

矩阵数据(或矩阵元素)的输入格式如下:

(1)输入矩阵时要以“[]”作为首尾符号,矩阵的数据应放在“[]”内部,此时MATLAB才能将其识别为矩阵;

(2)要逐行输入矩阵的数据,同行数据之间可由空格或“,”分隔,行与行之间可用“;”或回车符分隔;

(3)矩阵数据可为运算表达式;

(4)矩阵大小可不预先定义;

(5)如果不想显示输入的矩阵(作为中间结果),可以在矩阵输入完成后以“;”结束;

(6)无任何元素的空矩阵也合法。

【例3.1】a=[125]和a=[1,2,5]为同一矩阵;

b=[3;2;5]和b=[3

2

5]为同一矩阵。

【例3.2】建立矩阵并显示结果。

>>X=[1,2,3;4,5,6;7,8,3*3]

X=

123

456

789

2.由矩阵编辑器生成

MATLAB提供了一个矩阵编辑器,用户可以用来创建和修改比较大的矩阵。

在使用矩阵编辑器之前,需要预先定义一个变量(任意的),如上例3.1所示的3×3矩阵X。

接下来,按下列步骤进行操作:

(1)选中所定义的变量,打开矩阵编辑器,如图3.1所示;

(2)将文本框size中的数据3by3改变成欲生成矩阵的行数和列数,回车后就能看到窗口中矩阵的维数立刻发生改变;

图3.1

(3)在窗口中矩阵元素的位置上输入或修改数据,回车后自动提示输入下一行矩阵元素的数据,矩阵元素的输入顺序是按列自动进行的;

图3.2

(4)输入完成后,关闭编辑器,变量X就定义保存好了。

3.由函数自动生成

MATLAB提供了一些生成矩阵的函数,用户可以方便地用他们建立自己所需要的矩阵。

(1)向量、行矩阵、列矩阵的自动生成

用“起始值:

增量值:

终止值”的格式自动生成等差数列。

【例3.3】>>x=(1:

1:

10)%表示“起始值:

增量值:

终止值”,

增量为1时可表示成“起始值:

终止值”,即x=(1:

10)或x=1:

10。

x=

12345678910

>>x=1:

1:

10

x=

12345678910

>>I=1:

15

I=

123456789101112131415

用“linspace(起始值:

终止值:

元素数目)”的格式自动生成等差数列;用“logspace(起始值:

终止值:

元素数目)”的格式自动生成对数等分数列。

【例3.4】>>y=linspace(30,50,11)

y=

3032343638404244464850

列矩阵的生成格式如下:

【例3.5】>>x=(1:

1:

10)';

>>y=linspace(90,95,6)'

y=

90

91

92

93

94

95

(2)其它矩阵的自动生成

MATLAB提供了许多特殊矩阵的生成函数,如零矩阵zeros(m,n),全部元素为1的矩阵ones(m,n),单位矩阵eye(n),随机矩阵rand(m,n)和魔方矩阵magic(n)等,利用这些矩阵可以生成所需要的矩阵。

【例3.6】特殊矩阵的生成。

>>a=[]%定义空矩阵,即0×0矩阵。

a=

[]

>>zeros(2,2);%定义全为0的矩阵(22的阵列)。

>>ones(3,3);%定义全为1的矩阵(33的阵列)。

>>rand(2,6)%定义随机矩阵(26的矩阵)。

ans=

0.22590.76040.64050.37980.68080.5678

0.57980.52980.20910.78330.46110.7942

>>rand(2,6)%第二次运行结果。

ans=

0.95010.60680.89130.45650.82140.6154

0.23110.48600.76210.01850.44470.7919

>>magic(4)

ans=

162313

511108

97612

414151

3.1.2矩阵的修改

1.矩阵元素的修改

欲修改矩阵中某个元素的数值,应该先确定该元素的位置,再用赋值语句来实现。

根据矩阵的行列数和元素在矩阵中的存储顺序,可以确定出欲修改元素的位置。

【例3.7】根据元素在矩阵中的存储顺序来确定矩阵元素的位置,再对元素的数值进行修改。

>>a=[12345678];%定义一维1x8阵列,表示了8个元素,每个向量由一个分量构成。

>>x=[12345678;4567891011];%定义2×8矩阵,以分号“;”隔离各列元素,该矩阵表示了每个向量由2个分量构成的8个向量的多维空间

>>x(3)%找出x的第三个元素,即该矩阵的元素(1,2)。

ans=

2

>>x([125])%找出x的第一、二、五个元素,即2×8矩阵中的元

%素(1,1)、(2,1)和(1,3)。

ans=

143

>>x(1:

5)%找出x的前五个元素即第1个到第五个元素。

ans=

14253

>>x(10:

end)%x的第十个元素后的元素,包括第10个元素。

ans=

869710811

>>x(10:

-1:

2)%x的第十个元素和第二个元素的倒排。

括号中用“:

”隔开的3个参数的含义是:

第一个参数表示起始的元素序号,第二个参数表示递增或递减(-)的元素数,第三个参数表示终止元素序号。

ans=

857463524

>>x(find(x>=10))%找出在x大于等于10的元素,也表达为x(x>=10)。

ans=

10

11

>>

>>x(4)=100%给x的第四个元素重新赋值

x=

12345678

410067891011

>>x(3)=[]%删除第三个元素,注意矩阵变成了1×15矩阵。

x=

1410036475869710811

>>x(16)=99%添加一个元素(加入第十六个元素)。

x=

141003647586971081199

在MATLAB的内部数据结构中,每一个矩阵都是一个以纵列为主(Column-oriented)的阵列(Array)因此,对于矩阵元素的存取,我们可用一维或二维的索引(Index)来定址。

【例3.8】根据矩阵行列数来确定矩阵元素的位置,再对元素的数值进行修改。

>>z=rand(2,5)

z=

0.62990.57510.04390.31270.3840

0.37050.45140.02720.01290.6831

>>z(2,3)

ans=

0.0272

>>z(2,3)=0

z=

0.62990.57510.04390.31270.3840

0.37050.451400.01290.6831

2.矩阵行列的修改

A(m,n)表示矩阵第m行第n列的元素,中间有“,”将行和列分开。

若要同时表示更多的矩阵元素,可以采用下列表示方法:

A(I,:

)表示矩阵A第I行全部的元素;

A(:

J)表示矩阵A第J列全部的元素;

A([1,3],[2,4])表示矩阵A第1行、第3行与第2列、第4列交叉处的元素;

A([1:

3],[2:

4])表示矩阵A第1行到第3行与第2列到第4列交叉处的元素,

也可以写成另外两种形式:

A((1:

3),(2:

4))和A(1:

3,2:

4)。

有了矩阵多个元素的表示方法,就可以方便地进行矩阵行和列的修改。

【例3.9】矩阵行列的修改。

>>a=rand(4,5)

a=

0.09280.01580.05760.69270.3533

0.03530.01640.36760.08410.1536

0.61240.19010.63150.45440.6756

0.60850.58690.71760.44180.6992

>>a(2,:

ans=

0.03530.01640.36760.08410.1536

>>a([1:

3],[2:

4])=0

a=

0.09280000.3533

0.03530000.1536

0.61240000.6756

0.60850.58690.71760.44180.6992

>>a([1,3],[2,4])=1

a=

0.09281.000001.00000.3533

0.03530000.1536

0.61241.000001.00000.6756

0.60850.58690.71760.44180.6992

>>a(4,:

)=[]%删除一行元素(第4行)。

a=

0.09281.000001.00000.3533

0.03530000.1536

0.61241.000001.00000.6756

>>a(:

6)=[10;20;30]%增加一列元素(第6列)。

a=

0.09281.000001.00000.353310.0000

0.03530000.153620.0000

0.61241.000001.00000.675630.0000

3.子矩阵

可以由一个矩阵抽取生成一个子矩阵,或者由几个子矩阵组合生成一个新矩阵。

【例3.10】矩阵抽取生成子矩阵,子矩阵组合生成新矩阵。

>>a=rand(2,3)

a=

0.89280.25480.2324

0.27310.86560.8049

>>b=ones(2,5)

b=

11111

11111

>>c=magic(5)

c=

17241815

23571416

46132022

101219213

11182529

>>x=[a,b]

x=

0.89280.25480.23241.00001.00001.00001.00001.0000

0.27310.86560.80491.00001.00001.00001.00001.0000

>>d=c(2,2:

4)

d=

5714

>>y=[a;d]

y=

0.89280.25480.2324

0.27310.86560.8049

5.00007.000014.0000

3.2MATLAB矩阵的保存与提取

在数值计算过程中,经常有大量的矩阵需要保存和再次使用时提取,因此有必要把数据保存于文件中。

在MATLAB中可以使用mat文件来保存二进制的数据。

具体步骤如下:

(1)保存矩阵。

如果A,B矩阵都已存在,用save命令保存,具体格式如下:

savemyfilenameAB

注意:

myfilename是用户自定义的文件名,MATLAB系统会自动地加上后缀mat。

系统默认的路径是MATLAB6p5\work。

如果用户想要改变路径,可以在文件名前加上路径。

(2)提取矩阵。

在重新启动MATLAB后,用load命令可以将保存在文件中的矩阵读到MATLAB工作区的内存中来。

loadmyfilename

load命令中不指定变量名,系统仍然将A,B作为矩阵的名称来使用。

对矩阵的保存与提取,用户也可以在工作空间窗口中使用保存与打开两个按钮来操作,在概述中已介绍过。

3.3MATLAB的向量运算

向量就是一维矩阵(行矩阵或列矩阵),并按照矢量运算的规则进行运算。

但应注意,在一些场合,向量仅仅是指一维矩阵或矩阵的某一列。

本节对向量的基本运算作简单介绍。

3.3.1加减及与数加减

【例3.11】向量的加减及与数加减。

>>a=[1,3,5,7,9,11],b=[2,4,6,8,10,12]

a=

1357911

b=

24681012

>>c=a+b

c=

3711151923

>>d=a-1

d=

0246810

3.3.2数乘

【例3.12】向量的数乘。

a,b向量同上例。

>>3*b

ans=

61218243036

3.3.3点积、叉积及混合积

1.点积计算

在高等数学中,向量的点积是指两个向量在其中某一个向量方向上的投影的乘积,在MATLAB中,向量的点积可由函数dot来实现。

dot(a,b)返回向量a和b的数量点积。

a和b必须同维。

当a和b都为列向量时,dot(a,b)同于a'*b;

dot(a,b,dim)返回a和b在维数为dim的点积。

【例3.13】试计算向量a=(1,2,3)和向量b=(3,4,5)的点积。

>>a=[123];

>>b=[345];

>>dot(a,b)

ans=

26

还可以用另一种方法计算向量的点积。

>>sum(a.*b)

ans=

26

或a*(b’)

2.叉积计算

在数学上,向量的叉积表示过两相交向量的交点、垂直于两向量所在平面的向量。

在MATLAB中,向量的叉积由函数cross来实现。

c=cross(a,b)返回向量a和b的叉积向量c=a×b。

a和b必须为三维向量。

c=cross(a,b,dim)当a和b为n维数组时,则返回a和b的dim维向量的叉积。

a和b必须有相同的维数,且size(a,dim)和size(b,dim)必须为3。

(略)

【例3.14】计算垂直于向量a=(5,2,3)和b=(3,4,5)的向量。

>>a=[523];b=[345];

>>c=cross(a,b)

c=

-2-1614

3.混合积计算

在MATLAB中,向量的混合积由以上两个函数实现。

【例3.15】计算上例中向量a,b,c的混合积。

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

ans=

456

注意函数的顺序不可颠倒,否则将会出现错误。

3.4MATLAB的矩阵运算

矩阵运算是MATLAB语言最重要和最具有特色的内容之一,是编程进行科学计算的重要基础。

矩阵的运算包括矩阵的基本数学运算和矩阵的函数运算。

3.4.1矩阵的基本运算

矩阵的基本数学运算包括矩阵的算术运算、与常数的运算、转置运算、逆运算、行列式运算、幂运算等。

1.算术运算

矩阵的算术运算是指矩阵之间的加、减、乘、除、幂等运算,表3.1给出了矩阵算术运算对应的运算符和MATLAB表达式。

表3.1经典的算术运算符

经典的算术运算符

名称

运算符

MATLAB表达式

+

a+b

-

a-b

*

a*b

/或\

a/b或a\b

^

a^n

矩阵进行加减运算时,相加减的矩阵必须是同阶的;矩阵进行乘法运算时,相乘的矩阵要有相邻公共维,即若A为i×j阶,则B必须为j×k阶,此时A和B才可以相乘。

常数与矩阵的运算,是常数同矩阵的各元素之间进行运算,如数加是指矩阵的每个元素都加上此常数,数乘是指矩阵的每个元素都与此常数相乘。

需要注意的是,当进行数除时,常数通常只能做除数。

在线性代数中,矩阵没有除法运算,只有逆矩阵。

矩阵除法运算是MATLAB从逆矩阵的概念引申而来,主要用于解线性方程组。

方程A*X=B,设X为未知矩阵,在等式两边同时左乘inv(A),即

inv(A)*A*X=inv(A)*B

X=inv(A)*B=A\B

把A的逆矩阵左乘以B,MATLAB就记为A\,称之为“左除”。

A、B两矩阵的行数必须相等。

如果方程的未知数矩阵在左,系数矩阵在右,即X*A=B,同样有

X=B*inv(A)=B/A

把A的逆矩阵右乘以B,MATLAB就记为/A,称之为“右除”。

A、B两矩阵的列数必须相等。

【例3.16】已知A*X=B,Y*C=D,A=[1,2;3,4],B=[4;10],C=[1,3;2,4],D=[4,10],计算未知数矩阵X和Y。

>>a=[1,2;3,4];b=[4;10];c=[1,3;2,4];d=[4,10];

>>x=a\b

x=

2.0000

1.0000

>>y=d/c

y=

2.00001.0000

在MATLAB中,进行矩阵的幂运算时,矩阵可以作为底数,指数是标量,矩阵必须是方阵;矩阵也可以作为指数,底数是标量,矩阵也必须是方阵;但矩阵和指数不能同时为矩阵,否则将显示错误信息。

【例3.17】矩阵的幂运算。

>>a

a=

12

34

>>a^2%n为正整数,a^n表示矩阵a自乘n次。

ans=

710

1522

>>a^(-2)%n为负整数,a^n表示矩阵a自乘n次的逆。

ans=

5.5000-2.5000

-3.75001.7500

>>inv(a^2)

ans=

5.5000-2.5000

-3.75001.7500

>>2^a(略)

ans=

10.482714.1519

21.227831.7106

>>2.^a

ans=

24

816

2.转置运算

在MATLAB中,矩阵转置运算的表达式和线性代数一样,即对于矩阵A,其转置矩阵的MATLAB表达式为A'。

但应该注意,在MATLAB中,有几种类似于转置运算的矩阵元素变换运算是线性代数中没有的,他们是:

fliplr(X)将X左右翻转;

flipud(X)将X上下翻转;

rot90(A)将A逆时针方向旋转90。

3.逆矩阵运算

矩阵的逆运算是矩阵运算中很重要的一种运算。

它在线性代数及计算方法中都有很多的论述,而在MATLAB中,众多的复杂理论只变成了一个简单的命令inv。

【例3.18】矩阵的逆运算。

>>a

a=

10212

3424

98346

>>inv(a)

ans=

-0.01160.0372-0.0015

0.0176-0.10470.0345

0.0901-0.0135-0.0045

4.行列式和秩运算

矩阵的行列式的值由det函数计算得出;矩阵的秩由rank函数来计算。

【例3.19】计算矩阵行列式的值和矩阵的秩。

>>A=

115

225

335

>>rank(A)

ans=

2

>>det(A)

ans=

0

3.4.2矩阵的函数运算(略)

矩阵的函数运算包括基本的数学函数运算、矩阵专门的函数运算以及矩阵的分解运算等内容。

1.数学函数运算(略)

在MATLAB中,指数函数expm、对数函数logm、开方函数sqrtm是把矩阵作为一个整体进行运算的,即所谓的矩阵运算;其它数学函数都是对矩阵的元素分别进行运算的,即所谓的阵列运算。

因此,MATLAB基本函数库中的大部分常用函数都适合于阵列运算,此时矩阵可以是任意阶。

【例3.20】>>e=eye

(2);

>>logm(e)

ans=

00

00

>>e=ones

(2);

>>expm(e)

ans=

4.19453.1945

3.19454.1945

>>sqrtm(e)

ans=

0.70710.7071

0.70710.7071

>>a=[0,pi/6,pi/3,pi/2];b=[-1,0,1];

>>sin(a)

ans=

00.50000.86601.0000

>>exp(b)

ans=

0.36791.00002.7183

>>sign(a)

ans=

0111

>>mean(b)

ans=

0

在实际运算中,对其他常用函数的矩阵运算,如三角函数运算和双曲函数运算等,可以采用通用函数形式。

在MATLAB中使用通用函数的格式为funm(A,'funname'),其中A为输入矩阵变量,funname为调用的函数名。

如funm(b,'log')等同于1ogm(b),funm(b,'sqrt')等同于sqrtm(b),而funm(b,'sin'),其作用等同于矩阵b的正弦运算。

【例3.21】>>e=ones

(2);

>>funm(e,'sin')

ans=

0.45460.4546

0.45460.4546

>>sin(e)

ans=

0.84150.8415

0.84150.8415

2.矩阵函数运算(略)

矩阵函数的运算主要包括特征值的计算,奇异值的计算,条件数、各类范数、矩阵迹的计算和矩阵的空间运算等。

这里只介绍部分常用的矩阵函数。

表3.2常用的矩阵函数命令

函数名称

功能简介

cond(A)

矩阵A的条件数

det(A)

方阵A的行列式值

dot(A,B)

矩阵A,B的点积

eig(A)

方阵A的特征值和特征向量

norm(A,1)

矩阵A的1-范数

norm(A)或norm(A,2)

矩阵A的2-范数

norm(A,inf)

矩阵A的无穷大-范数

norm(A,'fro')

矩阵A的F-范数

rank(A)

矩阵A的秩

rcond(A)

矩阵A的倒条件数

svd(A)

矩阵A的奇异值分解

trace(A)

矩阵A的迹

expm(A)

矩阵的指数eA

expml(A)

用Pade法求矩阵的指数eA

expm2(A)

用Taylor级数求矩阵的指数eA,精度差,对任何矩阵都适用

expm3(A)

用特征值和特征向量求矩阵的指数eA,仅当独立特征向量个数等于矩阵秩时适用

logm(A)

求矩阵A的对数

sqrtm(A)

求矩阵的平方根

funm(A,'fun')

一般的方阵函数

(1)求矩阵的维数和长度的函数(了解)

【例3.22】>>a=[10,2,12;34,2,4;98,34,6];

>>size(a)%求矩阵的维数(columns&rows)。

ans=

33

>>length(a)%

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

当前位置:首页 > 党团工作 > 其它

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

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