我是靠谱客的博主 爱笑彩虹,这篇文章主要介绍MATLAB GUI 自学笔记:1. 预备知识_1基本运算元素数据类型矩阵操作,现在分享给大家,希望可以做个参考。

目录

基本运算元素

1. 变量

2. 工作空间

3. 特殊值

 4. 关键字

5. 运算符

数据类型

1. 数值型

整数

浮点数

复数

2. 逻辑型

3. 字符数组和字符串数组

4. 结构数组

5. 单元数组

6. 函数句柄

创建函数句柄

匿名函数

使用函数句柄的好处:

7. 日期和时间

矩阵操作

矩阵连接

重塑矩阵形状

矩阵元素移位和排序

向量(数集)操作


基本运算元素

1. 变量

clearvars 可以清除内存中某些或全部变量,同时可以保留制定变量

复制代码
1
clearvars - except b

变量类型:

  • 局部变量
  • 全局变量
复制代码
1
global a

 全局变量要放在开始出声明

  • 永久变量
复制代码
1
persistent a

2. 工作空间

变量存储在一块内存区域中,称为“基本工作空间” - 脚本文件或命令行创建的变量存在其中

函数不使用基本工作空间,有自己的函数空间

函数空间中生成的变量,只在函数空间内有效;基本 - 基本

函数空间中指派变量到基本工作空间,使用assignin函数

复制代码
1
assingin(workSpace,'varName',varValue)

即指派变量varName到workSpace中,且初始值为varValue

workSpace为‘base’表示基本工作空间;取值为‘caller’表示调回函数空间

不能在基本工作空间中指派变量到函数空间

3. 特殊值

 4. 关键字

查看或检查关键字:

复制代码
1
iskeyword('if')

5. 运算符

  • 算术运算
  • 关系运算
  • 逻辑运算
  • 位运算
  • 特殊运算

数据类型

1. 数值型

默认将所有数值存为double,但整数和单精度更节省空间

所有数值型都支持基本的数组操作,如下标操作和尺寸重塑。

?除int64和uint64外都可用于数学运算

整数

常见整数操作函数

  • ceil - 向无穷大方向取整
  • floor - 向无穷小方向取整
  • fix - 向0取整
  • round - 四舍五入
  • isinteger - 判断是否为整数数组
  • isnumeric - 判断是否为数值数组

浮点数

以double为例(双精度 64位)

s - 63 - 符号位:0为正 1为负

e - 62~52 - 指数部分:偏移量为1023

f - 51~0 - 小数部分

 value = (-1)^s × 2^(e-1023) × 1.f                   —— 一般情况

double可以将其他数值型数据、字符或逻辑树转换成双精度

浮点数操作函数

  • isfloat - 检查是否为浮点数
  • realmax - 返回计算机能表示的最大浮点数
  • realmin - 返回计算机能表示的最小浮点数
  • eps - 浮点相对精度
  • isreal - 检查数组所有元素是否为实数

复数

产生复数的方法

  • 直接生成(不能产生0为虚部的复数)
  • complex函数生成
复制代码
1
2
3
4
5
complex(a,b) c = a + bi complex(a) c = a + 0i

real - 提取实部

imag - 提取虚部

format改变数值显示方式,不影响运算结果

2. 逻辑型

any  - 全假返回假,否则返回真

all - 全真返回真,否则返回假

any(A,dim) - dim = 1 返回行向量,对列向量进行计算

                    dim = 2 返回列向量,对行向量进行计算

3. 字符数组和字符串数组

matlab中区分字符数组与字符串数组的方法为

字符数组用单引号 ‘’ 表示 元素为字符

字符串数组用双引号 “” 表示 元素为字符序列

复制代码
1
2
3
4
5
6
7
8
9
10
>> a = 'hello';b = "hello"; >> whos a Name Size Bytes Class Attributes a 1x5 10 char >> whos b Name Size Bytes Class Attributes b 1x1 150 string

关于字符串“string”占用了150个字节是因为本身字符串的表征就需要占用一定大小,字符串所占空间以阶梯形式进行变化

正则表达式相关函数

regexp、regexpi、regexprep、regexptranslate

正则表达式理解:

在编写处理字符串的程序或网页时,经常会有查找符合某些复杂规则的字符串的需要。正则表达式就是用于描述这些规则的工具。换句话说,正则表达式就是记录文本规则的代码

4. 结构数组

用字段来容纳数据的matlab数组

创建结构的方法

  • 使用点号运算符
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>> results.name = 'xin'; >> results.rank = 1; >> results.score = [100 100 100]; >> results results = 包含以下字段的 struct: name: 'xin' rank: 1 score: [100 100 100] %扩充数组 >> results(2).name = 'liu'; >> results(2).rank = 2;
  • 利用struct函数创建结构数组
复制代码
1
>> s = struct('name',{'xin','liu'},'rank',{1,2})

5. 单元数组

单元数组是在一个数组中包含多个单元(cell),每个单元作为一个独立存储单元存储数据

通过矩阵索引操作获取数据 

创建单元数组的方法

  • 使用大括号赋值语句

单元索引:把序号放在()中,右边将单元内容放在花括号中

复制代码
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
34
35
>> um(1) = {{'love','xin'}}; >> um(2) = {['1997','0420']}; >> um(3) = {['for','ever']} um = 1×3 cell 数组 {1×2 cell} {'19970420'} {'forever'} %这里的um(1)是一个cell,因此无法直接显示,需要用{}的索引才可以看到cell里面的内容 >> um{1}(1) ans = 1×1 cell 数组 {'love'} >> um{3} ans = 'forever' >> um(3) ans = 1×1 cell 数组 {'forever'} %索引不同也可以看到收到的是不同的层级

内容索引:复制语句左边,将单元下标放在花括号中;右边指定单元内容

内容与单元索引的区别是:使用单元索引出来的是该单元{}表示,使用内容索引出来的是该单元内的内容,在创建时侯的效果是一样的

6. 函数句柄

提供了简介调用函数的方法

创建函数句柄

  • @运算符
复制代码
1
2
>> fh1 = @sin; >> fh2 = @(x)sin(x);
  • str2func函数
复制代码
1
>> fh3 = str2func('sin');
  • matlabFunction函数
复制代码
1
2
>> fh4 = matlabFuncyion(sin(x)); %使用该命令前用 syms x 命令创建符号变量

验证是否成功创建函数句柄

复制代码
1
2
3
4
>> feval(fh1,pi/2) ans = 1

matlab映射句柄到指定的函数,并在句柄中保存映射信息

如果同名函数有多个,函数按一定优先级调用

可以用which函数查询调用

  • 函数调用可以提高函数的执行效率(反复调用时)
  • 函数句柄可以用来标识子函数、私有函数和嵌套函数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function out = myDiff(a,b) if (a>b) out = feval(@fun1,a,b); else out = feval(@fun1,b,a); end end function out = fun1(a,b); out = a - b; end >> myDiff(1,2) ans = 1
  • 可以使用str2func 实现操作对象的函数
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
>> h_sin = str2func('sin') h_sin = 包含以下值的 function_handle: @sin >> feval(h_sin,pi) ans = 1.2246e-16

在这里h_sin和@sin是等价的

  • 可以在创建的函数中使用某一函数
复制代码
1
2
3
4
5
6
7
function x = plotSin(fhandle,data) plot(data,fhandle(data)) end >> plotSin(h_sin,t) >> plotSin(@sin,t) % 均可正常运行

匿名函数

没有函数名只有函数句柄的特殊函数

即没有function out = 函数名(in),没有生成m文件,只有一个函数句柄

复制代码
1
2
3
4
5
6
7
8
9
>> plotSin2 = @(x) plot(x,sin(x)) plotSin2 = 包含以下值的 function_handle: @(x)plot(x,sin(x)) >> plotSin2(t)

匿名函数编写的代码很简洁,并且执行效率很高

函数名 = @(vars1,vars2,...) 表达式/函数

使用函数句柄的好处:

1. 提高运行速度?

2. 使用可以与使用变量一样方便

3. 可以将函数句柄作为输入参数传递给GUI对象

4. 函数句柄是将函数“变量化”,因此可以实现批量函数的执行(arrayfun)

复制代码
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
34
>> fun{1} = rand(3,6); >> fun{2} = rand(4,6); >> fun{3} = rand(6,6); >> counts = arrayfun(@(x) numel(x{:}), fun) counts = 18 24 36 % 在counts里面 @(x) numel(x{:}) 为匿名函数, fun为自变量 >> func{1} = @() rand(3,6); >> func{2} = @() rand(4,6); >> func{3} = @() rand(6,6); >> counts = arrayfun(@(y) timeit(y{:}), func) counts = 1.0e-06 * 0.4110 0.3879 0.4740 % 观察到如果这里用的是fun将会出现提示:第一个参数必须为不带输入参数的函数句柄。 因为timeit需要对函数进行时间计算,而fun实则为一个数组,func才是一个函数 >> counts = arrayfun(@(y) numel(y{:}), func) counts = 1 1 1 % 此时可以观察到func的元素个数均为1

7. 日期和时间

三种格式:

日期字符串 

串行日期数(serial date numbers)

日期向量

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
% 日期字符串 >> date ans = '18-Sep-2022' % 串行日期数 >> now ans = 7.3878e+05 %日期向量 >> clock ans = 1.0e+03 * 2.0220 0.0090 0.0180 0.0160 0.0580 0.0227

格式转换

datestr 转换为日期字符串 (使用最多)

datenum 转换为串行日期数

datevec 转换为日期向量

str = datestr(DT, dataform)

矩阵操作

矩阵连接

如果是两个不同类型的矩阵将按照优先级进行连接

[a;b] - cat(1,a,b) - vercat(a,b)

[a,b] - cat(2,a,b) - horzcat(a,b)

[a;a] - repmat(a,[2 1])

[a a] - repmat(a,[1,2])

重塑矩阵形状

length - 返回矩阵最长维的长度

size - 返回矩阵每一维长度

numel - 返回矩阵的元素数

ndims - 返回矩阵的维数

reshape - 重塑矩阵形状

B = reshape(A,m,n) or B = reshape(A,[m n]) 确定的m*n矩阵

B = reshape(A,m,[]) or B = reshape(A,[],n) 仅确定一个维度,另一维度由计算机确定(无法整除会报错)

重塑为列向量用(:) 行向量为(;)

矩阵元素移位和排序

circshift 循环移动矩阵的元素

sort 对数组行或列进行升序或降序排列

sortrows 含列值的升序或降序排列行

issorted 确定数组元素是否排序

[B, index] = sort(A, dim, mode)

dim - 1 对每列的元素排序 2 对每行的元素排序

mode - ascend 升序 descend 降序

[B, index] = sortrows(A, column)

对A的行按列的升值排序,column为正数 升序,负数 降序

向量(数集)操作

行或列维数为1的是向量

数集为元素互斥的向量

最后

以上就是爱笑彩虹最近收集整理的关于MATLAB GUI 自学笔记:1. 预备知识_1基本运算元素数据类型矩阵操作的全部内容,更多相关MATLAB内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(90)

评论列表共有 0 条评论

立即
投稿
返回
顶部