MATLAB学习笔记(1)

来源:互联网 发布:预产期计算软件下载 编辑:程序博客网 时间:2024/06/05 15:40

1.MATLAB命令行下的换行输入方法

    (1).可以在该行输入语句后加空格然后...即可。(用于续接一行内容)

    (2).按下Shift+Enter即可换行。(用于希望先输入多条语句,然后再同时顺序执行它们)

2.MATLAB的基本数据类型

    MATLAB中的基本数据类型包括数值类型、逻辑类型、字符串、函数句柄、结构体和单元数组类型。

2.1数值类型

    (1).未加说明时与特殊定义时,MATLAB对所有数值按照双精度浮点数类型进行存储和操作。
>> x = 5;>> y = 2/5;>> z = 0.2687;>> m = 0;>> whos  Name      Size            Bytes  Class     Attributes  m         1x1                 8  double                x         1x1                 8  double                y         1x1                 8  double                z         1x1                 8  double              
    (2).在MATLAB中,单精度浮点数类型不能与整数类型进行算术运算。
>> c = single(6.02);>> d = 7.36;>> n = int16(10);>> result = c * n错误使用  .* 整数只能与相同类的整数或标量双精度值组合使用。 >> result = d * nresult =     74

2.2逻辑类型

    与C/Java等编程语言不同点之一是不等于的关系操作符是~=,而非!=

2.3字符和字符串

    (1).字符串内各元素存放的是各个字符的ASCII码值。
>> str = 'Hello world.';>> nstr = str + 2.5nstr =   74.5000  103.5000  110.5000  110.5000  113.5000   34.5000  121.5000  113.5000  116.5000  110.5000  102.5000   48.5000
    (2).字符串内的单引号由两个连续的单引号来表示。
>> String = 'I''m a goog boy.'String =I'm a goog boy.
    (3).可以直接将字符串用数组方式来实现连接。
>> A = 'Hell0 ';>> B = 'world!';>> C = [A, B]C =Hell0 world!

2.4函数句柄

    函数句柄即函数的首地址,暂时我是这样理解的。

2.5结构体类型

    2.5.1结构体的创建

    (1).可以通过字段赋值来逐个给结构体中的成员变量赋值。
>> Student.name = 'Amy';>> Student.age = '20';>> Student.height = '168';>> Student.weight = '55';>> StudentStudent =       name: 'Amy'       age: '20'    height: '168'    weight: '55'

    (2).可以利用struct函数来创建结构体。
>> newArray = struct('Day', {'Thursday','Friday'},'Time', {'15:00','21:00'},'Number', {12});>> newArraynewArray = 1x2 struct array with fields:    Day    Time    Number>> newArray[1] newArray[1]         |错误: 圆括号或方括号不对称或异常。 >> newArray(1)ans =        Day: 'Thursday'      Time: '15:00'    Number: 12>> newArray(2)ans =        Day: 'Friday'      Time: '21:00'    Number: 12

在这里,数组的下标是用()而非[]。

2.6数组类型

    在MATLAB中可以使用:来代替一系列数值,比如在定义数组时,用以生成从a到b,步长为1的数组,其格式为:
数组名 = a:b
>> Array = 4:10Array =     4     5     6     7     8     9    10
    需要设置步长时,只需在中间加一个参数即可,格式为:
数组名 = a:c:b;%步长为c
例如:
>> Array = 1:2:20Array =     1     3     5     7     9    11    13    15    17    19
    也可以使用linspace函数来创建线性序列和逻辑序列。其应用的两种格式为
数组名 = linspace(起始值, 结束值)%这个方法默认生成100个元素。
数组名 = linspace(起始值, 结束值, 元素个数)
>> Array = linspace(1,11,11)Array =     1     2     3     4     5     6     7     8     9    10    11

2.7单元数组类型

    单元数组是一种不限制元素类型的广义矩阵(维数不限制)。组成单元数组的每一个元素称为一个单元。

2.7.1单元数组的创建

    (1).使用赋值语句创建单元数组。其使用花括号{}来界定,使用逗号,或空格来分隔每一个单元,使用分号;来分行。
>> C = {'x', [1,3,6];10, pi}C =     'x'     [1x3 double]    [10]    [    3.1416]
    (2).利用cell函数来创建空单元数组,其格式为:
单元数组名 = cell(行数, 列数)%这是一般二维数组的函数,若更多维则继续添加参数(该维度的长度)即可。
>> a = cell(2,2)a =     []    []    []    []

2.7.2单位数组的访问

    对于单元数组C,其访问包括对寻访单元与单元中的内容的访问。第m行第n列的单元数组外标识的访问是通过C(m, n)格式访问,第m行第n列的单元的访问是通过C{m, n}格式进行。
>> C{1, 1}ans =x>> C(1, 1)ans =     'x'

2.7.3单元数组的操作

    (1).单元数组的合并与结构体的合并类似,直接{}内连接即可
>> C = {'x', [1,3,6];10, pi}C =     'x'     [1x3 double]    [10]    [    3.1416]>> D = {25; 'MATLAB'}D =     [25]    'MATLAB'>> T = {C D}T =     {2x2 cell}    {2x1 cell}
    (2).单元数组中指定单元的删除,只需要将空矩阵赋值给该单元即可。
示例略
    (3).单元数组的形状改变,需使用reshape函数,其格式如下:
更改后单元数组名 = reshape(要改变的单元数组名, 改变后的行数, 改变后的列数) 
    但应注意的是,reshape前后单元数组的元素个数不能改变。
>> C = {'x', [1,3,6];10, pi};>> X = reshape(C, 1, 3)错误使用 reshape要执行 RESHAPE,请勿更改元素数目。 >> X = reshape(C, 1, 4)X =     'x'    [10]    [1x3 double]    [3.1416]

2.8map容器类型

2.8.1map类型概述

    map即为映射的意思,即将map的键(key)映射为一个数据对象(value),因而可以将其理解为一种快速查找数据结构的方式。对于一个map元素进行寻访的索引称为“键”。一个键可以是以下任何一种数据类型:
    (1).1*N的字符串;
    (2).单精度或双精度的实数标量;
    (3).有符号或无符号标量整数。
    这些键与其对应的数据存储在map中。且各键属性需要一致!map类的对象具有三种属性,包括Count(表示map中key/value对的总数)、KeyType(键的类型)和ValueType(值的类型)通过“map名.属性名”即可查看属性值。

2.8.2map对象的创建

    map对象通过其构造函数来创建,其格式如下:
map对象名 = containers.Map({键1, 键2, ……}, {值1, 值2, ……})
map对象名 = containers.Map() %用于生成空的map对象
>> mapObj = containers.Map({'小明', '小红'}, {15010230014, 15070150220})%姓名到学号的简单映射mapObj =   Map (带属性):        Count: 2      KeyType: char    ValueType: double>> mapObj.Countans =                    2>> mapObj.KeyTypeans =char>> mapObj.ValueTypeans =double

2.8.3查看/读取map对象

    (1).查看map对象,可以通过keys函数与values函数实现。
    (2).读取map对象可通过以下格式实现:
返回值 = map对象名(键值)
    (3).若要对多个键值进行访问,可以使用values函数,格式如下:
返回数组名 = values(map对象名, {键1, 键2, ……})
>> mapObj = containers.Map({'小明', '小红', '小亮'}, {150102, 150707, 150209});>> keys(mapObj)ans =     '小明'    '小红'    '小亮'>> values(mapObj)ans =     [150102]    [150707]    [150209]>> number_x = mapObj('小明')number_x =      150102>> numbers = values(mapObj, {'小红', '小亮'})numbers =     [150707]    [150209]

2.8.4map对象的编辑

    (1).从map对象中删除keys/values对。一般使用remove函数删除,其调用格式为:
remove(map对象名, 键名)
    (2).从map对象中增添keys/values对。添加时,要确保新加入键的类型必需要与其他键的类型一致,其格式如下:
map对象名(新键名) = 新键值
    (3).修改keys。若要在保持值不变的情况下修改键名,只能采用先删除该键值对,然后添加一个新的键值对的方法。
    (4).修改values。直接通过赋值操作,覆盖掉原有值即可。
>> mapObj = containers.Map({'小明', '小红', '小亮'}, {150102, 150707, 150209});>> remove(mapObj, '小亮')ans =   Map (带属性):        Count: 2      KeyType: char    ValueType: double>> mapObj('小刚') = 150104;>> mapObj('小红') = 140108;>> keys(mapObj)ans =     '小明'    '小刚'    '小红'>> values(mapObj)ans =     [150102]    [150104]    [140108]