变量与常量 #
一、变量基础 #
1.1 变量定义 #
MATLAB是动态类型语言,变量无需声明类型:
matlab
% 直接赋值创建变量
x = 10;
name = 'MATLAB';
arr = [1 2 3 4 5];
% 查看变量类型
class(x) % double
class(name) % char
class(arr) % double
1.2 命名规则 #
matlab
% 有效变量名
myVar = 1;
my_var = 2;
MyVar = 3;
var123 = 4;
_var = 5;
% 无效变量名
% 123var = 1; % 不能以数字开头
% my-var = 2; % 不能包含连字符
% my var = 3; % 不能包含空格
% class = 4; % 不能使用关键字
1.3 命名规范 #
| 类型 | 规范 | 示例 |
|---|---|---|
| 普通变量 | 小写,下划线分隔 | student_name |
| 循环变量 | 简短 | i, j, k |
| 常量 | 大写,下划线分隔 | MAX_SIZE |
| 临时变量 | 简短或下划线开头 | temp, _tmp |
1.4 变量操作 #
matlab
% 查看所有变量
whos
% 查看特定变量
whos x y
% 清除变量
clear x % 清除变量x
clear x y % 清除多个变量
clear % 清除所有变量
clearvars -except x % 清除除x外的所有变量
% 检查变量是否存在
exist('x', 'var') % 存在返回1,不存在返回0
% 保存变量到文件
save('mydata.mat', 'x', 'y');
save('all_data.mat'); % 保存所有变量
% 从文件加载变量
load('mydata.mat');
x = load('mydata.mat', 'x'); % 只加载x
二、特殊变量 #
2.1 预定义变量 #
matlab
% 计算结果
ans % 最近一次未赋值的计算结果
% 数学常量
pi % 圆周率 π ≈ 3.14159
eps % 浮点数精度 ≈ 2.22e-16
% 特殊值
Inf % 无穷大
-Inf % 负无穷大
NaN % 非数字(Not a Number)
% 虚数单位
i % 虚数单位 √(-1)
j % 同i
% 数值范围
realmax % 最大浮点数
realmin % 最小正浮点数
intmax % 最大整数
intmin % 最小整数
2.2 使用示例 #
matlab
% ans - 自动存储结果
>> 1 + 2
ans =
3
>> ans * 2
ans =
6
% pi - 圆周率
>> area = pi * 5^2
area =
78.5398
% Inf 和 NaN
>> 1/0
ans =
Inf
>> 0/0
ans =
NaN
>> Inf + Inf
ans =
Inf
>> Inf - Inf
ans =
NaN
% 虚数单位
>> z = 3 + 4i
z =
3.0000 + 4.0000i
>> abs(z)
ans =
5
% 注意:不要用i和j作为循环变量
% 不推荐
for i = 1:10
z = 2 + 3i; % 错误:i被覆盖
end
% 推荐
for k = 1:10
z = 2 + 3i; % 正确
end
2.3 检查特殊值 #
matlab
% 检查无穷大
x = 1/0;
isinf(x) % 返回 true
% 检查NaN
y = 0/0;
isnan(y) % 返回 true
% 检查有限值
isfinite(x) % 返回 false
isfinite(5) % 返回 true
% NaN比较的特殊性
NaN == NaN % 返回 false
NaN ~= NaN % 返回 true
% 正确的NaN检查方法
isnan(NaN) % 返回 true
三、常量 #
3.1 定义常量 #
MATLAB没有内置的常量概念,但可以通过命名约定和编程实践实现:
matlab
% 使用大写命名约定
MAX_ITERATIONS = 100;
DEFAULT_VALUE = 0;
PI_APPROX = 3.14159;
% 使用persistent变量
function value = getConstant()
persistent CONSTANT_VALUE;
if isempty(CONSTANT_VALUE)
CONSTANT_VALUE = 42;
end
value = CONSTANT_VALUE;
end
3.2 使用常量类 #
matlab
% Constants.m
classdef Constants
properties (Constant)
PI = 3.141592653589793;
E = 2.718281828459045;
MAX_SIZE = 1000;
GRAVITY = 9.81;
end
end
% 使用常量
area = Constants.PI * radius^2;
四、全局变量 #
4.1 定义全局变量 #
matlab
% 在脚本中
global GLOBAL_COUNTER
GLOBAL_COUNTER = 0;
% 在函数中使用
function increment()
global GLOBAL_COUNTER
GLOBAL_COUNTER = GLOBAL_COUNTER + 1;
fprintf('Counter: %d\n', GLOBAL_COUNTER);
end
4.2 全局变量注意事项 #
matlab
% 不推荐过度使用全局变量
% 原因:
% 1. 难以追踪数据流
% 2. 容易产生bug
% 3. 函数间耦合度高
% 推荐使用参数传递
function result = processData(data, config)
% 使用参数而非全局变量
result = data * config.multiplier;
end
五、持久变量 #
5.1 定义持久变量 #
matlab
function counter = countCalls()
persistent callCount;
if isempty(callCount)
callCount = 0;
end
callCount = callCount + 1;
counter = callCount;
end
5.2 持久变量特点 #
matlab
% 持久变量:
% 1. 在函数调用之间保持值
% 2. 只在定义它的函数内可见
% 3. 类似于C语言的static局部变量
% 示例:累加器
function total = accumulator(value)
persistent sum;
if isempty(sum)
sum = 0;
end
sum = sum + value;
total = sum;
end
% 调用
>> accumulator(10)
ans =
10
>> accumulator(5)
ans =
15
>> accumulator(3)
ans =
18
六、变量类型转换 #
6.1 数值类型转换 #
matlab
% 整数转换
x = 3.7;
int32(x) % 3(截断)
round(x) % 4(四舍五入)
floor(x) % 3(向下取整)
ceil(x) % 4(向上取整)
% 浮点数转换
y = 10;
double(y) % 转换为双精度
single(y) % 转换为单精度
% 类型检查
isinteger(int32(5)) % true
isfloat(3.14) % true
isnumeric(5) % true
6.2 字符串与数值转换 #
matlab
% 数值转字符串
num2str(123) % '123'
int2str(456) % '456'
mat2str([1 2 3]) % '[1 2 3]'
% 字符串转数值
str2num('123') % 123
str2double('3.14') % 3.14
str2num('[1 2; 3 4]') % [1 2; 3 4]
% 格式化转换
sprintf('%.2f', 3.14159) % '3.14'
sscanf('123 456', '%d') % [123; 456]
七、变量信息查询 #
7.1 基本查询 #
matlab
% 变量大小
x = [1 2 3; 4 5 6];
size(x) % [2, 3]
size(x, 1) % 2(行数)
size(x, 2) % 3(列数)
% 数组长度
length(x) % 3(最大维度)
numel(x) % 6(元素总数)
% 变量类型
class(x) % 'double'
% 变量信息
whos x
7.2 类型判断函数 #
matlab
% 数值类型
isnumeric(x) % 是否为数值
isinteger(x) % 是否为整数
isfloat(x) % 是否为浮点数
isreal(x) % 是否为实数
isfinite(x) % 是否为有限值
% 数组类型
isvector(x) % 是否为向量
ismatrix(x) % 是否为矩阵
isscalar(x) % 是否为标量
isempty(x) % 是否为空
% 其他类型
ischar(x) % 是否为字符数组
isstring(x) % 是否为字符串
islogical(x) % 是否为逻辑值
iscell(x) % 是否为元胞数组
isstruct(x) % 是否为结构体
八、最佳实践 #
8.1 变量命名建议 #
matlab
% 好的命名
student_count = 30;
average_score = 85.5;
is_valid = true;
file_path = '/data/input.csv';
% 不好的命名
x = 30; % 含义不明
sc = 85.5; % 缩写不清
flag = true; % 应该说明是什么标志
8.2 变量作用域管理 #
matlab
% 使用函数封装,避免全局变量
function result = processData(inputData)
% 局部变量
temp = preprocess(inputData);
result = analyze(temp);
end
% 必要时使用结构体传递多个参数
config.maxIterations = 100;
config.tolerance = 1e-6;
config.verbose = true;
result = solve(config);
8.3 内存管理 #
matlab
% 预分配数组大小
n = 10000;
data = zeros(n, 1); % 预分配
for i = 1:n
data(i) = rand();
end
% 避免动态扩展
% 不推荐
data = [];
for i = 1:10000
data = [data; rand()]; % 每次重新分配
end
% 及时清除大变量
largeData = rand(10000, 10000);
result = sum(largeData(:));
clear largeData; % 释放内存
九、总结 #
本章学习了:
- 变量定义:动态类型,直接赋值
- 命名规则:字母开头,区分大小写
- 特殊变量:ans、pi、Inf、NaN、i、j
- 常量:命名约定和常量类
- 全局变量:global关键字
- 持久变量:persistent关键字
- 类型转换:数值和字符串转换
- 最佳实践:命名规范、作用域管理
下一章将学习MATLAB的数值类型。
最后更新:2026-03-27