MATLAB的集成环境及数据类型

来源:互联网 发布:均分纸牌 贪心算法 编辑:程序博客网 时间:2024/04/28 06:16

第一部分MATLAB的集成环境

一.菜单栏和工具栏介绍

 

MATLAB包括7个菜单项:

File】:用于进行与文件的处理

Edit】:用于实现命令窗口的编辑操作

Debug】:用来调试程序

Parallel:用于对并行计算进行选择和管理

Desktop:用来设置窗口的显示方式

Window:用来关闭所有使用的编辑器窗口或选择活动窗口

Help】:用来打开不同的帮助系统

二.命令窗口

1.FilePreference:对窗口的字体风格,大小、颜色和数值计算结果的显示格式进行个性化设置

2.FilePreferenceCommand Window】命令中在【Numeric】和【Numeric display】下拉表可以选择数据的显示位数和显示格式:

格式

示例

说明

format short

0.3333

小数点后保留4位,最多不超过7位;对于大于1000的实数用5位小数的科学计数法表示

format long

0.3333333333333333

15位数字表示

format short e

3.3333e-001

5位科学计数法表示

format long e

3.3333333333333333e-0.01

15位科学计数法表示

format short g

0.33333

format shortformat short e中选最佳的方式

format long g

0.3333333333333333

format longformat long e中选最佳的方式

format hex

3fd5555555555555

用十六进制表示

format bank

0.33

(金融)数据表示

format +

+

大矩阵数据表示,正数,负数和零用+-和空格表示

format rat

1/3

近似有理数表示

format compact

-----

紧凑格式表示,显示变量之间没有空行

format loose

---

松格显示,在显示变量的行之间加入行

 

3.Reshape()函数可以利用现有数组构造新数组,例:


4.工作空间浏览器

Desktop【Wokespace】ViewChoose Columns】可以将选定的变量以图形的方式表示出来:

 

5.MATLAB的通用命令

命令名称

语法

功能

addpath

addpath(‘...’)

添加目录到MALTAB的搜索路径

help

Help

显示MATLAB命令和M文件的在线帮助

version

Version

显示MATLAB的版本号

disp(X)

disp(X)

显示文本或矩阵

length

length(X)

显示数组X的长度

load

Load

加载指定文件的变量

openvar

openvar(‘name’)

在数组编辑器中打开工作空间内的变量

save

save

保存工作空间内的变量

size

size(X)

显示数组的维数

who

who

列出内存中的变量名

whos

whos

列出内存中的变量名、类型、维数、字节数

workspace

workspace

打开工作空间浏览器

clc

clc

清除工作窗口中的所有内容

format

format

控制输出的数据格式

home

home

将光标移动到MATLAB命令窗口的初始位置

cd

cd

显示或改变当前工作目录

delete

delete filename

将指定文件删除

diary

diary

diary off

将命令窗口中的命令保存到一个文件夹里

暂停执行diary命令

dir

dir

显示目录列表

edit

edit

打开一个新的编辑器窗口

open

open(‘name’)

根据指定文件夹类型打开文件

quit

quit

退出MATLAB系统

 

6.在命令窗口中获得帮助信息

(1)输入help help会得到如何使用help的详细信息

(2)输入help FunName命令将获得具体函数的用法,例如希望了解eye()函数:

 

(3)lookfor name帮助用户获得函数的具体用法,name可以是不确定具体拼写的函数名

第二部分MATLAB的数据类型

一.数值型数据的多种格式

format(short)

短格式(5位定点数)

76.4000

format long

长格式(U位定格式)

76.40000000000000

format short e

短格式e方式

7.6400e+001

format long e

长格式e方式

7.640000000000000e+001

format bank

2位十进制

76.40

format hex

十六进制格式

405319999999999a

 

1.复数的输入

1)复数的虚部是数字时,在虚部和i之间有“*”和没有“*”的结果相同

>> c=8+4i

 

c =

 

   8.0000 + 4.0000i

 

>> c=8+4*i

 

c =

 

   8.0000 + 4.0000i

(2)若复数的虚部用变量名表示,则该变量名和虚部之间必须用*”隔开

>> a=8

 

a =

 

     8

 

>> b=4

 

b =

 

     4

 

>> c=a+b*i

 

c =

 

   8.0000 + 4.0000i

3InfNaN两个特殊数值

Inf表示正无穷大,NaN表示非数值量,例:

>> 1/0

 

ans =

 

   Inf

 

>> 0/0

 

ans =

 

   NaN

2.变量和表达式

(1)变量由字母组成,必须以英文字母开头,但最多不超过23个字符,否则系统只承认前63个字符,变量不可包括空格、标点,但可包括下连字符。

(2)MATLAB变量字母区分大小写,变量名一般使用小写字母。

(3)关键字(iffor等)不能作为变量名,输入iskeyword可查询关键字。

特殊常量

说明

字符串常量

s=”Tomorrow and Tomorrow”

符号常量

例如Pi,它代表圆周率π这个常量,即3.1415926

ans

计算结果默认的变量名

ij

虚数单位,定义为i=j=

Infinf

正无穷大,由0做除数引入此常量

NaN

不定式,表示非数值量,产生于0

o,

∞,0*∞等运算

pi

圆周率π的双精度表示

eps

容差变量,当某量的绝对值小于eps时,可认为此量喂零,即为浮点数的最小分辨率,PC上此值为2.2204e-016

RealminRealmin

最小浮点数,2.2251e-308

Realmaxrealmax

最大浮点数,1.7977e+308

二.逻辑型

1.逻辑运算函数

函数名称

作用

logical(m)

将任意类型的数据转化为逻辑数据,其中非零为逻辑真,零为逻辑假

true(m,n)

将任何数据转换为逻辑真(即结果为1

flase(m,n)

将任何数据转换为逻辑假(即结果为0

例编写代码程序:

m=[0,4,2;1,5,0]

logical(m)        %把数值转变成逻辑值

true(3)          %创建一个3X3的逻辑1矩阵

true(2,4)         %创建一个2X4的逻辑1矩阵

false(2,3)         %创建一个2X3的逻辑0矩阵

运行结果:

>> logical(m)

 

ans =

 

     0     1     1

     1     1     0

 

>> true(3)  

 

ans =

 

     1     1     1

     1     1     1

     1     1     1

 

>> true(2,4)

 

ans =

 

     1     1     1     1

     1     1     1     1

>> false(2,3)

 

ans =

 

     0     0     0

     0     0     0

2.运算符的优先级

算数运算符>关系运算符>逻辑运算符

逻辑运算符

含义

说明

&&

与、和

在标量表达式之间进行绕行式与操作

||

在标量表达式之间进行绕行式或操作

&

与、和

在两个逻辑数组之间逐个元素进行逻辑与操作

|

逻辑或

在两个逻辑数组之间逐个元素进行逻辑或操作

~

逻辑非

对数组中的元素逐个进行取反操作

xor(x,y)

异或

在两个逻辑数组之间逐个元素进行异或操作

any(z)

 

若为向量,则当任何元素都不为0时,返回1

若为数组,逐列筛选,若有元素为非0数,则返回1,并将01按序返回新数组中

all(z)

检测

若为向量,则当任何元素都不为0时,返回1

若检测数组每列是否全部为真,若全为真则返回1,并将01按序返回新数组中

三.字符和字符串

1.创建字符串函数

(1)input函数一般格式:input(str,’s’)inputstr

input()用法示例:

>> A='My name is :'

 

A =

 

My name is :

 

>> M=input(A,'s')

My name is :MATLAB

 

M =

 

MATLAB

 

>> M=input(A)

My name is :'MATLAB'

 

M =

 

MATLAB

(2)char()函数

编写程序代码:

>> A='My name is';

>> M='MATLAB';

>> NAME=char(A,M)

运行结果:

NAME =

 

My name is

MATLAB

2.字符串比较函数

函数名

说明

strcmp(s1,s2)

比较两个字符串是否完全相等,若相等则返回函数值1,若不等则返回函数值0

strncmp(s1,s2,n)

比较两个字符串的前n个字符是否相等,若相等则返回函数值1,若不等则返回函数值0

strcmpi(s1,s2)

在忽略字符串大小写的情况下,比较两个字符串是否相等,若相等则返回函数值1,若不等则返回函数值0

strncmpi(s1,s2,n)

在忽略字符串大小写的情况下,比较两个字符串的前n个字符是否相等,若相等则返回函数值1,若不等则返回函数值0

 示例:

  >> s1='STudy'

 

s1 =

 

STudy

 

>> s2='StuDY'

 

s2 =

 

StuDY

 

>> strcmp(s1,s2)

 

ans =

 

     0

>> strncmp(s1,s2,1)

 

ans =

 

     1

 

>> strcmpi(s1,s2)

 

ans =

 

     1

3.字符串查找与替换函数

函数名称

说明

findstr(str1,str2)

MATLAB先判断str1str2的长度大小,然后在长字符串中查找短字符串,并返回短字符串第一次出现的具体位置(str1str2位置可以互换,对结果无影响,str1str2必须只有一行)

strfind(str1,str2)

str1中查找str2的位置,当str1长度大于等于str2时,函数返回str2第一次出现的位置值,否则函数返回[],因此str1str2时,位置互换结果将会产生变化

strrep(str1,str2str3)

str1中查找str2并将所有的str2str3来进行替换,当str1,str2,str3中有多列字符串时。str2str3的行数不能超过str1,结果返回和str1相同列数的字符串数组

strmatch(str1,str2)

在字符串数组str1中每一行查找以str2开头的字符串,并返回所在行数,没有则返回[],也可以用strmatch(str1,str2,’exact’)精确查找str2中完全等于str1的字符串,并返回所在行数

strtok(str1,str2)

返回str1中含有str2的第一个标记前所有的str1的部分,如果没有指定str2,MATLAB则默认str2=[],那么找出str1中空格前面的字符串部分

:findstr(0strfind()函数的用法相似,但strfind()函数的使用两个参数的位置不能互换,否则无法得到正确结果。

例一、findstrstrfind的用法:

>> M='abcdef'

 

M =

 

abcdef

 

>> findstr('f',M)

 

ans =

 

     6

 

>> strfind(M,'f')

 

ans =

 

     6

 

>> findstr(M,'f')

 

ans =

 

     6

 

>> strfind('f',M)

 

ans =

 

     []

例二、strrep的用法:

>> str1='hello world'

 

str1 =

 

hello world

 

>> str2='l'

 

str2 =

 

l

 

>> str3='k'

 

str3 =

 

k

 

>> strrep(str1,str2,str3)

 

ans =

 

hekko workd

注:在str1中查找str2并用str3替换str2str1,str2,str3都为单列字符串。

例三、strmatch的用法:

>> A={'cat';'world';'dog'}

 

A =

 

    'cat'

    'world'

    'dog'

 

>> B='wo';

>> strmatch(B,A)

 

ans =

 

     2

注:在字符串A中查找以字符串B开头的字符,并返回其所在行数

例四、strtok函数的用法:

M='hello world study here!';

>> strtok(M)

 

ans =

 

hello

 

>> strtok(M,'rd')

 

ans =

 

hello wo

注:返回在M中含有‘rd’的第一个标记前所有的M的部分

4.类型转换函数

(1)将字符串转换为数值型数据的函数

类别

函数名

说明

字符串

   

数值型

abs(str)

返回一个向量,其元素是字符串str中字符的ASCII的码值

hex2num(str)

将字符串str中的十六进制数转换成相应的浮点数(IEEE双精度)

hex2dec(str)

将字符串str中的十六进制数转换成相应整数

bin2dec(str)

将字符串中的二进制数转换成十六进制数

str2num(str)

返回字符串str的数字形式,字符串只能包含数字、小数点,表示10的幂的e,还有复数虚部的i

str2double(str)

以双精度格式返回字符串str的数字形式,字符串只能包含数字、小数点,表示10的幂的e,还有复数虚部的i

例:

>> str='3de2';

>> abs(str)            

 

ans =

 

    51   100   101    50

 

>> hex2num(str)

 

ans =

 

   1.3097e-10

 

>> hex2dec(str)

 

ans =

 

       15842

 

>> str='010010110101110';

>> M=bin2dec(str)

 

M =

 

        9646

 

>> S='123e23';

>> str2num(S)

 

ans =

 

   1.2300e+25

(2)将数值型数据转换为字符串的函数

数值型

   

 字符串

char(x)

根据指定的字符集将向量x的整数转换成字符,这个命令是命令abs的逆操作

int2str(n)

将整数n转换成整数字符串表达将数值f转换成浮点格式的字符串。这个命令经常和命令dispxlabel还有一些其他输出命令一起使用

num2str(f)

将数值f转换成带有K位数字的浮点格式的字符串

num2str(f,k)

将数值f转换成由format设置格式的字符串,format用在函数sprintf中,关于format的用法在前面讲过

rats(x,strlen)

将浮点小数x转换成含有对x的有理逼近的字符串,整数strlen是每个元素的字符串长度,默认值为13

dec2bin(n)

将整数n转换成二进制数字字符串

dec2hex(n)

将整数n转换成相应的十六进制数字字符串

例:

>> x=[36,55,48]

 

x =

 

    36    55    48

 

>> char(x)

 

ans =

 

$70

 

>> F=[2,5445,142,54,45,46,4856,546];

>> M=num2str(F,4)

 

M =

 

2       5445        142         54         45         46       4856        546

 

>> class(F)

 

ans =

 

double

 

>> class(M)

 

ans =

 

char

 

>> N=[53,45,46,12,153,92];

>> A=rat(N)

 

A =

 

53

45

46

12

153

92

 

>> dec2bin(4124)

 

ans =

 

1000000011100

>> dec2hex(1597864)

 

ans =

 

1861A8

四.函数句柄

1.句柄的创建

句柄函数的创建是利用@符号,或者利用转换函数str2func()来生成函数句柄如handle=@functionnamefunctionname的句柄是handle

例:

>> hcos=@cos

 

hcos =

 

    @cos

 

>> functions(hcos)       %使用functions()函数可以查看句柄的函数名称和类型等信息

 

ans =

 

    function: 'cos'

        type: 'simple'

        file: ''

 

>> isa(hcos,'function_handle')  %isa()函数可以检查到变量hcos是一个句柄

 

ans =

 

     1

 

>> whos

  Name      Size            Bytes  Class              Attributes

 

  A         6x3                36  char                         

  B         1x2                 4  char                         

  F         1x8                64  double                       

  M         1x78              156  char                         

  N         1x6                48  double                       

  NAME      2x10               40  char                         

  S         1x6                12  char                         

  a         1x1                 8  double                       

  ans       1x1                 1  logical                      

  b         1x1                 8  double                       

  c         1x1                16  double             complex   

  hcos      1x1                32  function_handle              

  m         2x3                48  double                       

  s1        1x5                10  char                         

  s2        1x5                10  char                         

  str       1x15               30  char                         

  str1      1x11               22  char                         

  str2      1x1                 2  char                         

  str3      1x1                 2  char                         

  x         1x3                24  double   

注:句柄不能构成数组和矩阵

五.构架数组

1.用赋值语句创建构架数组

 matlab.name='MATLAB';

>> matlab

 

matlab =

 

name: 'MATLAB'

2.用函数struct()创建构架数组

形式

说明

S=struct(‘field1’,{},’field2’,{},...)

创建一个空内容的构架数组,它包含field1,field2,..

S=struct(‘field1’,values1,’field2’,values2,...)

创建初始化的构架数组,它包含域field1,field2,...并且对应的域内容为values1,values2,...

S=struct

创建一个1x1的构架数组,其没有域

struct([])

创建一个空的构架数组,其没有域

S=struct(obj)

创建和构架数组obj有相同结构的构架数组,但不改变原obj构架数组

.用函数struct()创建构架数组student

>> student=struct('name','富豪','city','武汉')

 

student =

 

    name: '富豪'

    city: '武汉'

 

>> student(2)=struct('name','曾捷','city','广西')

 

student =

 

1x2 struct array with fields:

    name

    city

 

>> student(2)

 

ans =

 

    name: '曾捷'

city: '广西'

3.构架数组域的基本操作

(1)寻访域的内容

f=getfield(array,{array_index},’field’,{field_index})

其中array_indexfield_index具有可选择性。array_index是已创建构架数组名的索引;field_index是对应域名的索引。

(2)删除构架数组中的域

newstruct_array=rmfield(struct_array,’field’)

其中,struct_array为需要进行操作的构架数组,field为需要删除的域名,程序运行后将新得到的构架数组赋给newstruct_array。原构架数组的结构不发生任何变化。

(3)构架数组域的操作

f=array(array_index).field(field_index)

其中,array_index为数据的索引号,field_index为域的索引号

函数名

说明

fieldnames(struct_arry)

以字符串的形式返回构架数组的所有域名

isstruct(A)

检测A是否为构架数组,若是返回1,否则返回0

isfield(struct_arry,’char’)

检测构架数组中是否存在名为‘char’的域名

六.元胞数组

1.直接赋值法

(1)内容索引:赋值语句的左边用大括号{将标识单元的下标括起来,右边为单元的内容。

例:

>> C{1,1}='this is a cell_array';

>> C{1,2}=[23,-4,45;-34,567,2];

>> C{2,1}=[];

>> C{2,2}=324-454i

 

C =

 

    'this is a cell_array'                  [2x3 double]

                        []    [3.2400e+02 - 4.5400e+02i]

 

>> class(C)

 

ans =

 

cell

例中分别对C{11}C{12}C{21}C{2,2}元胞数组的各元素进行赋值,最后使用class()函数判断C的数据类型是什么。

(2)单元索引:赋值语句的左边用小括号()将标识单元的下标括起来,右边用大括号将存储于单元的数据括起来。

例:

>> C{1,1}='this is a cell_array';

>> C{1,2}={[23,-4,45;-34,567,2]};

>> C{2,1}={[]};

>> C{2,2}={324-454i}

 

C =

 

    'this is a cell_array'    {1x1 cell}

                {1x1 cell}    {1x1 cell}

 

>> whos

  Name      Size            Bytes  Class    Attributes

 

  C         2x2               888  cell               

  ans       1x4                 8  char

例中分别对C{11}C{12}C{21}C{2,2}元胞数组的各元素进行赋值,最后使用whos命令获得C的维数和数据类型等信息。

2.cell()函数创建法(创建一个mxn的元胞数组,但这只是预定义一个元胞数组)

cell_array=cell(m,n)

3.利用{}直接创建元胞数组(创建一个nxm的元胞数组,并将单元进行初始化)

cellname={[cell 1,1],[cell 1,2]......[cell 1,m];......;[cell n,1],[cell n,2]......[cell n,m]}

4.元胞数组操作函数

函数

说明

celldisp()

显示单元阵列的内容

cellplot()

画出单元阵列的结构图

reshape()

改变元胞数组的形状

cell2struct()

把元胞数组转化为构架数组

num2cell()

把数字矩阵转化为元胞数组

cellstr()

把二维字符数组转化为相应的字符串单元阵列

char()

把字符串单元阵列转化为相应的字符数组

 

0 0
原创粉丝点击