MATLAB基础笔记

Posted by PowderHan on February 2, 2019 已经被偷看过次啦QAQ

http://www.ytmp3.cn/down/50494.mp3

Ubuntu下的笔记软件实在不好用…QAQ干脆就用这个做笔记辽

MATLAB基础笔记

$1.$ MATLAB基础知识

$1.1$ MATLAB系统环境

MATLAB操作界面的组成

$(1)$ 主窗口
$(2)$ 命令行窗口
$(3)$ 当前文件夹窗口
$(4)$ 工作区窗口

MATLAB的搜索路径

按照以下顺序
$(1)$ 变量名
$(2)$ 内部函数
$(3)$ 程序文件

  • 当前文件夹下的程序文件
  • 文件搜索路径文件夹中的程序文件
  • 更改当前文件夹路径可使用cd操作命令
  • 如果变量名与内置函数名或操作名重复,变量名会覆盖内置函数名或操作名
  • 如果需要更改则应该使用clear xxx删除该变量
设置MATLAB文件搜索路径

可使用path命令设置文件搜索路径
path(path,'/home/jzh0918/code')

$1.2 $ MATLAB数值数据

数值数据类型的分类
  • 可用class()函数得到变量的类型

  • $(1)$ 整型

    首先分为无符号类型与有符号类型
    无符号与有符号又各自分为$8 \ 16 \ 32 \ 64$位整数
    表示方法形如 uint32 int8

  • $(2)$ 浮点型

    分为单精度与双精度两个类型,分别占 $4$ 和 $8$ 个字节
    分别用singledouble表示

    • MATLAB中数据默认为double
  • $(3)$ 实型

    实部与虚部默认为双精度型,虚部单位用ij表示

    • real函数求复数的实部
    • imag函数求复数的虚部
数值数据的输出格式
  • format命令的格式

format 格式符

>> format long
>> 50/3

ans =

  16.666666666666668

>> format
>> 50/3

ans =

   16.6667
  • format只影响数据的输出格式,而不影响数据的计算和存储。
常用数学函数

$(1)$ 函数的调用格式为:
函数名(函数自变量的值)

  • 函数的自变量规定为矩阵变量,当然也可是标量,标量就是一个特殊的矩阵
  • 函数在运算时将函数逐项作用于矩阵的每个元素上
>> a = [1,2;...
        3,4]

a =

     1     2
     3     4

>> exp(a)

ans =

    2.7183    7.3891
   20.0855   54.5982

$(2)$ 常用函数的应用

$(2.1)$ MATLAB三角函数默认是以弧度为单位,如果需要使用以角度为单位,则在函数名后面加上d即可

>> sin(90)

ans =

    0.8940

>> sind(90)

ans =

     1

>> sin(pi/2)

ans =

     1

$(2.2)$ abs函数可以求实数的绝对值、复数的模、字符串的$ASCII$码值

$(2.3)$ 用于取整的函数

  • round函数按照四舍五入取整
  • cell函数向上取整
  • floor函数向下取整
  • fix函数固定取靠近$0$的那个整数,即直接舍去小数部分

rem(x, y)求 $x \% y$
isprime(n)求 $n$ 是否为素数

应用:求 $1$ ~ $100$ 之间的素数

>> x = 1:100;
>> p = isprime(x);
>> p1 = find(p)

p1 =

     2     3     5     7    11    13    17    19    23    29    31    37    41    43    47    53    59    61    67    71    73    79    83    89    97

>> k = x(p1)

k =

     2     3     5     7    11    13    17    19    23    29    31    37    41    43    47    53    59    61    67    71    73    79    83    89    97

$1.3$ 变量及其操作

  • 变量与赋值语句

    变量本质是内存单元的一个抽象

预定义变量

$(1)$ ans-默认赋值变量
$(2)$ ij表示虚数单位
$(3)$ pi表示圆周率
$(4)$ NaN代表非数

变量的管理

工作区窗口用于管理变量

whowhos命令

>> who

您的变量为:

a    ans  k    k1   p    p1   pp   x    

>> whos
  Name      Size             Bytes  Class      Attributes

  a         2x2                 32  double               
  ans       1x1                  8  double               
  k         1x25               200  double               
  k1        1x8                 64  double               
  p         1x100              100  logical              
  p1        1x25               200  double               
  pp        1x8                 64  double               
  x         1x100              800  double               

内存变量文件

用于保存MATLAB工作区变量的文件叫做内存变量文件
其扩展名为.mat,也叫MAT文件
是一种二进制文件

使用save命令:创建内存变量文件
使用load命令:装入内存变量文件

格式:
save filename x x x(变量名)
load filename

>> save mydates a x p
>> a = 0

a =

     0

>> load mydate
>> a

a =

     1     2
     3     4

$1.4$ MATLAB矩阵的表示

矩阵的建立

$(1)$ 直接输入法
中括号括起来,统一行用逗号或空格分割,不同行用分号分割

$(2)$ 利用已有矩阵建立更大的矩阵
一个大矩阵可以由已经建好的小矩阵拼接而成

>> A = [1,2;3,4]

A =

     1     2
     3     4

>> B = [6,7;8,9]

B =

     6     7
     8     9

>> C = [A,B;B,A]

C =

     1     2     6     7
     3     4     8     9
     6     7     1     2
     8     9     3     4

可以用实部矩阵与虚部矩阵构成复数矩阵

>> C = A + i * B

C =

   1.0000 + 6.0000i   2.0000 + 7.0000i
   3.0000 + 8.0000i   4.0000 + 9.0000i
冒号表达式生成行向量

格式:
e1 : e2 : e3

e1为初始值,e2为步长,e3为终止值
若省略步长,则默认为$1$

  • linspce函数生成行向量

    linspace(a, b, n)
    a是第一个元素,b是最后一个元素
    n是元素总数,省略时默认为$100$个元素

结构矩阵与单元矩阵

由结构数据构成的矩阵叫做结构矩阵

单元矩阵
建立与一班矩阵相似,直接输入即可,只是单位矩阵元素要用大括号括起来
单元矩阵中的各个元素可以是不同的类型

>> a = {1,'a';2,'b'}

a =

  2×2 cell 数组

    {[1]}    {'a'}
    {[2]}    {'b'}

$1.5$ MATLAB矩阵元素的引用

矩阵元素的引用方式

$(1)$ 通过下标来引用矩阵的元素
A(3,2)引用第三行第二列的元素
MATLAB允许下标大于原来矩阵的行数与列数,则MATLAB将自动扩展矩阵,扩展的未定义的元素默认为 $0$

>> A = [1,2,3;4,5,6]

A =

     1     2     3
     4     5     6

>> A(5,5) = 10

A =

     1     2     3     0     0
     4     5     6     0     0
     0     0     0     0     0
     0     0     0     0     0
     0     0     0     0    10

$(2)$ 通过序号引用
MATLAB矩阵元素按列存储
矩阵元素的序号就是矩阵元素在内存中的排列顺序
则$ m*n $的矩阵第 $i$ 行、第 $j$ 列的元素序号为:
$ (j - 1) * m + i $

>> A = [1,2,3;4,5,6]

A =

     1     2     3
     4     5     6

>> A(3)

ans =

     2
  • 矩阵元素的序号与下标可以通过sub2indind2sub函数实现相互转换

sub2ind函数:将矩阵中指定元素的行列下标转换为存储的序号
调用格式:
D = sub2ind(S,I,J)
$S$为行数与列数组成的向量,$I,J$分别为转换元素的行数与列数

>> A = [1,2,3;4,5,6]

A =

     1     2     3
     4     5     6

>> sub2ind(size(A), 1, 2)

ans =

     3

>> sub2ind(size(A), [1, 2; 1, 2], [1, 3; 2, 3])

ans =

     1     6
     3     6

ind2sub函数:将矩阵元素的序号转换为对应的下标
[I, J] = ind2sub(S, D)

>> [I, J] = ind2sub(size(A), [1,3,4,6])

I =

     1     1     2     2


J =

     1     2     2     3
利用冒号表达式获得子矩阵
A(i:)     %第i行的全部元素
A(:j)     %第j列的全部元素
A(i:i+m,k:k+m) %第i~i+m行内且在第k~k+m列中的所有元素
A(i:i+m,:)     %第i~i+m行内的全部元素
>> A = [1,2,3,4;4,3,2,1;6,5,4,3;2,3,4,5]

A =

     1     2     3     4
     4     3     2     1
     6     5     4     3
     2     3     4     5

>> A(:)

ans =

     1
     4
     6
     2
     2
     3
     5
     3
     3
     2
     4
     4
     4
     1
     3
     5

>> A(2:3)

ans =

     4     6

>> A(1:3,1:3)

ans =

     1     2     3
     4     3     2
     6     5     4
>> A = [1,2,3,4,5;6,7,8,9,10;2,4,5,6,7;2,3,4,5,6]

A =

     1     2     3     4     5
     6     7     8     9    10
     2     4     5     6     7
     2     3     4     5     6

>> A(2:4,1:2:5)

ans =

     6     8    10
     2     5     7
     2     4     6
  • end运算符:表示某一维的末尾元素下标
>> A = [1,2,3,4,5;6,7,8,9,10;2,4,5,6,7;2,3,4,5,6]

A =

     1     2     3     4     5
     6     7     8     9    10
     2     4     5     6     7
     2     3     4     5     6

>> A(2:end,3:end)

ans =

     8     9    10
     5     6     7
     4     5     6
删除矩阵元素
  • 利用空矩阵删除矩阵元素

    空矩阵是指没有任何元素的矩阵

>> x = []

x =

     []

所以删除某些元素,直接将其置为空矩阵即可

改变矩阵的形状
  • reshape(A, m, n)

    在矩阵总元素、元素排列顺序不变的情况下,将A矩阵变为m行n列的元素

>> A = [1,2,3,4,5;6,7,8,9,10;2,4,5,6,7;2,3,4,5,6]

A =

     1     2     3     4     5
     6     7     8     9    10
     2     4     5     6     7
     2     3     4     5     6

>> reshape(A, 10, 2)

ans =

     1     5
     6     4
     2     4
     2     9
     2     6
     7     5
     4     5
     3    10
     3     7
     8     6
  • A(:)将矩阵A的每一列堆叠起来成为一个列向量

$1.5$ MATLAB基本运算

算术运算
  • MATLAB的算术运算是在矩阵意义下进行的
  • 单个数据的算术运算只是矩阵运算的一种特例

$(1)$ 基本算术运算
+ - * / \ ^

  • 标量也可以与矩阵运算,这个时候将标量与矩阵的每个元素进行运算

  • 两种矩阵除法运算

右除/与左除\
若A为可逆矩阵,则
B/A等效于B * inv(A)
A\B等效于inv(A) * B

$(2)$ 点运算
.* ./ .\ .^
矩阵进行点运算表示矩阵对应元素进行运算

>> x = 0.1:0.3:1

x =

    0.1000    0.4000    0.7000    1.0000

>> y = sin(x) .* cos(x)

y =

    0.0993    0.3587    0.4927    0.4546
关系运算

< <= > >= == ~=
矩阵参与关系运算时,是逐个比较矩阵的各个元素,最后返回的结果是一个与原矩阵同型的矩阵,它的元素由 $0$ 或 $1$组成

逻辑运算

$ | ~

优先级

算术运算、关系运算和逻辑运算中
算术运算优先级最高,逻辑运算优先级最低,但逻辑非是单目运算符,优先级比双目运算符更高

$1.6$ MATLAB字符串处理

字符串的表示

在MATLAB中,字符串是用单引号括起来的字符序列。

MATLAB将字符串当作一个行向量来处理

>> xm = 'Powder Han'

xm =

    'Powder Han'

>> xm(1:6)

ans =

    'Powder'

>> xm(1:8)

ans =

    'Powder H'

>> xm(5)

ans =

    'e'

如果字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示

  • MATLAB可以建立多行字符串,形成字符串矩阵

    同时要求各行字符数(列数)相等

>> X = ['abcd';'1234']

X =

  2×4 char 数组

    'abcd'
    '1234'
字符串的操作
  • $(1)$ 字符串的执行

    eval(s)
    将字符串s当作命令行命令来执行

>> t = pi / 2

t =

    1.5708

>> s = 'sin(t)'

s =

    'sin(t)'

>> eval(s)

ans =

     1
  • $(2)$ 字符串与数值之间的转换

    absdouble函数都可以获取字符串矩阵对应的$ASCII$码数值矩阵
    char函数可以将$ASCII$嘛值转换为字符串矩阵

>> s = 'matlab'

s =

    'matlab'

>> a = abs(s)

a =

   109    97   116   108    97    98

>> a = a - 32

a =

    77    65    84    76    65    66

>> s = char(a)

s =

    'MATLAB'

  • $(3)$ 字符串的比较

    使用关系运算符
    使用字符串比较函数

>> a = 'abcde'

a =

    'abcde'

>> b = 'edcba'

b =

    'edcba'

>> a > b

ans =

  1×5 logical 数组

   0   0   0   1   1
strcmp(s1, s2)      % 比较s1 s2是否相等
strncmp(s1, s2, n)  % 比较s1 s2的前n个字符是否相等
strcmpi(s1, s2)     % 忽略字母大小写,比较s1 s2 是否相等
strncmpi(s1, s2, n) % 忽略字母大小写,比较s1 s2 前n个字符是否相等
  • $(4)$ 字符串的查找与替换

findstr(s1, s2):返回短字符串在长字符串中的开始位置
strrep(s1, s2, s3):将s1中所有的子字符串s2替换成字符串s3


The total number of English words:1609
The total number of Chinese words:8923
欢迎点击下方的知乎图标关注我的知乎QAQ
毕生梦想-成为知乎大V
蟹蟹~