MbookMATLAB2数值计算.docx

上传人:b****3 文档编号:11561081 上传时间:2023-06-01 格式:DOCX 页数:74 大小:268.50KB
下载 相关 举报
MbookMATLAB2数值计算.docx_第1页
第1页 / 共74页
MbookMATLAB2数值计算.docx_第2页
第2页 / 共74页
MbookMATLAB2数值计算.docx_第3页
第3页 / 共74页
MbookMATLAB2数值计算.docx_第4页
第4页 / 共74页
MbookMATLAB2数值计算.docx_第5页
第5页 / 共74页
MbookMATLAB2数值计算.docx_第6页
第6页 / 共74页
MbookMATLAB2数值计算.docx_第7页
第7页 / 共74页
MbookMATLAB2数值计算.docx_第8页
第8页 / 共74页
MbookMATLAB2数值计算.docx_第9页
第9页 / 共74页
MbookMATLAB2数值计算.docx_第10页
第10页 / 共74页
MbookMATLAB2数值计算.docx_第11页
第11页 / 共74页
MbookMATLAB2数值计算.docx_第12页
第12页 / 共74页
MbookMATLAB2数值计算.docx_第13页
第13页 / 共74页
MbookMATLAB2数值计算.docx_第14页
第14页 / 共74页
MbookMATLAB2数值计算.docx_第15页
第15页 / 共74页
MbookMATLAB2数值计算.docx_第16页
第16页 / 共74页
MbookMATLAB2数值计算.docx_第17页
第17页 / 共74页
MbookMATLAB2数值计算.docx_第18页
第18页 / 共74页
MbookMATLAB2数值计算.docx_第19页
第19页 / 共74页
MbookMATLAB2数值计算.docx_第20页
第20页 / 共74页
亲,该文档总共74页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

MbookMATLAB2数值计算.docx

《MbookMATLAB2数值计算.docx》由会员分享,可在线阅读,更多相关《MbookMATLAB2数值计算.docx(74页珍藏版)》请在冰点文库上搜索。

MbookMATLAB2数值计算.docx

MbookMATLAB2数值计算

第2章MATLAB数值计算

MATLAB的数学计算=数值计算+符号计算

其中符号计算是指使用未定义的符号变量进行运算,而数值计算不允许使用未定义的变量。

2.1变量和数据

2.1.1数据类型

数据类型包括:

数值型、字符串型、元胞型、结构型等

数值型=双精度型、单精度型和整数类

整数类=无符号类(uint8、uint16、uint32、uint64)和符号类整数(int8、int16、int32、int64)。

2.1.2数据

1.数据的表达方式

▪可以用带小数点的形式直接表示

▪用科学计数法

▪数值的表示范围是10-309~10309。

以下都是合法的数据表示:

-2、5.67、2.56e-56(表示2.56×10-56)、4.68e204(表示4.68×10204)

2.矩阵和数组的概念

在MATLAB的运算中,经常要使用标量、向量、矩阵和数组,这几个名称的定义如下:

▪标量:

是指1×1的矩阵,即为只含一个数的矩阵。

▪向量:

是指1×n或n×1的矩阵,即只有一行或者一列的矩阵。

▪矩阵:

是一个矩形的数组,即二维数组,其中向量和标量都是矩阵的特例,0×0矩阵为空矩阵([])。

▪数组:

是指n维的数组,为矩阵的延伸,其中矩阵和向量都是数组的特例。

3.复数

复数由实部和虚部组成,MATLAB用特殊变量“i”和“j”表示虚数的单位。

复数运算不需要特殊处理,可以直接进行。

复数可以有几种表示:

z=a+b*i或z=a+b*j

z=a+bi或z=a+bj(当b为标量时)

z=r*exp(i*theta)

●得出一个复数的实部、虚部、幅值和相角。

a=real(z)%计算实部

b=imag(z)%计算虚部

r=abs(z)%计算幅值

theta=angle(z)%计算相角

说明:

复数z的实部a=r*cos(θ);

复数z的虚部b=r*sin(θ);

复数z的幅值

复数z的相角theta=arctg(b/a),以弧度为单位。

a=1-2*i

a=

1.0000-2.0000i

real(a)

ans=

1

imag(a)

ans=

-2

abs(a)

ans=

2.2361

angle(a)*180/pi%以角度为单位计算相角

ans=

-63.4349

2.1.3变量

1.变量的命名规则

▪变量名区分字母的大小写。

例如,“a”和“A”是不同的变量。

▪变量名不能超过63个字符,第63个字符后的字符被忽略,对于MATLAB6.5版以前的变量名不能超过31个字符。

▪变量名必须以字母开头,变量名的组成可以是任意字母、数字或者下划线,但不能含有空格和标点符号(如,。

%等)。

例如,“6ABC”、“AB%C”都是不合法的变量名。

▪关键字(如if、while等)不能作为变量名。

2.特殊变量

MATLAB有一些自己的特殊变量,当MATLAB启动时驻留在内存。

表2.1特殊变量表

特殊变量

取值

ans

运算结果的默认变量名

pi

圆周率π

eps

计算机的最小数

flops

浮点运算数

inf

无穷大,如1/0

NaN或nan

非数,如0/0、∞/∞、0×∞

i或j

i=j=

nargin

函数的输入变量数目

nargout

函数的输出变量数目

realmin

最小的可用正实数

realmax

最大的可用正实数

●在MATLAB中系统将计算的结果自动赋给名为“ans”的变量。

2*pi

ans=

6.2832

2.2矩阵和数组

MATLAB最基本也是最重要的功能就是进行实数或复数矩阵的运算。

2.2.1矩阵输入

(1)矩阵元素应用方括号([])括住;

(2)每行内的元素间用逗号或空格隔开;

(3)行与行之间用分号或回车键隔开;

(4)元素可以是数值或表达式。

1.通过显式元素列表输入矩阵

c=[12;34;53*2]%[]表示构成矩阵,分号分隔行,空格分隔元素

c=

12

34

56

用回车键代替分号分隔行:

c=[12

34

56]

12

34

56

2.通过语句生成矩阵

(1)使用from:

step:

to方式生成向量

from:

to

from:

step:

to

说明:

from、step和to分别表示开始值、步长和结束值。

当step省略时则默认为step=1;

当step省略或step>0而from>to时为空矩阵,当step<0而from

【例2.1】使用“from:

step:

to”方式生成以下矩阵。

x1=2:

5

x1=

2345

x2=2:

0.5:

4

x2=

2.00002.50003.00003.50004.0000

x3=5:

-1:

2

x3=

5432

x4=2:

-1:

3%空矩阵

x4=

Emptymatrix:

1-by-0

x5=2:

-1:

0.5

x5=

21

x6=[1:

2:

5;1:

3:

7]%两行向量构成矩阵

x6=

135

147

(2)使用linspace和logspace函数生成向量

linspace(a,b,n)

说明:

a、b、n三个参数分别表示开始值、结束值和元素个数。

生成从a到b之间线性分布的n个元素的行向量,n如果省略则默认值为100。

▪logspace用来生成对数等分向量,它和linspace一样直接给出元素的个数而得出各个元素的值。

logspace(a,b,n)

说明:

a、b、n三个参数分别表示开始值、结束值和数据个数,n如果省略则默认值为50。

生成从10a到10b之间按对数等分的n个元素的行向量。

【例2.2】用linspace和logspace函数生成行向量。

x1=linspace(0,2*pi,5)%从0到2*pi等分成5个点

x1=

01.57083.14164.71246.2832

x2=logspace(0,2,3)%从1到100对数等分成3个点

x2=

110100

3.由矩阵生成函数产生特殊矩阵

MATLAB提供了很多能够产生特殊矩阵的函数,各函数的功能如表2.2所示。

表2.2矩阵生成函数

函数名

功能

例子

输入

结果

zeros(m,n)

产生m×n的全0矩阵

zeros(2,3)

ans=

000

000

ones(m,n)

产生m×n的全1矩阵

ones(2,3)

ans=

111

111

rand(m,n)

产生均匀分布的随机矩阵,元素取值范围0.0~1.0。

rand(2,3)

ans=

0.95010.60680.8913

0.23110.48600.7621

randn(m,n)

产生正态分布的随机矩阵

randn(2,3)

ans=

-0.43260.1253-1.1465

-1.66560.28771.1909

magic(N)

产生N阶魔方矩阵(矩阵的行、列和对角线上元素的和相等)

magic(3)

ans=

816

357

492

eye(m,n)

产生m×n的单位矩阵

eye(3)

ans=

100

010

001

注意:

zeros、ones、rand、randn和eye函数当只有一个参数n时,则为n×n的方阵;

当eye(m,n)函数的m和n参数不相等时则单位矩阵会出现全0行或列。

【例2.3】查看eye函数的功能。

X1=eye(2,3)

X1=

100

010

X2=eye(3,2)

X2=

10

01

00

4.通过MAT数据文件加载矩阵

通过“load”命令或选择菜单“File”→“ImportData”命令加载MAT数据文件来创建矩阵。

5.在M文件中创建矩阵

M文件实际上是一种包含MATLAB代码的文本文件;

通过在MATLAB命令窗口中运行M文件创建矩阵。

2.2.2矩阵元素和操作

矩阵和多维数组都是由多个元素组成的,每个元素通过下标来标识。

1.矩阵的下标

(1)全下标方式

矩阵中的元素可以用全下标方式标识,即由行下标和列下标表示,一个m×n的a矩阵的第i行第j列的元素表示为a(i,j)。

注意:

●如果在提取矩阵元素值时,矩阵元素的下标行或列(i,j)大于矩阵的大小(m,n),则MATLAB会提示出错;

●而在给矩阵元素赋值时,如果行或列(i,j)超出矩阵的大小(m,n),则MATLAB自动扩充矩阵,扩充部分以0填充。

a=[12;34;56]

a=

12

34

56

a(3,3)%提取a(3,3)的值

?

?

?

Indexexceedsmatrixdimensions.

a(3,3)=9%给a(3,3)赋值

a=

120

340

569

(2)单下标方式

先把矩阵的所有列按先左后右的次序连接成“一维长列”,然后对元素位置进行编号。

以m×n的矩阵a为例,若元素a(i,j)则对应的“单下标”为s=(i-1)×m+j。

2.子矩阵块的产生

子矩阵是从对应矩阵中取出一部分元素构成,用全下标和单下标方式取子矩阵。

(1)用全下标方式

矩阵a为图2.2所示,则:

▪取行数为1、3,列数为2、3的元素构成子矩阵。

a([13],[23])

ans=

20

69

▪取行数为1~3,列数为2~3的元素构成子矩阵,“1:

3”表示1、2、3行下标。

a(1:

3,2:

3)

ans=

20

40

69

▪取所有行数即为1~3,列数为3的元素构成子矩阵,“:

”表示所有行或列。

a(:

3)

ans=

0

0

9

▪取行数为1~3,列数为3的元素构成子矩阵,用“end”表示某一维数中的最大值,即3。

a(1:

3,end)

ans=

0

0

9

(2)用单下标方式

取单下标为1、3、2、6的元素构成子矩阵。

a([13;26])

ans=

15

36

(3)逻辑矩阵

子矩阵也可以利用逻辑矩阵来标识;

逻辑矩阵是大小和对应矩阵相同,而元素值为0或者1的矩阵。

可以用a(L1,L2)来表示子矩阵,其中L1、L2为逻辑向量,当L1、L2的元素为0则不取该位置元素,反之则取该位置的元素。

【例2.5】利用逻辑矩阵来提取矩阵,其中矩阵a如上图2.2所示。

l1=logical([101])%给出逻辑向量l1

l1=

101

l2=logical([110])%给出逻辑向量l2

l2=

110

a(l1,l2)%取出1、3行且1、2列的元素

ans=

12

56

【例2.5续】逻辑矩阵可以由矩阵进行逻辑运算得出。

b=a>1%得出逻辑向量b

b=

010

110

111

a(b)%按单下标顺序排成长列

ans=

3

5

2

4

6

9

3.矩阵的赋值

▪全下标方式:

a(i,j)=b,给a矩阵的部分元素赋值则b矩阵的行列数必须等于a矩阵的行列数。

cleara

a(1:

2,1:

3)=[111;111]%给第一、二行元素赋值为全1

a=

111

111

▪单下标方式:

a(s)=b,b为向量,元素个数必须等于a矩阵的元素个数。

a(5:

6)=[23]%给第5、6元素赋值

a=

112

113

▪全元素方式:

a(:

)=b,给a矩阵的所有元素赋值则b矩阵的元素总数必须等于a矩阵的元素总数,但行列数不一定相等。

a=[12;34;56]

a=

12

34

56

b=[123;456]

b=

123

456

a(:

)=b%按单下标方式给a赋值

a=

15

43

26

4.矩阵元素的删除

删除操作就是简单地将其赋值为空矩阵(用[]表示)。

a=[120;340;569]

a=

120

340

569

a(:

3)=[]%删除一列元素

a=

12

34

56

a

(1)=[]%删除一个元素,则矩阵变为行向量

a=

35246

a=[]%删除所有元素为空矩阵

a=

[]

5.生成大矩阵

在MATLAB中,可以通过方括号“[]”实现将小矩阵联接起来生成一个较大的矩阵。

a=[120;340;569]

a=

120

340

569

[a;a]%联接成6×3的矩阵

ans=

120

340

569

120

340

569

a=[120;340;569]

[aa]%联接成3×6的矩阵

ans=

120120

340340

569569

a=[120;340;569]

[a(1:

2,1:

2)10*a(1:

2,2:

3)]%计算并联接

ans=

12200

34400

6.矩阵的翻转

a=

120

340

569

表2.3常用矩阵翻转函数

函数名

功能

例子

输入

结果

triu(X)

产生X矩阵的上三角矩阵,其余元素补0。

triu(a)

ans=

120

040

009

tril(X)

产生X矩阵的下三角矩阵,其余元素补0。

tril(a)

ans=

100

340

569

flipud(X)

使矩阵X沿水平轴上下翻转

flipud(a)

ans=

569

340

120

fliplr(X)

使矩阵X沿垂直轴左右翻转

fliplr(a)

ans=

021

043

965

flipdim(X,dim)

使矩阵X沿特定轴翻转。

dim=1,按行维翻转;

dim=2,按列维翻转。

flipdim(a,1)

ans=

569

340

120

rot90(X)

使矩阵X逆时针旋转900

rot90(a)

ans=

009

246

135

2.2.3字符串

在MATLAB中,字符串是作为字符数组来引入的;

一个字符串由多个字符组成,用单引号(’’)来界定;

字符串是按行向量进行存储的,每一字符(包括空格)是以其ASCII码的形式存放。

clear

str1='Hello'

str1=

Hello

str2='Ilike''MATLAB'''%重复单引号来输入含有单引号的字符串

str2=

Ilike'MATLAB'

str3='你好!

'%支持中文

str3=

你好!

1.字符串占用的字节

whos

NameSizeBytesClass

str11x510chararray

str21x1530chararray

str31x36chararray

Grandtotalis23elementsusing46bytes

2.字符串函数

▪length:

用来计算字符串的长度(即组成字符的个数)。

▪double:

用来查看字符串的ASCII码储存内容,包括空格(ASCII码为32)。

▪char:

用来将ASCII码转换成字符串形式。

▪class或ischar:

用来判断某一个变量是否为字符串。

class函数返回char则表示为字符串,而ischar函数返回1表示为字符串。

▪strcmp(x,y):

比较字符串x和y的内容是否相同。

返回值如果为1则相同,为0则不同。

▪findstr(x,x1):

寻找在某个长字符串x中的子字符串x1,返回其起始位置。

▪deblank(x):

删除字符串尾部的空格。

由于MATLAB将字符串以其相对应的ASCII码储存成一个行向量,因此如果字符串直接进行数值运算,则其结果就变成一般数值向量的运算,而不再是字符串的运算。

length(str1)%字符串长度

ans=

5

x1=double(str1)%查看字符串的ASCII码

x1=

72101108108111

x2=str1+1%字符串的数值运算

x2=

73102109109112

char(x1)%将ASCII码转换成字符串形式

ans=

Hello

char(x2)

ans=

Ifmmp

class(str1)%判断变量类型

ans=

char

class(x1)

ans=

double

ischar(str1)

ans=

1

3.使用一个变量来储存多个字符串

(1)多个字符串组成一个新的行向量

将多个字符串变量直接用“,”连接,构成一个行向量,就可以得到一个新字符串变量。

clear

str1='Hello';

str2='Ilike''MATLAB''';

str3='你好!

'

str4=[str1,'!

',str2]%多个字符串并排成一个行向量

str4=

Hello!

Ilike'MATLAB'

(2)使用二维字符数组

将每个字符串放在一行,多个字符串可以构成一个二维字符数组,但必须先在短字符串结尾补上空格符,以确保每个字符串(即每一行)的长度一样。

否则MATLAB会提示出错:

str5=[str1;str3]

?

?

?

Errorusing==>vertcat

Allrowsinthebracketedexpressionmusthavethesame

numberofcolumns.

str5=[str1;str3,'']%将str3添加两个空格

str5=

Hello

你好!

(3)使用str2mat、strvcat和char函数

使用专门的str2mat、strvcat和char函数可以构造出字符串矩阵,而不必考虑每行的字符数是否相等,总是按最长的设置,不足的末尾用空格补齐。

str6=str2mat(str1,str2,str3)

str6=

Hello

Ilike'MATLAB'

你好!

str7=char(str1,str2,str3)

str7=

Hello

Ilike'MATLAB'

你好!

str8=strvcat(str1,str2)

str8=

Hello

Ilike'MATLAB'

whos

NameSizeBytesClass

str11x510chararray

str21x1530chararray

str31x36chararray

str41x2244chararray

str52x520chararray

str63x1590chararray

str73x1590chararray

str82x1560chararray

Grandtotalis186elementsusing350bytes

5.执行字符串

如果需要直接“执行”某一字符串,可以使用eval命令,效果就如同直接在MATLAB命令窗口内输入此命令。

str9='a=2*5'

str9=

a=2*5

eval(str9)%执行字符串

a=

10

6.显示字符串

字符串可以直接使用disp命令显示出来,即使后面加分号(;)也显示。

disp('请输入2*2的矩阵a')

请输入2*2的矩阵a

disp(str1)

Hello

2.2.4矩阵和数组运算

矩阵运算有明确而严格的数学规则,矩阵运算规则是按照线性代数运算法则定义的;

数组运算是按数组的元素逐个进行的。

1.矩阵运算的函数

a=

123

456

789

表2.4常用矩阵运算函数

函数名

功能

例子

输入

结果

det(X)

计算方阵行列式

det(a)

ans=

0

rank(X)

求矩阵的秩,得出的行列式不为零的最大方阵边长。

rank(a)

ans=

2

inv(X)

求矩阵的逆阵,当方阵X的det(X)不等于零,逆阵X-1才存在。

X与X-1相乘为单位矩阵。

inv(a)

Warning:

Matrixisclosetosingularorbadlyscaled.

Resultsmaybeinaccurate.RCOND=1.541976e-018.

ans=

1.0e+016*

-0.45040.9007-0.4504

0.9007-1.80140.9007

-0.45040.9007-0.4504

[v,d]=eig(X)

计算矩阵特征值和特征向量。

如果方程Xv=vd存在非零解,则v为特征向量,d为特征值。

[v,d]=eig(a)

v=

-0.2320-0.78580.4082

-0.5253-0.0868-0.8165

-0.81870.61230.4082

d=

16.116800

0-1.11680

00-0.0000

diag(X)

产生X矩阵的对角阵

diag(

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2