目录
1.4 MATLAB常用函数及应用
1.4.1常用数学函数
基本函数
函数名 | 含义 | 函数名 | 含义 | |||
syms | 定义符号变量syms x y ; | sym('f') | 定义符号表达式 (字符串) | |||
sqrt(x) | 平方根 | eval() | 字符串→数值 eval('5') = 5 | |||
gcd(x,y) | x和y的最大公约数 | lcm(x,y) | x和y的最小公倍数 | |||
pi | 圆周率(π大小写) | size(x) | 矩阵最大元素数 | |||
vpa(x, k) | 取x的数值,保留k位有效数字 vpa(1/3, 2) = 0.33 | |||||
rem(x) | 余数,符号不同取决x | |||||
factorial(n) | n的阶乘 | nchoosek(x,m) | 组合数 f=nchoosek(5,3)= 5!/(5-3)!/3! | |||
log(x) | 自然对数 | pow2(x) | 2为底,x的幂 | |||
log2(x) | 以2为底对数 | exp(x) | 以e为底的指数 | |||
power(x,y) | x为底,y为幂 | log10(x) | 以10为底的对数 | |||
complex(a,b) | 生成a+bi的复数 | conj(z) | 复数z的共轭复数 | |||
round(x) | 最接近x的整数 | real(z) | 复数x的实部 | |||
angle(x) | 复数z的相角 | imag(z) | 复数x的虚部 | |||
数据分析函数
函数名 | 含义 | 函数名 | 含义 |
max(x) | 每列的最大值 | min(x) | 每列的最小值 |
mean(x) | 各元素的平均值 | median(x) | 中位数值 |
sum(x) | 元素的总和 | prod(A) | 元素的积 |
cumsum(x) | 累加 | cumprod(x) | 累乘 |
std(x) | 标准差 | var(x) | 方差 |
abs(x) | 绝对值 | sqrt(x) | 平方根 |
mode(x) | 众数 | sign(x) | 符号函数(-1 0 1) |
向量/矩阵初始化与生成
函数名 | 含义 | 函数名 | 含义 | |||||
sort(x) | 对矩阵x按列排序 | prod(x) | 矩阵x的列乘积 | |||||
pinv(x) | 伪逆矩阵 | inv(x) | 矩阵的逆 | |||||
dot(x,y) | 向量x,y的点积 | cross(a, b) | 向量a叉乘向量b | |||||
det(x) | 行列式的值 | perms(x) | 向量x的全排列 | |||||
length(x) | 向量阵的长度 最大行或列数 | std(x) | 返向量x的标准公差 | |||||
nxz(x) | 非0元素个数 | rank(x) | 矩阵的秩 | |||||
trace(x) | 矩阵对角元素的和 | linspace(x1,x2,n) | x1和x2之间n个点 | |||||
sum(x) / sum(A) | 向量所有元素 / 矩阵各列的和 x = sum([1,2]) = 3 | mean(x) / mean(A) | 向量所有元素 / 矩阵各列的均值 mean([1 2 3 4 5]) = 3 | |||||
min(A) / max(A) | 矩阵最小值 / 最大值 | size(A) / size(A,1) / size(A,2) | 矩阵A的形状 / 行数 / 列数 |
1.4.2常用三角函数

角度:将圆周 360 等份,每一份为 1 度 | 弧度:弧长与半径相等时,该弧所对圆心角为 1 弧度(记为1rad ) |
1.4.3常用取整函数
round(x) | 四舍五入→最近数 | floor(x) | 向下取整 | |
fix(x) | 舍去小数→近整数 | ceil(x) | 向上取整 |
1.4.4随机函数
随机数
rand(n) | 均匀分布随机数 | n为阶数 | (0-1) | |||
rand | 0-1的随机数 | rand(m,n) | 0-1 | m*n随机数矩阵 | |
randn(n) | 正态分布随机数 | randi(n) | 生成一个1-n的随机整数 |
特殊的随机函数,可以确定随机矩阵的值范围 | |
randi([xmin xmax], m, n) | 随机分布的整数(m或n省略其中一个为方阵) |
R = gamrnd(A, B) | % 生成服从参数为A和B的伽马分布的随机数 | |
R = gamrnd(A, B, m) | % 生成m×m的随机数矩阵 | |
R = gamrnd(A, B, m, n) | % 生成m×n的随机数矩阵 | |
R = gamrnd(A, B, [sz1...]) | % 生成指定大小的多维数组 | |
参数说明: A:形状参数(Shape parameter,必须为正数) B:尺度参数(Scale parameter,必须为正数) m, n, ...:指定输出数组的维度。 | ||
生成单个随机数 A = 2; % 形状参数 B = 3; % 尺度参数 r = gamrnd(A, B); % 生成一个服从Gamma(2,3)的随机数 | 生成随机数矩阵 A = 2; B = 3; R = gamrnd (A, B, 3, 4); % 生成3×4的随机数矩阵 | 可视化伽马分布 A = 2; B = 1; r = gamrnd(A, B, 1000, 1); % 生成1000个随机数 histogram(r, 30, ormalization', 'pdf'); % 绘制直方图(归一化为概率密度) % 叠加理论概率密度函数 x = 0:0.1:15; pdf = x.^(A-1).*exp(-x/B)/(B^A * gamma(A)); hold on; plot(x, pdf, 'r-', 'LineWidth', 2);hold off; |
1.4.5转换函数
str2num(‘str’) | 字符串→数值 | lower(‘str’) | 字符串→小写 |
num2str(num) | 数值→字符串 | upper(‘str’) | 字符串→大写 |
√√√√1.4.6字符串处理函数
1 |
字符串
字符数组 | 输出字符数组 disp(['a' 'b'])→ab | ||
字符串 | 字符数组→字符串 b=char(['a' 'b'])→‘ab’ | 输出字符串 disp(‘hello’) |
去掉字符串末尾的空格 | blanks(n) | 创建由n个空格组成的字符串 | |
findstr(s1,s2) | 字符串s1是否存在字符串s2中 | strcat(s1,s2) | 字符串s1和s2横向连接组合 |
strrep(s1,s2,s3) | 从字符串s1中找到s2,并用s3替代 | strvcat(s1,s2) | 字符串s1和s2竖向连接组合 |
strncmp(s1,s2,n) strcmp(s1,s2) | 比较字符串s1和s2的前n个字符 | strjust (s1,对齐方式) | 对齐方式: ‘left’‘right’‘center’ |
提取+转换==遍历for
length(s) | for i=1:length(s) 转换、提取 end | str2num(str(i)) |
disp() | 小写-32=大写 str='a'-32 s=char(str) |
strmatch() | 寻找符合条件的行 |
示例 1:前缀匹配(矩阵字符) str_array = ['apple '; 'banana '; 'apricot']; 要串联的数组的维度不一致 indices = strmatch('ap', str_array); % 返回 1 3(第1行和第3行以'ap'开头) 示例 2:前缀匹配(元胞字符) str_array = {'apple', 'banana', 'apricot'};无数组维度问题 indices = strmatch('ap', str_array); % 返回 1 3 示例 3:完全精确匹配 str_array = {'apple', 'APPLE', 'Banana'}; indices = strmatch('apple', str_array, 'exact'); % 返回 [1](仅第1行完全匹配) | |
strtok(s1,s2……) | 用于从字符串中提取第一个标记(token) 直到→指定的分隔符为止 |
示例 1:使用默认分隔符(空格) str = 'Hello world, MATLAB!'; token = strtok(str); % token = ' Hello ' [token, rest] = strtok(str); % token = 'Hello', rest = 'world, MATLAB!' 示例 2:指定分隔符 str = 'apple,banana,orange'; token = strtok(str, ','); % token = 'apple' [token, rest] = strtok(str, ','); % token = 'apple', rest = 'banana,orange' 示例 3:指定分隔符 s1='我们正在学习MATLAB' s2='MATLAB' strtok(s1,s2) → '我们正在学习' |
s1='我们正在学习MATLAB'; s2 = 'MATLAB' | |
A=findstr(s1,s2) | 返回字符串s2在s1中的位置,不存在返空矩阵 |
B=strcat(s1,s2) | 连接s1和s2 |
C=strrep(s1,s2,’simulink’) | 若字符串s1中有字符串s2,则使用’’内容替换 |
D=strtok(s1,s2) | 若字符串s1中有字符串s2,去掉相同部分 |
练习
字符串拼接与格式化 | 将变量 name = 'Alice'、age = 25、height = 1.65 合并为字符串 "Alice is 25 years old, height 1.65m." |
name = 'Alice'; age = 25; height = 1.65; result = sprintf('%s is %d years old, height %.2fm.', name, age, height); disp(result); % 输出:Alice is 25 years old, height 1.65m. |
字符串分割与提取 split() | 将字符串 "apple,banana,orange,grape" 按逗号分割为单元格数组,并提取第 3 个元素。 |
str = "apple,banana,orange,grape"; parts = split(str, ','); % 分割为字符串数组 third_fruit = parts{3}; % 提取第3个元素 disp(third_fruit); % 输出:orange |
字符串替换replace | 将字符串 "Hello World!" 中的所有 'o' 替换为 '0'。 |
str = "Hello World!"; new_str = replace(str, 'o', '0'); disp(new_str); % 输出:Hell0 W0rld! |
正则表达式匹配 | 从字符串 "Email: user@example.com, Phone: 123-456-7890" 中提取邮箱地址。 |
str = "Email: user@example.com, Phone: 123-456-7890"; pattern = '\w+@\w+\.\w+'; % 邮箱正则模式 email = regexp(str, pattern, 'match'); disp(email{1}); % 输出:user@example.com |
字符串大小写转换 | 将字符串 "Matlab Programming" 转换为全小写,再将首字母大写。 |
str = "Matlab Programming"; lower_str = lower(str); % 转小写:"matlab programming" cap_str = upper(lower_str(1)) + lower_str(2:end); % 首字母大写 disp(cap_str); % 输出:Matlab programming |
文件路径处理 | 从路径 "C:\Documents\data\sample.txt" 中提取文件名(不含扩展名)和目录。 |
path = "C:\Documents\data\sample.txt"; [folder, name, ext] = fileparts(path); disp(name); % 输出:sample disp(folder); % 输出:C:\Documents\data |
字符串统计 | 统计字符串 "abracadabra" 中字母 'a' 出现的次数。 |
str = "abracadabra"; count = sum(str == 'a'); % 统计字符相等的元素个数 disp(count); % 输出:5 |
字符串排序 | 对字符串数组 ["banana", "apple", "cherry"] 按字典序排序。 |
fruits = ["banana", "apple", "cherry"]; sorted_fruits = sort(fruits); disp(sorted_fruits); % 输出:"apple" "banana" "cherry" |
字符串反转 | 反转字符串 "hello"。 |
str = "hello"; reversed_str = fliplr(str); % 左右翻转字符串 disp(reversed_str); % 输出:olleh |
字符串拼接与循环 | 生成字符串 "1+2+3+...+10" |
result = ""; for i = 1:10 result = [result, num2str(i)]; if i < 10 result = [result, '+']; end end disp(result); % 输出:1+2+3+4+5+6+7+8+9+10 |
字符串去重 | 从字符串 "abcaabcd" 中删除重复字符,保留首次出现的字符 |
str = "abcaabcd"; unique_str = ""; for c = str if ~contains(unique_str, c) unique_str = [unique_str, c]; end end disp(unique_str); % 输出:abcd |
字符串转数字 | 将字符串 "3.14" 转换为数值类型,并计算其平方。 |
str = "3.14"; num = str2double(str); % 转换为双精度数值 square = num^2; disp(square); % 输出:9.8596 |
1.4.7判断函数
isnumeric(x) | 判断x是否为数值类型 | exist(x) | 判断参数变量是否存在 |
isa(x,’integer’) | 判断x是否为引号中指定的数据类型 | ismember(a,b) | 判断矩阵(向量a是否包含b) |
isprime(x) | 判断x是否为质数 | isreal(x) | 判断x是否为实数 |
isfine(x) | 判断x是否为有限数 | isinf(x) | 判断x是否为无穷大数 |
练习
判断矩阵A是否包含矩阵B A=[1 2 3;4 5 6;7 8 9]; B=[1 3 3;4 6 5;8 9 7]; c=ismember(A,B) →返回矩阵,真为1;假为0 |
判断矩阵数据类型 p=[1 2 1 5]; n=isreal(p) p1=[1+5i 2+6i 3+7i 4+8i]; n1=isreal(p1) x=2.34; n2=isnumeric(x) x1='sjdnks'; n3=isnumeric(x1) |
1.4.8查找函数
定义:在一定范围内查找某个特定的值或字符串,并返回其在该范围内的位置或索引值
find(A) | 查询矩阵A非0元素位置 | |
[m,n]=find(A) | 矩阵A非0元素坐标 | |
[m,n]=find(A>2) | 矩阵A中大于2的元素坐标,m为行,n为列 | |
[m,n,v]=find(A) | 返回矩阵A中非0项的坐标,将数值放在v中 |
练习
建立3*3的魔方矩阵,a=magic(3) | |
| [m,n]=find(a>3) |
| find(a(:,2)==5) |
| [m1,n1]=find(a==5) |
1.4.9测试向量(矩阵)0元素函数
1.4.10日期和时间函数
now() | 获取当前时间到000年的天数,以浮点型常量表示 | datenum(日期) | 获取000年到给定时间的天数 | |||||
datetime() | 获取当前日期,时间,显示字符datetime | calendar(年,月) | 获取当前月的日历,包括日期和星期 | |||||
date() | 得到当前的日-月-年 | |||||||
month(日期) | 获取指定日期的月份 | year(日期) | 获取指定日期的年份 | |||||
day(日期) | 获取指定日期 | |||||||
today() | 获取当前时间到000年的天数,以整数表示 | weekday(日期) | 给出指定日期的星期数+1 | |||||
yeardays(年份) | 获得某一年多少天 | eomday(年,月) | 给指定年月最后一天日期 | |||||
etime(t1,t2) | 估算t2→t1命令时长 | tic() | 记录程序完成时间,tic配对使用 | |||||
toc() | 记录matlab命令执行时间并保存当前时间 |
练习
a=weekday('2025-7-15') | 指定日期的星期数,周日为1→周六为7 |
1.4.11标准差函数
标准差:测量数据分散程度的方法 | ||
y=std(A,flag,dim) | dim维数(1或2);flag(1或0)【默认dim=1,flag=0】 | |
dim=1:各列元素的标准差 | dim=2:各行元素标准差 | |
flag=0:计算标准差 | flag=1:计算方差 |
1.5MATLAB数组表示
1.5.1结构数组
→定义结构体数组
结构体数组:根据字段组合起来的不同类型的数据集合 | 直接赋值 / 结构函数 |
strArray=struct(‘field1’,val1,’field2’,val2,…) | field,val:字段和对应值 |

结构函数 stu_1=struct('aa','ssd','xuehao','00001','chengji',[1 2 3;4 5 6]) stu_2=struct('xingming','adee','xuehao','00001','chengji',[1 2 3;4 5 6]) |
直接赋值 student_1.xingming='zhangsan'; student_1.xuehao='00001'; student_1.chengji=[1 2 3;4 5 6]; student_2.xingming='lisi'; student_2.xuehao='00002'; student_2.chengji=[7 8 9;1 2 3] |
person1.name = 'John'; person1.age = 25; | person2.name = 'Emma'; person2.age = 30; |
persons = {person1, person2}; |
→使用结构体数组
isstruct(student) | 判断是否为结构数组 |
isfield(student,{‘name’,’score’,’weight’}) | 判断结构字段是否存在 真为1,假为0 |
fieldnames(student) | |
getfield(student,{1,1}) | 显示结构数据 |
student(1,1) | 显示结构第一个数据 |
1.5.2元胞(单元)数组
元胞数组:matlab的一种特有数据类型,组成数据为元胞,每个元胞存储一种类型的数组,此数组可以是任何一种matlab数据类型或用户自定义类型,大小也是任意的
![]() | 创建矩阵[] 创建元胞数组{} |
→创建元胞数组
cell(m,n) | 创建m*n的空元胞数组 或 用{}创建元胞数组并赋值 |
cellstr() | 将字符串→元胞数组 B=sym(‘姓名’,’住址’,’联系电话’); c=cellstr(B) |
→元胞数组操作
celldisp(A) | 显示元胞数组的内容 | cellstr(A) | 字符串数组A→元胞数组 |
cellplot(A) | 元胞数组结构的图形描述 | iscell(A) | 判断A是否为元胞数组 |
a=cell(3,2);b={‘s1’,[10,20,30],88,’name’} | |
获取指定元胞的大小,用() | c=b(1,3) |
获取元胞的内容,用{} | d=b{1,3} |
获取元胞数组指定元素,用{}+() | e=b{1,2}(1,3) |
b{1,2} 访问 b 的第 1 行第 2 列元素,即 [10, 20, 30](一个数值数组)。 | b{1,2}(1,3) 进一步访问该数值数组的第 1 行第 3 列元素,即 30。 |
→元胞数组删除
a(:,2)=[] | 删除元胞数组的列 |
练习
clc clear all cell1={3,3}; cell1{1,1}=magic(3) cell1{1,2}={[1 2 3];[4 5 6];[7 8 9]} cell1{1,3}=floor(rand(3,3)*100) celldisp(cell1) cell2=cell1{1,1}+cell1{1,3} cell3=cell1{1,1}*cell1{1,3} | 练习:绘图 cell4={'身高','体重','年龄';182,75,22} cellplot(cell4,'legend') |
→元胞数组的引用
c={{‘dsad’,’dwad’,6},{'dawd','dawdaw'},{‘dwh’,’gdrg’,’gsergf’,’drgd’}} | |
c(1)→‘dsad’,’dwad’,6 | c{1}(2)→dwad |
1.6数组集合运算
1.6.1交运算
intersect(A,B) | A与B共同元素 |
1.6.2差运算
setdiff(A,B) | A矩阵-B矩阵 |
1.6.3并运算
union(A,B) | 并 |
1.6.4异或运算
setxor(A,B) | 异或 |
1.6.5唯一性运算
unique(A) | 使A中的元素保持互异性 |
1.6.6集合连接运算
cat(n,A,B) | 把数组A和B按照指定的维数n连接:n=1(行连接)A与B列相同;n=2(列连接)A与B行相同 |
1.6.7集合判断运算
ismember(A,b) | 判断b是否是A的元素,是为1,否为0 |
issorted(A) | 判断集合是否排序,是为1,否为0 |