Matlab基础知识

一、matlab的标点符号的作用及其快捷键

whos:显示工作区中的变量的类型等信息 例如数据结构等等。

clc:清除图形窗口中所有显示的内容

clf:清楚图形窗口

clear:清楚工作区的内存变量

exit:退出matlab

quit:退出matlab

%-- 2017/5/31 13:53 --%
x=4
whos
cls
clc
x=0:0.2:2*pi:
x=0:0.2:*pi;
x=0;0.2:*pi;
x=0:0:0.2*pi;
y=sin(x)
x=0:0.2:2*pi;
y=sin(x);
plot(x,y);
clf
clear
whos


matlab中的标点:

:冒号,具有多种功能

;分号,区分行及取消运行结果显示

,逗号,区分列(参数分隔)

()括号,指定运算的优先级

[]方括号,定义矩阵

{}大括号,构造单元数组

%百分号,注释标记

!惊叹号 调用操作系统运算

=等号  赋值标记

.点号 小数点及对象域访问

。。。续行符号


二、matlab的数据类型

整数:

8/32/64位有(无)符号的整数(uint  / int)

由于matlab中数值的默认存储类型是双精度浮点数,因此将变量设为整数类型时,需要使用相应的转换函数,将双精度浮点数转换为指定的整数类型。   例如   int8()

在转换时,matlab默认将待转换数值与转换数值最接近的整数值。

matlab中的取整函数

floor(x)向下取整   floor(2.6)=2   

ceil(x) 向上取整 ceil(2.1)=3

round(x) 去最接近的整数,若小数部分是0.5,则向绝对值的大的方向取整

fix(x) 向0取整  fix(1.2)=1  fix(-2.5)=2


浮点数:

单精度  存储位宽 32    0-22位是表示小数部分,23到30位表示指数部分  31位表示正负号  转换函数是single   

双精度   存储位宽64   0-51位是表示小数部分,52到62位表示指数部分  63位表示正负号  转换函数 double

>> a=uint32(120);b=single(22.809);c=73.226;
>> ab=a*b
Error using  .* 
Integers can only be combined with integers of the same class, or scalar
doubles.
 
>> ac=a*c

ac =

        8787

>> bc=b*c

bc =

  1.6702e+03


>> str='hello'

str =

hello

>> newstr=str-c

newstr =

   30.7740   27.7740   34.7740   34.7740   37.7740


双精度浮点数参与运算时,返回值的类型依赖于参与运算的其他数据类型。

1、参与运算的其他数据类型为逻辑型,字符型时,返回的结果是双精度浮点型;

2、参与运算的其他数据为整数类型,返回结果为相应的整数类型;

3、参与运算的其他数据类型为单精度浮点型时,返回结果为相应的单精度浮点型。

(注意:在matlab中 ,单精度浮点型不能与整数类型进行算术运算)


matlab复数相关的函数:

real(z) 返回复数z的实部

abs(z) 返回复数的模

conj(z) 返回复数z的共轭复数

imag(z) :返回复数z的虚部

angle(z):返回复数z的辅助

complex(a,b):以a为实部,b为虚部创建复数


>> a=complex(1,3)

a =

   1.0000 + 3.0000i

>> real(a)

ans =

     1

>> abs(a)

ans =

    3.1623

>> conj(a)

ans =

   1.0000 - 3.0000i

>> imag(a)

ans =

     3

>> angle(a)

ans =

    1.2490

>> 
4.无穷量Inf和非数值量(NaN)



逻辑运算符

1、在matlab中非零为真,零为假;

关系操作符

不等于   ~=   其他与java相同 

下面是两个数组的例子:

比较两个数组的大小,即元素的逐个比较。

>> a=1:9

a =

  Columns 1 through 8

     1     2     3     4     5     6     7     8

  Column 9

     9

>> b=10-a

b =

  Columns 1 through 7

     9     8     7     6     5     4     3

  Columns 8 through 9

     2     1

>> a.b
Attempt to reference field of non-structure array.
 
>> a>b

ans =

     0     0     0     0     0     1     1     1     1

>> a
逻辑运算符

&  |   ~:分别为与或非

例子:

>> a=1:9

a =

     1     2     3     4     5     6     7     8     9

>> (a>3)&(a<8)

ans =

     0     0     0     1     1     1     1     0     0

其他关系与逻辑函数

x or(x,y):异或运算,x和y同为零或非零时返回0,否则返回1

any(x):判断x的元素是否全为0,如果全为0则返回0,否则返回1



字符串的ASC ii 码显示

>> string='hello world'

string =

hello world

>> abs(string)

ans =

   104   101   108   108   111    32   119   111   114   108   100

字符串数组的索引:

字符串是字符数组,所以可以领用操作数组的方法操作字符串,索引实例以及倒叙输出例子~!

string(1:3:10)含义为:从第一个到底十个,以步长为3取值,步长为负数的时候则为倒序!

>> str='hello,world! ilove matlab';
>> u=str(7:10)

u =

worl

>> w
Undefined function or variable 'w'.
 
>> w=str(10:-1:7)

w =

lrow

字符串中的单引号

字符串中的单引号,可以使用两个连续单引号


三、函数句柄


在matlab中,对函数有直接调用和间接调用法;

直接调用:被调用的函数通常被称为子函数,但是子函数只能与其M文件同名的主函数或者其他函数所调用,同时一个文件中只能有一个主函数。

而使用函数句柄对函数进行调用则避免了上述问题。(间接调用)创建函数句柄需要用到@操作符对matlab库函数中提供的各种M文件中的函数使用者自主编写的程序中的内部函数都可以创建函数句柄,从而可以通过函数句柄来实现这些函数调用。

创建函数句柄的一般语法格式:

Funtion_handle=@Funtion_filename;

Funtion_filename:是函数对应的M文件名称或MATLAB内部函数的名称。

@是句柄创建操作符

Funtion_handle变量:保存了这一函数句柄,并在后续的运算中作为数据流传递。

请看下例:

>> f_handle=@cos

f_handle = 

    @cos

>> x=0:0.25*pi:2*pi;%起始值:步长:终止值  建立的一个数组
>> f_handle(x)

ans =

  Columns 1 through 8

    1.0000    0.7071    0.0000   -0.7071   -1.0000   -0.7071   -0.0000    0.7071

  Column 9

    1.0000
四、结构体

matlab中的结构体与C语言类似,一个结构体可以通过字段存储多个不同的数据类型的数据。结构体相当于一个数据容器,把多个相关联的不同类型的数据封装在一个结构体对象中。


结构体的创建:

创建结构体对象的方法:通过赋值语句给结构体字段赋值,也可以使用结构体创建函数struct来创建结构体。

方法一:

>> stu.name='jack';
>> stu.age=23;
>> stu.sex='male'

stu = 

    name: 'jack'
     age: 23
     sex: 'male'

方法二:

Struct函数格式如下:

strArray=

struct(‘filed1’,val1,‘feild2’,val2.......)

filed是字段名

val是相应字段对应值。

>> strcutArray=struct('name','jones','age',6,'sex','female')

strcutArray = 

    name: 'jones'
     age: 6
     sex: 'female'

>> strcutArray=struct('name',ones,'age',6,'sex','female')

strcutArray = 

    name: 1
%matlab中默认非零元素为真,
%matlab中默认非零元素为真,
age: 6 sex: 'female'
 
  
  五、数组类型 
  

在matlab中进行运算的所有数据类型,都是按照数组和矩阵的形式存储和运算,二者在matlab中运算性质不同,数组是元素对元素的运算,矩阵则是采用线性代数的方式。

数组的元素的数据类型是任意的;

 数组创建:

1、利用[]直接创建  a=【1,2,3】

2、在matlab中可以使用冒号“:” 来代表一系列数值,其语法格式为:

Array=i:j:k

创建从i开始,以j为步长(可以为负数,即倒序),到k结束的数字序列,即i+j,i+2j。。。。

>> a=1:3:20

a =

     1     4     7    10    13    16    19

>> b=20:-2:1

b =

    20    18    16    14    12    10     8     6     4     2

>> b=20:1	%数组为空

b =

   Empty matrix: 1-by-0



 
  

linspace函数创建数组

Array=linspace(a,b,n)

在区间[a,b]上创建一个有n个元素的向量 ,把n个数把整个区间现行分割

>> a=linspace(0,90,10)

a =

     0    10    20    30    40    50    60    70    80    90


 六、单元数组《有点像list》 
  

单元数组是一种广义矩阵,组成单元数组的每一个元素称为一个单元。每一个单元可以包括一个任意数组,如数组数组,字符串数组,结构体数组或者另外一个数组,因此每个单元可以具有不同尺寸和内存占用空间。

目的:将不同类型的数据归并到一个数组中。

单元数组的创建有两种方法:使用{} 创建 和利用cell函数创建。

方法一:

与一般的数组创建不同,单元数组的=使用“{}” 来创建,使用“,”或者空格键来分割每一个单元,使用分号“;”来分行(但是要注意分行后每行元素数相等,否则会报错)

>> c={'xy',[1,2,3];10,pi,{1,2}}
Error using vertcat
CAT arguments dimensions are not consistent.
 
>> {'xy',[1,2,3];10,pi;{1,2},'w'}

ans = 

    'xy'          [1x3 double]
    [      10]    [    3.1416]
    {1x2 cell}    'w'         

>> whos
  Name      Size            Bytes  Class    Attributes

  ans       3x2               958  cell   

方法二、cell函数创建单元数组

cell函数的调用格式如下:

cellname=cell(m,n)

该函数创建一个m*n的空单元数组,其每一个单元均为空矩阵;同一般的数组一样,单元数组的内存空间也是动态分配的,因此,使用cell函数创建空单元数组的主要目的是该单元数组分配预先分配连续的存储空间,以节省内存占用提高执行效率。


单元数组的访问

在单元数组中,单元和单元中的内容是两个不同范畴的东西,访问单元和单元中的内容是两个不同的操作。matlab为两操作设计了相应的对象:单元外标识单元内编址

对于单元数组C,C(m,n)指的是单元数组中第m行第n列的单元,而C{m,n}指的是单元数组中第m行第n列单元中的内容。

>>  c={'xy',[1,2,3];pi,{1,2}}

c = 

    'xy'        [1x3 double]
    [3.1416]    {1x2 cell  }

>> c(2,1)

ans = 

    [3.1416]

>> c{2,1}

ans =

    3.1416

>> c(1,1)

ans = 

    'xy'

>> c{1,1}

ans =

xy

 

单元数组的合并

>> c

c = 

    'xy'        [1x3 double]
    [3.1416]    {1x2 cell  }

>> a={1}

a = 

    [1]

>> b={a,c}

b = 

    {1x1 cell}    {2x2 cell}


单元数组的删除

要删除单元数组中指定的某个单元,只需要将空矩阵赋给该单元,即c{m,n}=[]



改变单元数组的形状

使用reshape函数改变单元数组的形状

reshape函数的调用格式为:

panewc=reshape(c,m,n)

将单元数组C改变为一个具有m行n列的新单元数组。(注意,元素的个数不会改变)

>> c{1,1}=[]

c = 

          []    [1x3 double]
    [3.1416]    {1x2 cell  }

>> newc=reshape(c,4,4)
Error using reshape
To RESHAPE the number of elements must not change.
 
>> newc=reshape(c,4,1)

newc = 

    []
    [    3.1416]
    [1x3 double]
    {1x2 cell  }


 六、容器类型map


map类的所由对象具有三种属性:

①count : map对象中存储的key/value对的总数   默认值为0

②keytype:字符串,表示map对象中包括key的类型,默认值为char

③valuetype:字符串,表示map对象中包括的数据类型,默认值char


创建map对象:

构造函数创建 mapobj=containers.Map({key1,key2...},{val1,val2...})

当键和值是字符串时,要加上单引号→mapobj=containers.Map({’key1’,’key2’...},{’val1’,’val2’...})

 schedulemap=containers.Map({'周一','周二','周三','周四','周五'},{'数学','语文','历史','地理','生物'})

schedulemap = 

  containers.Map handle
  Package: containers

  Properties:
        Count: 5
      KeyType: 'char'
    ValueType: 'char'

  Methods, Events, Superclasses

查看/读取map对象

查看map对象中的每个条目包括两部分:一个唯一的键值及其对应的值,可以通过keys函数查看map对象中包含的所有键值,通过values函数查看所有的值。

>> keys(schedulemap)

ans = 

    '周一'    '周三'    '周二'    '周五'    '周四'

>> values(schedulemap)


ans = 


    '数学'    '历史'    '语文'    '生物'    '地理'

 

读取map对象

寻找指定键(keyName)所对应的值(valueName)

valueName=mapName(keyname)


 schedulemap('周一')

ans =

数学

如果对多个键值进行访问,可以使用values函数

>> values(schedulemap,{'周一','周五'})

ans = 

    '数学'    '生物'

编辑map对象

从map对象中删除keys/values对, 使用remove函数

remove(‘mapname’,‘keyname’)

>> remove(schedulemap,'周一')

ans = 

  containers.Map handle
  Package: containers

  Properties:
        Count: 4
      KeyType: 'char'
    ValueType: 'char'

  Methods, Events, Superclasses

添加keys/values对象

当用户向一个map中写入新元素的值时,需要提供键名,而且该键名的类型必须和map中的其它键一致,格式为:

mapname(newkeyname)=newvalue


修改keys

如果需要保持值不变得情况下进行更改,首先要删除键名和对应的值,然后再添加一个正确的键名的新条目。

----------------------------------------------------------------------------------------------------

matlab变量命名

(1)变量名对大小写敏感

(2)变量名必须以字母开头,其后可以是任意字母或者下划线,但是不能有空格,中文,标点。

(3)不能使用matlab关键字作为变量名,如果变量采用函数名,则该函数失效

(4)变量名最对可以包含63个字符,从第64个字符开始之后的字符被忽略,

(5)通过isvarname函数可以验证用户指定的变量名是否合法,返回1表示合法,返回0表示不合法。


matlab的变量类型

局部变量,全局变量,永久变量三种

(1)局部变量:matlab中的每一函数都有自己的局部变量,这些变量存储在该函数独立的工作区中,这与其他函数变

量及主工作区的变量分开存储。当函数调用结束后,这些变量随之删除,不会被保存到内存中

(2)全局变量:定义在该变量的全部工作区中有效,当一个工作区改变该变量的值时,该变量在其余工作区内的值也将会改变

通常,全局变量的变量名用大写字母表示,并在函数体开头位置进行定义,格式如下:

global X_Val

(3)永久变量:永久变量用persistent声明,只能在M文件函数中定义和使用,只允许它的函数存取,当声明它的函数退出时,

matlab不会从内存中清除它!

persistent a


matlab默认的特殊变量

matlab定义了许多特殊的变量,这些变量具有系统默认含义:

ans:系统默认的用作保存计算结果的变量名

pi:圆周率

eps:机器零阈值,matlab中最小值

inf:表示无穷大

NaN或nan:表示不定数


i或j:表示虚数

nargin:函数输入参数个数

nargout:函数输入参数个数

realmin:可用的最小正实数

realmax:可用的最大正实数

bitmax:可用最大正整数(以双精度格式存储)

varargin:可变函数输出参数个数

beep:是计算机发出“嘟嘟”声


 
  
 
  
 
 

你可能感兴趣的:(Matlab基础)