Logo

搜索文章

Esc

请输入关键词开始搜索

输入关键词开始搜索
Overview

Matlab学习记录——变量

发布于 2026年7月29日 20:00
编辑于 2026年7月30日 11:52
3 分钟阅读
-

MATLAB 是动态类型语言:创建变量时不需要声明类型,类型由赋值内容决定。

MATLAB
a = 10;          % double
a = "hello";     % 现在变成 string

而且 MATLAB 的基本思想是:

几乎所有变量都是数组。标量只是 1×1 数组,向量和矩阵也是数组。

1. 数值类型

double:默认数值类型

直接书写的数字默认都是双精度浮点数:

MATLAB
a = 10;
b = 3.14;
A = [1 2; 3 4];

class(a)       % 返回 'double'

single:单精度浮点数

MATLAB
x = single(3.14);
  • double:64 bit,精度较高。
  • single:32 bit,内存较少。

整数类型

MATLAB 提供有符号和无符号整数:

例如:

MATLAB
a = int8(100);
b = uint32(500);

需要注意整数运算可能饱和:

MATLAB
a = int8(127);
b = a + int8(1);      % 仍为 127,而不是 128

复数

MATLAB 原生支持复数:

MATLAB
z = 3 + 4i;
real(z)       % 3
imag(z)       % 4
abs(z)        % 5

通信系统中处理调制信号时很常见。


2. logical:逻辑类型

逻辑值只有:

MATLAB
true
false

比较运算产生逻辑数组:

MATLAB
A = [1 3 5 2];

mask = A > 2
% mask = [false true true false]

逻辑数组可以筛选元素:

MATLAB
A(mask)
% 得到 [3 5]

对于矩阵而言:

MATLAB
H ~= 0

返回逻辑矩阵,表示 H 中哪些位置非零。

MATLAB
values_descending < thresholds(index)

也会返回逻辑数组。在数值加法中:

MATLAB
false 相当于 0
true  相当于 1

3. char:字符数组

单引号创建字符数组:

MATLAB
name = 'MIM-QMS';
class(name)           % char

本质上它是字符构成的数组:

MATLAB
name(1)               % 'M'
name(1:3)             % 'MIM'

比较两个字符数组通常使用:

MATLAB
strcmp(name1, name2)

不能习惯性地使用 ==,因为 == 会逐字符比较。


4. string:字符串类型

双引号创建 string:

MATLAB
name = "MIM-QMS";
class(name)           % string

字符串数组可以写成:

MATLAB
names = ["AWGN", "BSC", "BEC"];

char 和 string 的区别:

MATLAB
a = 'AWGN';       % char 字符数组
b = "AWGN";       % string 字符串标量

现代 MATLAB 通常更推荐 string,但很多旧代码和 fprintf 接口仍大量使用 char。

二者可以转换:

MATLAB
b = string(a);
a = char(b);

5. 普通数组

标量

MATLAB
a = 5;
size(a)          % [1 1]

行向量

MATLAB
a = [1 2 3 4];
size(a)          % [1 4]

列向量

MATLAB
b = [1; 2; 3; 4];
size(b)          % [4 1]

二维矩阵

MATLAB
A = [
    1 2 3
    4 5 6
];

多维数组

MATLAB
P = zeros(16, 2, 50);

这是一个 16×2×50 的三维数组。


6. 稀疏矩阵 sparse

稀疏矩阵只存储非零元素,适合 LDPC 校验矩阵:

MATLAB
H_sparse = sparse(H);

例如:

MATLAB
H = sparse(H ~= 0);

这一步同时完成:

  1. 把所有非零元素变为逻辑 1。
  2. 转换为稀疏存储。

可以检查:

MATLAB
issparse(H)

稀疏矩阵的数值类型通常仍然是 double 或 logical;sparse 描述的是存储方式,不完全等同于普通的数值类别。


7. cell:元胞数组

普通矩阵要求元素类型和尺寸基本统一。元胞数组则可以在不同位置存放不同类型、不同尺寸的数据。

使用花括号创建:

MATLAB
C = {42, "AWGN", [1 2 3]};

内容分别为:

MATLAB
C{1}:数字 42
C{2}:字符串
C{3}:数值向量

注意两种索引的区别:

MATLAB
C(1)       % 返回一个 1×1 cell
C{1}       % 取出 cell 内部的实际内容

8. struct:结构体

结构体通过字段组织多个相关变量:

Plain Text
cfg.iterations = 50;
cfg.quantization_bits = 4;
cfg.verbose = true;

字段可以包含不同类型:

Plain Text
person.name = "张三";
person.age = 20;
person.scores = [90 85 92];

假如是多层嵌套结构体:

Plain Text
params.cfg
params.channel
params.iterative
params.static
params.mex

继续访问内部字段:

Plain Text
params.cfg.iterations
params.channel.thresholds
params.iterative.PHI_v
params.mex.static.GAMMA_v

动态字段访问:

Plain Text
field_name = 'iterations';
value = cfg.(field_name);

等价于:

Plain Text
value = cfg.iterations;

9. function_handle:函数句柄

函数句柄相当于“可以保存在变量里的函数”。

指向已有函数:

Plain Text
f = @sin;
y = f(pi/2);

匿名函数:

Plain Text
square = @(x) x.^2;
square([1 2 3])

得到:

Plain Text
[1 4 9]

例如:

Plain Text
cleanup = onCleanup(@() fclose(file_id));

其中:

Plain Text
@() fclose(file_id)

是一个没有输入参数的匿名函数。需要清理时,MATLAB 会调用它关闭文件。


10. table:表格

table 类似电子表格或数据库表,每列可以具有不同类型:

Plain Text
name = ["甲"; "乙"];
age = [20; 22];
score = [90; 85];

T = table(name, age, score);

访问一列:

Plain Text
T.score

访问第一行:

Plain Text
T(1, :)

它适合实验统计和数据分析。


11. datetime、duration 和 categorical

日期时间

Plain Text
t = datetime('now');

时间长度

Plain Text
d = hours(2) + minutes(30);

分类变量

Plain Text
mode = categorical(["AWGN", "BSC", "AWGN"]);

这些主要用于数据分析。


12. object:对象

MATLAB 支持面向对象编程,可以通过 classdef 定义类:

Plain Text
classdef Decoder
    properties
        Iterations
    end

    methods
        function obj = Decoder(n)
            obj.Iterations = n;
        end
    end
end

13. 如何查看变量类型

最常用的是:

Plain Text
class(x)

例如:

Plain Text
x = uint32(10);
class(x)
% 'uint32'

查看变量的尺寸、类型和内存:

Plain Text
whos x

查看当前工作区所有变量:

Plain Text
whos

判断具体类型:

Plain Text
isnumeric(x)
islogical(x)
ischar(x)
isstring(x)
iscell(x)
isstruct(x)
issparse(x)
isa(x, 'uint32')

查看尺寸:

Plain Text
size(x)
numel(x)
ndims(x)

14. 常用类型转换

Plain Text
double(x)
single(x)

int8(x)
uint8(x)
int16(x)
uint16(x)
int32(x)
uint32(x)

logical(x)

char(x)
string(x)

cell(x)
struct(...)

需要注意,转换成整数时会舍入并受到整数范围限制:

Plain Text
int8(3.7)       % 得到 4
int8(200)       % 超过上限,得到 127

评论