Matlab学习笔记之基本知识

本文梳理记录Matlab的基本知识,为Simulink仿真打下基础。

矩阵和数组

矩阵和数组是 MATLAB® 中信息和数据的基本表示形式。

数组元素选取

  • 应用单个条件
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
rng default
A = randi(15,5)

A = 5×5

13 2 3 3 10
14 5 15 7 1
2 9 15 14 13
14 15 8 12 15
10 15 13 15 11

B = A < 9

B = 5x5 logical array

0 1 1 1 0
0 1 0 1 1
1 0 0 0 0
0 0 1 0 0
0 0 0 0 0

A(B)

ans = 8×1

2
2
5
3
8
3
7
1
  • 应用多个条件
1
2
3
4
5
6
7
8
9
A(A<9 & A>2)

ans = 5×1

5
3
8
3
7
  • 替换符合条件的值
1
2
3
4
5
6
7
8
9
A(A>10) = 10

A = 5×5

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

删除数组元素

1
2
A = [1 2 3 4 5];
A(3) = []; % 删除第三个元素

这样,数组 A 中的第三个元素就被删除了,它的值从 3 变成了 4。注意,这个操作会改变原始数组 A 的大小和内容,因此需要谨慎使用。

添加数组元素

1
2
3
4
5
6
7
# 方法一
A=[A;2]

# 方法二
A=[];
A(1)=2;
A(2)=3;

数据类型

  • 数值类型

MATLAB® 中的数值类包括有符号和无符号整数、单精度和双精度浮点数。默认情况下,MATLAB 以双精度浮点形式存储所有数值。

  • 字符和字符串

字符数组和字符串数组用于存储 MATLAB® 中的文本数据。

字符串拼接是常用操作,通常有三种方法,请参考:

日期时间数据类型 datetime、duration 和 calendarDuration 支持高效的日期时间计算、比较以及格式化显示方式。

使用duration时要注意跨 24:00:00 的问题

日期转字符串主要使用datestr函数:

1
2
t = [datetime('now');datetime('tomorrow')]
DateString = datestr(t)
  • 分类数组

categorical 是用于存储具有以下特征的数据的数据类型:此类数据值来自离散分类有限集合。

table 是一种适用于以下数据的数据类型:即以列的形式存储在文本文件或电子表格中的列向数据或者表格数据。表由若干行向变量和若干列向变量组成。表格中的每个变量可以具有不同的数据类型和大小,但有一个限制条件是每个变量的行数必须相同。

  • 时间表

timetable 是一种特定类型的表,其中每一行关联一个时间。与 table 一样,timetable 数据类型可以存储具有相同行数的列向数据变量。所有表函数都使用时间表。此外,时间表提供了特定于时间的函数,可对一个或多个时间表进行对齐、合并,以及执行计算。

  • 结构体

结构体数组是使用名为字段的数据容器将相关数据组合在一起的数据类型。每个字段都可以包含任意类型的数据。使用 structName.fieldName 格式的圆点表示法来访问结构体中的数据。

  • 元胞数组

元胞数组是一种包含名为元胞的索引数据容器的数据类型,其中的每个元胞都可以包含任意类型的数据。

  • 函数句柄

函数句柄是一种表示函数的 MATLAB® 数据类型。函数句柄的典型用法是将函数传递给另一个函数。例如,您可以将函数句柄用作基于某个值范围计算数学表达式的函数的输入参数。

函数句柄可以表示命名函数或匿名函数。要创建函数句柄,请使用 @ 运算符。

  • 字典

字典是一种将每个键与对应的值相关联的数据结构体。键和值可以采用任何数据类型,为数据访问提供优于数组索引的灵活性,并能提高性能。

  • 时间序列

时间序列表示动态规模或过程的时间演化。它们用于识别、建模和预测在离散时间间隔内采样的数据中的模式和行为。

对于此类型的数据,推荐使用时间表而非 timeseries 对象。时间表可以存储各种类型的时间戳数据,并具有广泛的支持函数来对齐、组合和执行计算。

  • 数据类型标识

MATLAB® 有许多函数可识别变量的数据类型或确定变量是否具有特定的数据类型。当调用或编写的代码依赖于具有特定数据类型的变量时,应使用这些函数。

  • 数据类型转换

MATLAB® 有许多函数可将值从一种数据类型转换为另一种数据类型,以用于不同的上下文。

Matlab App

Matlab App的设计开发请参考:

Matlab App的打包请参考:

Matlab函数设计

基本设计

函数的输入输出参数应该有明确的含义,最好通过参数名称即可识别。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function y = square(x)
%
% calculate the square of the given number 'x'
%
% Arguments:
%
% x (input) value to be squared
%
% y (output) the result of the square
%

y = x*x;

% end of square function

输入验证

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
function a = findArea(width,varargin)
defaultHeight = 1;
defaultUnits = 'inches';
defaultShape = 'rectangle';
expectedShapes = {'square','rectangle','parallelogram'};

p = inputParser;
validScalarPosNum = @(x) isnumeric(x) && isscalar(x) && (x > 0);
addRequired(p,'width',validScalarPosNum);
addOptional(p,'height',defaultHeight,validScalarPosNum);
addParameter(p,'units',defaultUnits,@isstring);
addParameter(p,'shape',defaultShape,...
@(x) any(validatestring(x,expectedShapes)));
parse(p,width,varargin{:});

a = p.Results.width*p.Results.height;
end
1
2
3
4
a = findArea(7);
a = findArea(7,3);
a = findArea(13,'shape','square');
a = findArea(13,'units',"miles",'shape','square');

参考链接

  1. 【Matlab学习笔记】(六)基本数据结构(矩阵定义方法),by 末树之墨.
  2. MATLAB中是否有“队列”?,by tencent.
  3. containers.Map, by mathworks.
  4. Matlab的memory模块消除代数环,by ilovematlab.
  5. Parameterize a Referenced Model Programmatically,by mathwork.
  6. 使用 App 设计工具创建并运行简单 App,by mathworks.
  7. MATLAB App Designer如何打包EXE安装程序,by 阿Q在江湖.
  8. MATLAB 数据类型,by mathwork.
  9. matlab 字符串拼接的3个方式:[]、strcat、sprintf,by qing101hua.
  10. 查找符合条件的数组元素,by mathworks.