凡是过往,皆为序章

0%

MATLAB课程总结(一)

MATLAB的第一次课堂总结,包括MATLAB中通用的命令、数组矩阵的相关运算,字符串的一些基本命令等。

MATLAB注意事项

1、 MATLAB对字母的大小写是敏感的。

2、按照MATLAB的变量定义规则,将所有变量都定义为数组。标量被看作(1×1)的数组,向量认为是(1×n)或(m×1)的数组,矩阵认为是(m×n)的数组。

常见的通用命令

1、clc清除清除窗口显示内容。

2、whowhos命令显示工作空间的变量,clear清除工作空间的变量。

3、dir命令显示当前工作目录的文件和子目录清单。

4、cd命令显示或设置当前工作目录。

5、type命令显示指定m文件的内容。

6、help或doc命令获取在线帮助。

  • MATLAB提供的帮助信息有两类
    • 简单纯文本帮助信息
      • help
      • lookfor(条件比较宽松)
    • 窗口式综合帮助信息(文字、公式、图形)
      • doc
      • helpwin

命令行窗口

1、sin命令

MATLAB中正弦函数sin就是常见的正弦函数。

它的参数值是以“弧度”为单位的。

pi也是Matalb的预定义变量。

pi=3.14159…

MATLAB对字母大小写是敏感的。

2、开方sqrt(x),指数函数exp(x)

3、数组的输入有两种方式:

  • 直接输入数组时,数组元素之间用空格或逗号分隔,数组行之间用分号分隔,整个数组放在方括号”[]”里。
  • 也可以分行输入,用回车“Enter”区分行。

4、指令的多行输入:在本行命令的末尾加上三个及以上的点...即可。

数值表示、变量及表达式

1、MATLAB只采用十进制表示数值。

2、变量命名规则

  • 变量名函数名对字母大小写敏感
  • 变量第一个字符必须为英文字母
  • 变量可以包含英文字母、数字和下划线

3、Matlab预定义的变量

变量名 意义
ans 最近的计算结果的变量名
eps MATLAB定义的正的极小值=2.2204e-16
pi 圆周率π
inf ∞值,无限大
i或j 虚数单元,sqrt(-1)
NaN 非数,0/0、∞/

说明

  • 每当MATLAB启动完成,这些变量就被产生。

  • MATLAB中,被0除不会引起程序中断,给出报警的同时用inf或NaN给出结果。

  • 用户只能临时覆盖这些预定义变量的值,Clear或重启MATLAB可恢复其值。

4、运算符和表达式

运算 数学表达式 MATLAB运算符 MATLAB表达式
a+b + a+b
a-b - a-b
axb * a*b
a/b或a\b /或\ a/b或a\b
a^b^ ^ a^b

说明

  • Matlab用“\”和”/”分别表示“左除”和“右除”。对标量而言,两者没有区别。对矩阵产生不同影响。

  • MATLAB表达式的书写规则与“手写方式”几乎完全相同。

  • 表达式按与常规相同的优先级自左至右执行运算。

  • 优先级:指数运算级别最高,乘除次之,加减最低。

  • 括号改变运算的次序。

5、复数及其运算

  • MATLAB中复数的表达:z=a+b*i,其中a、b为实数。

  • MATLAB把复数作为一个整体,像计算实数一样计算复数。

数组

1、分类

  • 一维数组,也称为向量(vector) 。行向量(row vector)、列向量(column vector)。

  • 二维数组(矩阵matrix)。

  • 多维数组。

注意:有效矩阵:每行元素的个数必须相同,每列元素的个数也必须相同。

2、创建一维数组

① 行向量的创建

  1. 第一种方法:使用方括号“[ ]”操作符

    例如:创建数组(行向量)a=[1 3 pi 3+5i]

    >>a=[1 3 pi 3+5*i] %or a=[1, 3, pi, 3+5*i]

    结果:a= 1.0000 3.0000 3.1416 3.0000 + 5.0000i

  2. 第二种方法:使用冒号“:”操作符

    利用冒号“:”操作符创建行向量的基本语法格式:

    • x=Start:Increment:End

    • Start表示新向量x的第一个元素;

    • 新向量x的最后一个元素不能大于End ;

    • Increment可正可负,若负,则必须Start>End;若正,则必须Start<End,否则创建的为空向量。

    • 若Increment=1,则可简写为:x=Start:End。

      1
      2
      3
      4
      5
      6
      >>b=1:10
      b=1 2 3 4 5 6 7 8 9 10
      >> c=1:2:10
      c=1 3 5 7 9
      >>d=1:2:9
      d= 1 3 5 7 9
  3. 第三种方法:利用函数linspace。

    x= linspace(x1, x2, n)

    • 该函数生成一个由n个元素组成的行向量;
    • x1为其第一个元素;
    • x2为其最后一个元素;
    • x1、x2之间元素的间隔=(x2-x1)/(n-1)。
    • 如果忽略参数n,则系统默认生成100个元素的行向量。
    1
    2
    >>linspace(1,2,5)
    x=1.0000 1.2500 1.5000 1.7500 2.0000
  4. 第四种方法:利用函数logspace

    x= logspace(x1, x2, n)

    • 该函数生成一个由n个元素组成的行向量;
    • x1为其第一个元素,是以10为底的幂;
    • x2为其最后一个元素,是以10为底的幂;
    • n是向量中元素的个数;
    • 如果忽略参数n,则系统默认生成50个元素的行向量

② 列向量的创建

  1. 使用方括号“[ ]”操作符,使用分号“;”分割行。

  2. 使用冒号操作符,最后加上单引号',表示矩阵的转置。

    1
    2
    3
    4
    >>x=(1:3)'
    x= 1
    2
    3

3、创建数组变量

创建变量的赋值语句的一般格式: var=expression

  • var为变量名

  • expression为MATLAB合法表达式

    • 可以是单独的常数值或数值数组;

    • 也可以由常数值、其他变量(部分或全部)、数值数组和运算符(+、-等)构成。

      例如:a=[0 1+6]; b=[a 6 7]; c=[6 a 7]; d=[6 a 7 a];

    • 一旦被创建,变量就被存储在工作空间,可以通过“Workspace”窗口或在“Command Window”执行“whos”命令察看。

4、创建数组变量

  1. 第一种方法:使用方括号“[ ]”操作符

    使用规则

    • 数组元素必须在“[ ]”内键入;
    • 行与行之间须用分号“;” 间隔,也可以在分行处用回车键间隔;
    • 行内元素用空格或逗号“,”间隔。

    同时可由一维数组构成二维数组。

    1
    2
    3
    4
    5
    6
    7
    8
    >>a=[1 2 3]; b=[2 3 4]; 
    >>c=[a;b];
    >>d=[a b];
    c=
    1 2 3
    2 3 4
    d=
    1 2 3 2 3 4
  2. 第二种方法:函数方法

    函数ones(生成全1矩阵)、zeros (生成全0矩阵) 、eye(生成单位矩阵)、rand(以0~1均匀分布的矩阵)、randn(均值为0,方差为1的高斯分布矩阵)、magic(魔方矩阵,每行、列和对角线元素和相等)、reshape(重新排列矩阵)。

    “help elmat”获得基本的矩阵生成和操作函数列表

    1
    2
    3
    4
    %创建全1的3x3数组。
    >>ones(3)
    %创建全1的3x4数组。
    >>ones(3,4)

    reshape的使用演示:

    1
    2
    3
    4
    5
    6
    7
    8
       >>a=-4:4
    a=
    -4 -3 -2 -1 0 1 2 3 4
    >>b=reshape(a, 3, 3)
    b=
    -4 -1 2
    -3 0 3
    -2 1 4

    该函数注意:

    • 数组元素的排列顺序,从上到下按列排列,先排第一列,然后第二列,…
    • 要求数组的元素总数不变。

5、数组元素的标识与寻访

  1. “全下标(index)”标识

    经典数学教科书采用“全下标”标识法:每一维对应一个下标。

    • 如对于二维数组,用“行下标和列下标”标识数组的元素,a(2,3)就表示二维数组a的“第2行第3列”的元素。
    • 对于一维数组,用一个下标即可,b(2)表示一维数组b的第2个元素,无论b是行向量还是列向量。
  2. “单下标”(linear index)标识

    所谓“单下标”标识就是用一个下标来表明元素在数组的位置。

    • 对于二维数组, “单下标”编号:设想把二维数组的所有列,按先后顺序首尾相接排成“一维长列”,然后自上往下对元素位置执行编号。

几种表示法

  • a(:,n)表示矩阵a所有的行和第n列,即提取矩阵a第n列元素;
  • a([m,n],[i,j])表示矩阵的第m行与第n行的第i列和第j列,即提取矩阵a第m行与第n行的第i列和第j列元素;
  • a(m:n,i:j)表示第m行到第n行的第i列到第j列,即提取第m行到第n行的第i列到第j列的所有元素
  • a(m:end,i)表示第m行到最末行的第i列,即提取第m行到最末行的第i列的元素

6、例子

  1. 单下标的使用

    1
    2
    3
    4
    5
    >>a=zeros(2, 5);
    >>a(:)=-4:5
    a =
    -4 -2 0 2 4
    -3 -1 1 3 5

    注意数组的排列顺序。

  2. 一维数组元素与子数组的寻访与赋值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    >>a=linspace(1,10,5)
    a =
    1.0000 3.2500 5.5000 7.7500 10.0000
    >>a(3) %寻访a的第3个元素
    ans =
    5.5000
    >>a([1 2 5]) %寻访a的第1、2、5个元素组成的子数组
    ans =
    1.0000 3.2500 10.0000
    >>a(1:3) %寻访前3个元素组成的子数组
    ans =
    1.0000 3.2500 5.5000
    >>a(3:-1:1) %由前3个元素倒序构成的子数组
    ans =
    5.5000 3.2500 1.0000
    >>a(3:end)
    ans =
    5.5000 7.7500 10.0000
    >>a(3:end-1)
    ans =
    5.5000 7.7500
    >>a([1 2 3 5 5 3 2 1]) % 数组元素可以被任意重复访问,构成长度大于原数组的新数组。
    ans =
    1.0000 3.2500 5.5000 10.0000 10.0000 5.5000 3.2500 1.0000
    >>a(3)=0 %修改数组a的第3元素值为0
    a =
    1.0000 3.2500 0 7.7500 10.0000
    >>a([2 5])=[1 1] %修改多个数组元素的值
    a =
    1.0000 1.0000 0 7.7500 1.0000
    >>a([2 5])=[] %删除对应数组元素的值
    a =
    1.0000 0 7.7500

    注意:

    • 可以修改指定数组元素的值
    • 一次可以修改多个数组元素的值
    • 要修改的数组元素的个数应与送入数组的元素个数相同
    • 利用方括号([])删除矩阵的某行列
  3. 二维数组元素与子数组的寻访与赋值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    >>a_2=zeros(2, 4) %创建2x4的全0数组
    a_2 =
    0 0 0 0
    0 0 0 0
    >>a_2(:)=1:8 %注意元素的排列顺序
    a_2 =
    1 3 5 7
    2 4 6 8
    >>a_2([2 5 8]) %单下标方式寻访多个元素
    ans =
    2 5 8
    >> a_2([2 5 8]) =[10 20 30]
    a_2 =
    1 3 20 7
    10 4 6 30
    >>a_2(:,[2 3])=ones(2) %双下标方式寻访并修改
    a_2 =
    1 1 1 7
    10 1 1 30
    • 二维数组可以“单下标”方式或“全下标”方式访问、赋值;
    • “单下标”方式赋值时,等号两边涉及的元素个数必须相等;
    • “全下标”方式赋值时,等号右边数组的大小必须等于原数组中涉及元素构成的子数组的大小。
  4. size、length函数

    1
    2
    3
    4
    5
    6
    7
    >>a=ones(4,6)*6
    >>m=size(a)
    >>len=length(a)
    >>b=1:5;
    >>length(b)
    >>c=b’
    >>length(c)
    • size函数返回变量的大小,即变量数组的行列数。
    • length函数返回变量数组的最大维数。

字符串

1、基本命令

  • Matlab 用「单引号」来界定一个字符串。

  • 可以使用方括号“[ ]”直接连接多个字符串变量,得到一个新字符串变量。

  • 如要输入的字符串中有单引号,则由两个连续的单引号来表示。

  • 若要计算字符串变量的长度(即组成字符串的个数),可用 length 指令。

  • double 指令: 查看字符串变量的存储內容(即 ASCII 内码)

  • char 指令: 将 ASCII 內码转换为字符串形式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
str1 = ‘I like MATLAB,’;	    % 建立字串变量 str1
str2 = ' JavaScript, and Perl!'; % 建立字串变量str2
str3 = [str1 str2] % 直接连接str1及str2,以建立str3
str3 =I like MATLAB, JavaScript, and Perl!

sentence = 'I''ve got a date!';
length(sentence) % 计算字字符串sentence的长度
ans = 16

sentence = 'I''ve got a date!';
sentenceAscii = double(sentence) %查看 sentence 的 ASCII 码
sentence2 = char(sentenceAscii) % 将 ASCII 码恢复成字符串形式
sentenceAscii = 73 39 118 101 32 103 111 116 32 97 32 100 97 116 101 33
sentence2 =I've got a date!

2、字符串的判断

  • class 或 ischar 指令: 可以用来判断一个变量的类型或它是否为字符串变量。

    1
    2
    3
    4
    chinese = ‘今日事,今日毕';
    out1 = class(chinese) % out1 的值是 “char”
    x = chinese+1;
    out2 = ischar(x) % out2 的值是 0,代表 x 不是字符串变量

3、一个字符数组变量存储多行字符串

1、使用二维字符数组

注意:必须先确认每个字符串(即每一行)的长度一样,否则就必须在短字符串结尾补齐空格。

1
2
3
4
5
departments = [‘ee  ’; ‘cs  ’; ‘econ’]	%注意语句中空格字符的使用。
departments =
ee
cs
econ

2、用char 指令存储多字符串

1
departments = char(‘ee’, ‘cs’, ‘econ’)      % 注意空格及「,」的使用

注意:从二维字符数组访问字符串时,切记要使用 deblank 指令来清除字符串尾部的空格字符。

1
2
3
4
5
departments = char('ee', 'cs', 'econ');
dept1 = departments(1,:); % (1,:)代表第一行的全部元素
dept2 = deblank(dept1); % 使用 deblank 指令清除尾部的空格字符
len1 = length(dept1) % 显示变量 dept1 的长度=4
len2 = length(dept2) % 显示变量 dept2 的长度=2

3、字符串比较

strcmp 指令: 用于比较字符串的內容的异同 。不相等返回0,相等返回1。

1
2
3
4
5
6
7
str1 = 'today';  
str2 = 'tomorrow';
str3 = 'today';
out1 = strcmp(str1, str2) % 比较字符串 str1 和 str2
out1 = 0 %表示字符串 str1 和 str2不同
out2 = strcmp(str1, str3) % 比较字符串 str1 和 str3
out2 = 1 %表示字符串 str1 和 str2相同

多维数组

在 MATLAB 的数据类型中,向量可视为一维数组,矩阵可视为二维数组,对于维数超过2的数组均可视为多维数组。

将两个二维(平面)数组叠在一起,就构成三维数组,第三维称为「页」(Page)。

三维数组,可对应至一个 X - Y - Z 三维立体坐标。

三维数组元素的寻址:可以(行、列、页)来确定。

数组 A 是三维数组,其中 A(:,:,1)代表第一页的二维数组,A(:,:,2)代表第二页的二维数组。

多维数组的建立

建立一个简单的多维数组,可直接由 MATLAB 命令视窗内输入(使用“[ ]”操作符)

1
2
A(:, :, 1) = [1 0 2 5; 4 1 8 7; 3 2 6 3];
A(:, :, 2) = [3 5 4 1; 2 6 2 1; 4 2 3 0]
~感谢你请我吃糖果~
-------------本文结束,感谢您的阅读,欢迎评论留言!-------------