matlab-note-1

matlab-note-1

Charles Lv7

matlab-note-1

image-20230208173226841

MATLAB基础知识

MATLAB系统环境

  1. matlab为GUI界面,相关操作均在matlab command中进行。
  2. 可以用…进行命令行输入的转行继续连接,以运行较长的命令行命令。

MATLAB数值数据,变量及其操作

整型

MATLAB提供了数据类型转换函数来实现数据类型的转化,默认格式为short:

1
2
3
4
%% 数据类型转化
%整型
x = int8(129)%127
x = uint8(129)%129

浮点型

  • single函数:将其他类型的数据转换为单精度型。
  • double函数:将其他类型的数据转换为双精度型。

MATLAB中数值默认是双精度型,可以使用single函数转化为单精度型。

1
2
3
%浮点型
class(4) %class函数获取变量类型
class(single(4))

复型

real函数:求复数的实部

imag函数:求复数的虚部

format命令

format命令(只影响数据的输出格式,而不影响数据的计算和储存):

1
2
format long
50/3

常用数学函数

三角函数有以弧度为单位的函数和以角度为单位的函数,如果是以角度为单位的函数就在函数名后面加“d”,以示区别。例如sin(x)和sind(x)

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
%% 常用数学函数:
A = [4, 2; 3, 6]
B = exp(A) %求自然指数

%三角函数
sin(pi / 2) %弧度
sind(90) %角度

%abs函数可以求实数绝对值、复数的模、字符串的ASCII码值
abs(-4)
abs(3 + 4i)
abs('a')

%用于取整的函数:fix(舍去小数取整)、floor(向下取整)、ceil(向上取整)、round(四舍五入取整)
round(4.7)
floor(3.6)
fix(-3.2)
ceil(-3.8)

%rem函数用于求余数
m = 345
m1 = rem(m, 10)

%判断素数(isprime)[以下方求解1到100的素数为例]
x = 1:100;
k = isprime(x);
k1 = find(k);
p = x(k1)

变量及其操作

  1. 变量本质上是内存单元的一个抽象。

  2. MATLAB的标准函数名何命令名必须用小写字母。

  3. 预定义变量是由系统本身定义的变量,ans是默认的赋值变量。

  4. 在MATLAB中i和j表示虚数单位,pi表示圆周率,NaN表示非数。

  5. 可以使用who和whos指令获得目前的变量名清单。

  6. 用于保存MATLAB工作区变量的文件叫做内存变量文件,其扩展名为.mat,也叫MAT文件。(生成过程:先使用save命令创建内存变量文件,再使用load命令装入内存变量文件)。

    1
    2
    save mydata a x
    load mydata

MATLAB矩阵表示及矩阵元素的引用

矩阵的建立

(1). 利用直接输入法建立矩阵:将矩阵元素用中括号括起来,按矩阵行的顺序输入各元素,同一行的个元素之间用逗号或空格分开,不同行之间用分号分隔。

(2). 利用已经建立好的矩阵建立更大的矩阵。

1
2
3
4
5
%% matlab矩阵表示
%拼接矩阵
A = [1, 2, 3; 4, 5, 6; 7, 8, 9]
B = [-1, -2, -3; -4, -5, -6; -7, -8, -9]
C = [A, B; B, A]

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

1
2
3
4
%复数矩阵
B = [1, 2, 3; 4, 5, 6]; %语句加分号后则只进行计算而不进行表示
C = [6, 7, 8; 9, 10, 11];
A = B + i * C

冒号表达式

冒号表达式(初始值:步长[可省略,若省略则默认为1]:终止值)

1
2
3
4
t = 0:1:5
t = 0:5
linspace(0, pi, 6)
%linspace函数(linspace(第一个元素,最后一个元素,元素总数[可省略,省略则默认为100])

结构矩阵和单元矩阵

(1).结构矩阵

由结构数据构成的矩阵就是结构矩阵,结构矩阵里的每个元素就是结构数据类型。

格式:结构矩阵元素.成员名=表达式

1
2
3
4
%结构矩阵
a(1).x1 = 10; a(1).x2 = 'liu'; a(1).x3 = [11, 21; 34, 78];
a(2).x1 = 12; a(2).x2 = 'wang'; a(2).x3 = [34, 191; 27, 578];
a(3).x1 = 14; a(3).x2 = 'cai'; a(3).x3 = [13, 890; 67, 231];

数组索引必须为正整数或逻辑值。

(2).单元矩阵

建立单元矩阵与建立一般矩阵类似,只是单元矩阵用{}形成。

1
2
3
%单元矩阵
b = {10, 'liu', [11, 21; 34, 78]; 12, 'wang', [34, 191; 27, 578]; ... %换行符
14, 'cai', [13, 890; 67, 231]; }

访问元素

1
2
a=b(1,3)
c=a{1}

矩阵元素的引用

  1. 通过下标来引用矩阵的元素,赋值时可以大于行数或列数,矩阵会自动扩展。(这条实际测试似乎不成立?)
  2. 通过序号来引用。
1
2
3
4
5
%矩阵元素的引用
A = [1, 2, 3; 4, 5, 6]
A(4, 5) = 10
% 实际——位置 1 处的索引超出数组边界(不能超出 2)。
A(3)

矩阵元素的序号与下标可以通过sub2ind和ind2sub函数实现互相转换:

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

1
2
A = [1:3; 4:6]
D = sub2ind(size(A), [1, 2; 2, 2], [1, 1; 3, 2])

ind2sub函数:将矩阵元素的序号转换为对应的下标。调用格式为:
$[I,J]=ind2sub(S,D)$
D:序号;
S:行数和列数组成的向量;
I:转换矩阵元素的行下标;
J:转换矩阵元素的列下标。

1
[I, J] = ind2sub([3, 3], [1, 3, 5])

利用冒号表达式获得子矩阵

子矩阵是指由矩阵中的一部分元素构成的矩阵。

表达式 含义
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行的全部元素

end运算符:表示某一维末尾元素的下标。

1
2
3
4
5
A = [1, 2, 3, 4, 5; 6, 7, 8, 9, 10; 11, 12, 13, 14, 15; 16, 17, 18, 19, 20]
A(1:2, :)
A(2:3, 1:2:5)
A(end, :)
A([1, 4], 3:end)

利用空矩阵删除矩阵的元素

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

删除某个矩阵的元素实际就是将该矩阵置空。

1
2
A = [1, 2, 3, 0, 0; 7, 0, 9, 2, 6; 1, 4, -1, 1, 8]
A(:, [2, 4]) = []

改变矩阵的形状

reshape(A,m,n):在矩阵总元素保持不变的前提下,将矩阵A重新排成$m*n$的二维矩阵。(注意:reshape函数只是改变原矩阵的行数和列数,但并不改变原矩阵的元素个数及其存储顺序)

1
2
x = [23, 45, 65, 34, 65, 34, 98, 45, 78, 65, 43, 76];
y = reshape(x, 3, 4)

A(😃:将矩阵A的每一列元素堆叠起来,成为一个列向量。

1
2
A = [-45, 65, 71; 27, 35, 91]
B = A(:) %reshape(A,6,1)

MATLAB基本运算

算术运算

基本算术运算

注意细节:

  1. MATLAB的算术运算是在矩阵意义下进行的,单个数据的算术运算只是矩阵运算的一种特例。
  2. 基本算术运算符包括:+,-,*,/(右除),\(左除),^(乘方)
  3. 对于左除和右除而言,若A矩阵是非奇异矩阵,则B/A等效于B*inv(A),A\B等效于inv(A)*B
1
2
3
4
5
6
A = [1, 2, 3; 4, 2, 6; 7, 4, 9];
B = [4, 3, 2; 7, 5, 1; 12, 7, 92];
C1 = B / A;
C2 = A \ B;
A = [1, 2, 3; 4, 5, 6; 7, 8, 0];
A ^ 2

加减运算:

  • 若两矩阵同型,则运算时两矩阵的相应元素相加减。
  • 若两矩阵不同型,则MATLAB将给出错误信息。
  • 一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一个元素进行加减运算。

乘法运算:

  • 矩阵A和B进行乘法运算,要求A的列数与B的行数相等,此时则称A、B矩阵是可乘的,或称A和B两矩阵维数和大小相容。
  • 如果两者的维数或大小不相容,则将给出错误信息,提示用户两个矩阵是不可乘的。

除法运算:

  • 在MATLAB中,有两种矩阵除法运算:右除/和左除\。如果A矩阵是非奇异方阵,则B/A等效于B*inv(A),A\B等效于inv(A)*B。
点运算

点运算符: $.*$、$./$、.\和​.^​四种。

两个矩阵的点运算是指它们对应元素进行相关运算,要求两个矩阵同型。

1
2
3
4
A = [1, 2, 3; 4, 5, 6; 7, 8, 9];
B = [-1, 0, 1; 1, -1, 0; 0, 1, 1];
C = A .* B
D = A * B

关系运算

<,<=,>,>=,==,~=六种,注意不等于(~=)的写法即可。

当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为1,否则为0。

  • 当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。
  • 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由0或1组成。

逻辑运算

&,|,~三种。

  • 若参与逻辑运算的是两个同型矩阵,那么将对矩阵相同位置上的元素按标量规则逐个进行运算,最终运算结果是一个与原矩阵同型的矩阵,其元素由1或0组成。
  • 若参与逻辑运算的一个是标量,一个是矩阵,那么将在标量与矩阵中的每个元素之间按标量规则逐个进行运算,最终运算结果是一个与矩阵同型的矩阵,其元素由1或0组成。

在算术运算、关系运算和逻辑运算中,算术运算的优先级最高,逻辑运算的优先级最低,但逻辑非运算是单目运算,它的优先级比双目运算要高。

MATLAB中字符串处理

字符串的表示

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

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

1
2
3
xm = 'Beihang University'
xm(1:3)
'I''m a teacher.'

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

1
2
ch = ['abcdef'; '123456'];
ch(2, 3)

字符串的操作

字符串的执行
1
2
3
t = pi;
m = '[t,sin(t),cos(t)]';
y = eval(m)

简而言之,eval函数相当于在命令行中输入命令

字符串与数值之间的转换

abs和double函数都可以用来获取字符串矩阵所对应的ASCII码数值矩阵。

char函数可以将ASCII码矩阵转化为字符串矩阵。

1
2
3
s1 = 'MATLAB';
a = abs(s1)
char(a + 32)
字符串的比较

字符串比较又两种方法:利用关系运算符或字符串比较函数。

  • strcmp(s1,s2):用来比较字符串s1和s2是否相等,如果相等,返回结果为1,否则返回0。
  • strncmp(s1,s2,n):用来比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0。
  • strcmpi(s1,s2):在忽略字母大小写前提下,比较字符串s1和s2是否相等,如果相等,返回1,否则返回0。
  • strncmpi(s1,s2,n):在忽略字符串大小写前提下,比较两个字符串前n个字符是否相等,如果相等,返回1,否则返回0。
1
2
3
'www0' >= 'W123'
strcmp('www0', 'W123')
strncmpi('Www0', 'w123', 1)
字符串的查找与替换

findstr(s1,s2):返回短字符串在长字符串中的开始位置。

strrep(s1,s2,s3):将字符串s1中的所有子字符串s2替换为字符串s3。

1
2
3
p = findstr('This is a test', 'is')
p = findstr('is', 'This is a test')
result = strrep('This is a test!', 'test', 'class')
  • Title: matlab-note-1
  • Author: Charles
  • Created at : 2023-02-03 12:57:52
  • Updated at : 2023-08-21 19:47:59
  • Link: https://charles2530.github.io/2023/02/03/matlab-note-1/
  • License: This work is licensed under CC BY-NC-SA 4.0.
Comments