Matlab学习笔记.docx

上传人:b****5 文档编号:6696292 上传时间:2023-01-09 格式:DOCX 页数:18 大小:26.41KB
下载 相关 举报
Matlab学习笔记.docx_第1页
第1页 / 共18页
Matlab学习笔记.docx_第2页
第2页 / 共18页
Matlab学习笔记.docx_第3页
第3页 / 共18页
Matlab学习笔记.docx_第4页
第4页 / 共18页
Matlab学习笔记.docx_第5页
第5页 / 共18页
点击查看更多>>
下载资源
资源描述

Matlab学习笔记.docx

《Matlab学习笔记.docx》由会员分享,可在线阅读,更多相关《Matlab学习笔记.docx(18页珍藏版)》请在冰豆网上搜索。

Matlab学习笔记.docx

Matlab学习笔记

基础知识

重要知识

●;语句结束,屏蔽显示,提高编译效率

●...分行书写

●Size获取矩阵的尺寸

●0.01可以简写为.01

●Matlab中运算表达式中更改优先级的括号()和[]均可以,但是函数参数中必须要用()

●‘转置运算法

●clc清屏(命令窗口)

●clear清除变量

●%行注释

●Who/whos查看工作空间变量

●Plot绘图函数

X=0:

0.1:

6;

Y=sin(x);

Plot(x,y);

●帮助

Helpdesk

Doc

Helpwin

HelpXXX索引帮助

Lookfor***内容查找

●Diary

Diaryfilename命令窗口日志(命令窗口的输出和输入都会被保持到文件中)

Diaryoff终止日志写入

Dirayon重新日志写入

●常用符号

+-*/^exp(自然指数)

Matlab搜索路径

Path:

查看搜索路径

Addpath增加目录到搜索路径

Path2rc增加当前目录到搜索路径

Rmpath移除matlab中的搜索路径

Pathtool图形化设置搜索路径

UserPath设置启动目录设置完后要savepath保持

Cd当前目录(不带参数直接显示当前目录)也可以像dos命令一样更改当前目录

which命令,它能帮助我们找到正在执行的m文件版本和它的路径(若有多个同名m文件,按照路径搜索顺序返回第一个)。

 

如果用户在MATLAB提示符后输入一个名字,那么MATLAB在解释器将按以下顺序

寻找这个名字:

1.它先查看这个名字是否是个变量名。

如果它是一个变量,MATLAB将会显示出这个

变量的值。

2.然后检查看它是否是内建函数或命令。

如果是,则执行对应的函数或命令。

3.检查是不是在当前目录下的一个M文件。

如果是,则执行对应的函数或命令。

4.检查是不是在MATLAB搜索路径的所有目录下的一个M文件。

如果是,则执行对

应的函数或命令。

注意:

如果首先检测到的是变量名,且这个变量名与MATLAB的某一个函数或命令同

名,那么这个函数或命令将变得无法访问。

这是初学者易犯的错误之一。

编程隐患

如果变量名与MATLAB中的函数或命令重名,那么这个函数或命令将不能被访问。

还有,如果有多个函数或命令重名,那么MATLAB将会执行在搜索路径中找到的第一

个,其他的将不会被执行。

对于初学者,这也是一个常见的问题,往往将M文件的名字与

MATLAB内建函数或命令重名,从而导致函数或命令的不能访问。

编程隐患

要创建和MATLAB内建函数或命令同名的M文件。

数据的显示

format改变默认显示格式

当数据重复在命令窗口(TheCommandWindows)时,整数以整形形式显示,其他值将以

默认格式显示。

MATLAB的默认格式是精确到小数点后四位。

如果一个数太大或太小,那

么将会以科学记数法的形式显示。

x=100.11

y=1001.1

z=0.00010011

x=

100.1100

y=

1.0011e+03

z=

1.0011e-04

format命令结果例子

formatshort保留小数点后4位(默认格式)12.3457

formatlong保留小数点后14位12.345678901234567

formatshorte带有5位有效数字科学记数法1.2346e+00

formatshortg总共有5个数字,可以用科学记数法,也可不用12.346

formatlonge带有15位有效数字科学记数法1.234567890123457e+001

formatlongg总共有5个数字,可以用科学记数法,也可不用12.3456789012346

formatbank美元格式12.35

formathex用16进制表示4028b0fcd32f707a

formatrat两个小整数的比1000/81

formatcompact隐藏多余的换行符

formatloose使用多余的换行符

format+只显示这个数的正负+

disp显示数据

另一种显示数据的方法是用disp函数。

disp需要一个数组参数,它将值将显示在命令窗口(TheCommandWindows)中。

如果这个数组是字符型(char),那么包含在这个数组中的字符串将会打印在命令窗口(TheCommandWindows)中。

此函数可联合num2str(将一个数转化为字符串)和int2str(将一个整数转化为字符串)来产生新的信息,显示在命令窗口(TheCommandWindows)中。

例如,下面的语句将“thevalueofpi=3.1416”显示在命令窗口(TheCommandWindows)中。

第一句创建了一个字符型数组,第二句用于显示这个数组。

>>str=['thevalueofpi='num2str(pi)];定义字符数组,数组元素间空格或逗号间隔均可

>>disp(str);

thevalueofpi=3.1416

b=[789];

>>disp(b)

789

fprintf格式化显示数据

用fprintf函数显示数据是一种十分简便方法。

fprintf函数显示带有相关文本的一个或多个值,允许程序员控制显示数据的方式。

>>fprintf('thevalueofpiis%6.2f\n',pi)%\n别忘了,否则命令提示符>>紧跟在字符串

thevalueofpiis3.14%后面,很难看

fprintf函数有一个重大的局限性,只能显示复数的实部。

当我们的计算结果是复数时,这个局限性将会产生错误。

在这种情况下,最好用disp显示数据。

formatstring结果

%d把值作为整数来处理

%e用科学记数法来显示数据

%f用于格式化浮点数,并显示这个数

%g用科学记数格式,或浮点数格式,根据那个短,并显示之

\n转到新的一行

例如,下列语句计算复数x的值,分别用fprintf和disp显示

x=2*(1-2*i)^3;

str=['disp:

x='num2str(x)];

disp(str);

fprintf('fprintf:

x=%8.4f\n',x);

打印的结果如下

disp:

x=-22+4i

fprintf:

x=-22.0000

编程隐患

fprintf函数只能复数的实部,所以在有复数参加或产生的计算中,可能产生错误的结果。

数据的保存

Save

Savefilenamevar1var2–ascii-append

为了与其他程序交互,使用-ascii为区分,扩展名建议用dat

Matlab自己用,不要-ascii,扩展名自动为mat,跨版本、跨平台matlab互认mat文件

Load

loadfilename-ascii

Matlab变量

变量名

MATLAB的变量名必须以字母开头,后面可以跟字母,数字和下划线(_).只有前31

个字符是有效的;如果超过了31个字符,基余的字符将被忽略。

如果声明两个变量,两变

量名只有第32个字符不同,那么MATLAB将它们当作同一变量对待。

在MATLAB语言中是区分字母大小的,也就是说,大写字母和小写字母代表的东西是不同的。

所以变量NAME,Name,name在MATLAB中是不同的。

所以已用过的小写变量名与一个新建大写的变量名重名,这时使用时要特别地小心。

在一般情况下,我们一律用小写字母来表示。

MatLab中变量名一般用小写,名称单词间用下划线_隔开。

Double和char型

两个最常见的变量类型是char型和double型。

double型的变量包括由64位双精度浮点数构成的标量或数组。

这种变量可以代表实数,虚数和复数。

每个值的实部和虚部的变化范围为正负10-308~10308,拥有15到16位有效数字。

这是基本的数字数据类型。

无论什么时侯,你将一个数值赋值于一个变量名,那么MATLAB将自动建立一个double型变量。

例如,下面语句创建了一个以var为变量名的double型变量,包含了一个double型的单个元素,存储了复数值(1+i);

Var=1+i;

char型的变量包括由16位数值构成的标量或数组,每一个16位数代表一个字符。

这个类型的经常用于字符串操作,当一个字符或字符串赋值于一个变量名时,系统会自动建立一个char型变量。

例如,下面的这个语句创建了一个char型变量comment,并存储了一个字符串在其内。

当这个语执行后,系统将会建立一个1×26的字符串数组。

Comment=‘Thatisacharacterstring’;

变量赋值

1.用赋值语句初始化变量

2.用input函数从键盘输入初始化变量

3.从文件读取一个数据

特殊变量

函数用途

pi有15个有效值的π

i,j代表虚数i(−1)

Inf这个符号代表无穷大,它一般情况下是除以0产生的

NaN这个符号代表没有这个数。

它一般由数学运算得到的。

例如,0除以0。

clock这个特殊变量包含了当前的年,月,日,时,分,秒,是一个6元素行向量

date当前的日期,使用的的字符形式,如30-Dec-2007

eps变量名是epsilon的简写。

它代表计算能机辨别的两数之间的最小数

ans常用于存储表达式的结果,如果一个结果没有明确的赋值给某个变量

编程隐患

不要重定义有意义的预定义变量。

否则将后患无穷,制造成出小而难以发现的错误。

矩阵(数组)

矩阵的定义

a=2;%matlab中所有变量都认为是矩阵(1×1)

b=1:

0.1:

2//向量

c=[123]或c=[1,2,3]或c=[1,23]空格或逗号都可以分割元素

d=[123;%分号分割矩阵的行

456;

789]

e=[1,2,3%换行符分割矩阵的行,e为2×3维矩阵

4,56]

f=[1,2,3,%行尾3后面有个逗号,f仍为2×3维矩阵

4,5,6];

G=[1,2,3

4,5,6];%行首4前面有逗号,g仍为2×3维矩阵

[]为空数组,没有行,没有列,注意它与元素全为0的数组区别。

[1,2,3;4,5]这样的表达式是非法的,因为第一行有3个元素,第二行有只有2个元素.H=[01+7]g=[h

(2),h

(1)+5]数组可以用表达式初始化

当我们创建一个数组时,不是每一个元素都必须定义.如果要定义一个特殊的数组,或只

有一个或几个元素没有定义,那么之前的那些元素将会自动创建,并初始化为0.例如,如果数

组c事先没有定义,语句c(2,3)=5将会创建一矩阵

005

000

相似地,指定一个值赋予一个存在的数组,但超过了这个数组的大小。

例如,假设存在一数组d=[12],下面这个语句d(4)=4,将会制造出数组d=[1,2,04];

注意:

对于已定义的矩阵,已有一维向量才可以这样对越界外的位置赋值来扩展矩阵,二维或多维矩阵会报非法操作。

矩阵快捷赋值

Clone运算符

注意:

创建的结果first<=target<=last;first一定包含,last视步长情况可能包含,可能不包含。

First:

incr:

last克隆运算符(colonoperator),第一值,步增和最后一个值

first代表数组的每一个值,incr代表步增量,last代表这个数组的最后一个值。

如果步

增量为1,那么步增量可省略,而变成了first:

last格式。

例如,表达式1:

2:

10是创建一个1×5行向量[13579]的简便方法

克隆法创建[pi/100,2*pi/100,...,pi]的语句可以写作:

Angles=(.01:

.01,1)*pi;

F=[1:

4]’或(1:

4)’通过clone和转置得到一个4*1的列向量

G=1:

4;

H=[g’g’];//H为(两个列向量组成的)4×2矩阵

Zerosoneseye

Zeros

(2)//产生2×2方阵—元素全为0

Zeros(2,3)//2×3--元素全为0

C=[1,2;3,4];

D=zeros(size(c));//d的维数同c,元素为0

zeros(n)创建一个n×n零矩阵

zeros(n,m)创建一个n×m零矩阵

zeros(size(arr))创建一个与数组arr的零矩阵

ones(n)创建一个n×n元素全为1矩阵

ones(n,m)创建一个n×m元素全为1矩阵

eye(n)创建一个n×n的单位矩阵

eye(n,m)创建一个n×m的单位矩阵

length(arr)返回一个向量的长度或二维数组中最长的那一维的长度

size(arr)返回指定数组的行数和列数

>>eye(2,3)

ans=

100

010

>>eye(3,2)

ans=

10

01

10

Input初始化变量

>>my_val=input('Enterthevalue:

')

Enterthevalue:

23

my_val=23

>>my_val=input('Enterthevalue:

','s')

Enterthevalue:

25

当这个语句被编译时,MATLAB打印出字符串enteraninputvalue:

然后等待用户回复.如果要只输入一个数,那么只需要直接键入,如果要输入一个数组,则必须带上中括号([]).不管怎样,当按下回车键时.在窗口输入的任何值都会被储入变量my_val.如果只按下回车键,那么这个变量就存储了一个空矩阵.如果input函数中有字符's'做为它的第二个参数,输入的数据就被当字符串

矩阵的元素访问(注意:

小括号):

d=[123;

456;

789]

d

(1)值为1//下标从1开始,0会报错,d(0)和d(10)越界都非法。

d

(2)值为4//matlab中矩阵元素按列存储,d

(2)为第二行第一个元素,而不是第一行第二个元素。

d(1,2)值为5//第一行、第二列的元素

sub2indind2sub

下标值转化为索引值

f=

123

456

>>sub2ind(size(f),2,2)

ans=4

b=

123

456

>>sub2ind(size(b),2,2)

ans=

4

>>[IJ]=ind2sub(size(b),4)//将索引4转换为坐标I中存储行坐标 J中存储列坐标

I=

2

J=

2

>>[IJ]=ind2sub(size(b),[34])//求索引3和4转换为行、列坐标

I=

12

J=

22

[IJ]=ind2sub(size(b),[34;56])//同时将3456转换为行、列坐标

I=

12

12

J=

22

33

多维数组

c(:

:

1)=[123;456];//注意c的是括号,还要求c未被定义,否则两个:

会从已定义的变量c中获取行、列值,赋值维数不匹配会报错。

>>c(:

:

2)=[111213;141516];

>>c

c(:

:

1)=

123

456

c(:

:

2)=

111213

141516

>>size(c)

ans=

232

数组的内存分配

一个有m行和n列的二维数组包括m×n个元素,这些元素在计算机的内存中将会占有m×n个连续的内存空间。

这些数组的元素在内存中是如何排列的呢?

MATLAB以列主导顺序分配数组中的元素。

也就是说,内存先分配第一列的元素,然后第二列,第三列,……以此类推,直到所有列都被分配完。

图2.3说明4×3数组a的内存分配情况。

正如我们所看到的,元素a(1,2)是其实在内存分配的第五个位置。

在下一节我们讨论用单一下标访问数组元素和第八章低级I/O接口,内存分配元素的顺序将变得十分重要。

行(row)列(colum)页(page)

这种分配方式也适用于多维数组。

数组的第一个下标增长最快,第二个仅次之,依此类推,最后一个变化最慢。

例如,在一个2×2×2数组中,它的元素在内存中的分配顺序是

(1,1,1),(2,1,1),(1,2,1),(2,2,1),(1,1,2),(2,1,2),(1,2,2),(2,2,2)。

子数组(end到行/列尾)

你可以选择和使用一个MATLAB函数的子集,好像他们是独立的数组一样。

在数组名

后面加括号,括号里面是所有要选择的元素的下标,这样就能选择这个函数的子集了。

例如,

假设定义了一个数组arr1如下

arr1=[1.1-2.23.3-4.45.5]

那么arr1(3)为3.3,arr1([14])为数组[1.1-4.4],arr1(1:

2:

5)为数组[1.13.35.5].

b=

123

456

>>b(:

1)//:

表示行全选,1表示第一列。

合起来是第一列(的所有行)

ans=

1

4

>>b(:

[12])//第1,2列

ans=

12

45

>>b(:

1:

2:

5)//1:

2:

5的结果是[135],列5越界

Indexexceedsmatrixdimensions.

>>b(:

1:

2:

3)//1:

2:

3的结果是[13],取1,3列

ans=

13

46

又如:

a=

123

456

789

>>a([12],[12])

ans=

12

45

End(到行/列尾)

>>a(2:

end,:

ans=

456

789

子数组在左边的赋值语句的使用

只要数组的形(行数和列数)和子数组的形相匹配,把子数组放于赋值语句的左边用来

更新数组中的值。

如果形不匹配,那么将会有错误产生。

例如,下面有一个3×4数组定义

arr4=

1234

5678

9101112

>>arr4(1:

2,[14])

ans=

14

58

>>arr4(1:

2,[14])=[2021;2223]

arr4=

202321

226723

9101112

>>arr4(1:

2,[14])=[202122;232425]

Subscriptedassignmentdimensionmismatch.

编程隐患

对于涉及子数组的赋值语句,等号两边的形必须相匹配。

否则将会产生错误。

用一标量来给子数组赋值

位于赋值语句的右边的标量值总是能匹配左边数组的形。

这个标量值将会被复制到左边

语句中所对应的元素。

例如,假设用一个数组arr4定义如下:

arr4=

1234

5678

9101112

>>arr4(1:

2,1:

2)

ans=

12

56

>>arr4(1:

2,1:

2)=1

arr4=

1134

1178

9101112

Matlab的运算

标量间的运算+-*/^

数组和矩阵运算

运算MATLAB形式注释

数组加法A+B数组加法和矩阵加法相同

数组减法A–B数组减法和矩阵减法相同

数组乘法(数乘)A.*BA和B的元素逐个对应相乘.两数组之间必须有相同的形,或其中一个是标量.

矩阵乘法A*BA和B的矩阵乘法.A的列数必须和B的行数相同.

数组右除法A./BA和B的元素逐个对应相除:

A(i,j)/B(i,j)两数组之间必须有相同的形,或其中一个是标量.

数组左除法A.\BA和B的元素逐个对应相除:

B(i,j)/A(i,j)两数组之间必须有相同的形,或其中一个是标量.

矩阵右除法A/B矩阵除法,等价于A*inv(B),inv(B)是B的逆阵

矩阵左除法A\B矩阵除法,等价于inv(A)*B,inv(A)是A的逆阵

数组指数运算A.^BAB中的元素逐个进行如下运算A(i,j)^B(i,j),A(i,j)/B(i,j)两数组之间必须有相同的形,或其中一个是标量.

运算优先级

1)括号里的内容先运算,从最里面的括号去运算

2)幂运算,从左向右

3)乘除法,从左向右

4)加减法,从左向右

Matlab的内建函数

maxmin选择性结果,多返回值

与数学的函数不同,MATLAB函数返回一个或多个值给调用函数。

max函数就是这样

的一个例子。

这个函数一般情况下返回输入向量中的最大值,但是它返回的第二个参数是输

入向量中的最大值在向量中的位置。

例如,语句

maxval=max([1-56-3])

返回的结果为maxval=6,但是要有两个返回值,那么这个函数包括最大所处的位置。

[maxvalindex]=max([1-56-3])

将会产生结果maxval=6,和index=3.

数组作为输入参数

许多MATLAB函数定义了一个或多个标量输入,产生一个输出。

例如,语句y=sin(x)

计算了x的正弦,并将结果存储到y变量中。

如果这些函数接受了输入值构成的数组,那么

MATLAB将一一计算出每个元素所对应的值。

x=[0pi/23*pi/22*pi]

那么语句

y=sin(x)

将会产生y=[01-1-0].

Matlab系统函数

函数描述

●数学函数

abs(x)计算x的绝对值

acos(x)计算x的反余弦函数

angle(x)计算复数x的幅角

asin(x)计算x的反正弦函数值

atan(x)计算x的反正切函数值

atan2(y,x)tan-2(y/x)

cos(x)cosx

exp(x)ex

log(x)logex

[value,index]=max(x)返回x中的最大值,和它所处的位置

[value,index]=min(x)返回x中的最小值,和它

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

当前位置:首页 > 医药卫生 > 基础医学

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

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