MATLAB | 第一章-2 | 矩阵与数组的应用 | 基础学习

目录

2.4 MATLAB常用函数及应用

.4.1常用数学函数

2.4.2常用三角函数

2.4.5转换函数

√√√√2.4.6字符串处理函数

字符串

练习

2.4.7判断函数

练习

2.4.8查找函数

练习

2.4.9测试向量(矩阵)0元素函数

2.4.10日期和时间函数

练习

2.4.11标准差函数

2.5MATLAB数组表示

2.5.1结构数组

→定义结构体数组

→使用结构体数组

2.5.2元胞(单元)数组

→创建元胞数组

→元胞数组操作

→元胞数组删除

练习

→元胞数组的引用

2.6数组集合运算

2.6.1交运算

2.6.2差运算

setdiff(A,B)

A矩阵-B矩阵

2.6.3并运算

2.6.4异或运算

异或

2.6.5唯一性运算

使A中的元素保持互异性

2.6.6集合连接运算

把数组A和B按照指定的维数n连接:

n=1(行连接)A与B列相同;n=2(列连接)A与B行相同

2.6.7集合判断运算

ismember(A,b)

判断b是否是A的元素,是为1,否为0

issorted(A)

判断集合是否排序,是为1,否为0


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的阶乘

nchoosekxm

组合数

f=nchoosek5,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的随机数

randmn

0-1 | m*n随机数矩阵

randnn

正态分布随机数

randin

生成一个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’)

deblank(‘str’)

去掉字符串末尾的空格

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)

  1. 返回矩阵a大于5的元素位置

[m,n]=find(a>3)

  1. 查找第二列等于5的元素

find(a(:,2)==5)

  1. 查找矩阵a中等于9的元素的位置

[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)

估算t2t1命令时长

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值