MATLAB 之 常用内部函数,运算,字符串和结构数据与单元数据-1

简介: 内部函数是由 MATLAB 系统根据一般用户的需要编制并提供给用户使用的一组程序,也被称为系统函数或库函数。

文章目录


一、常用内部函数

1. 常用数学函数

2. 矩阵的超越函数

2.1 矩阵平方根

2.2 矩阵对数

2.3 矩阵指数

2.4 普通矩阵函数

二、MATLAB 运算

1. 算术运算

1.1 基本算术运算

1.2 点运算

2. 关系运算

3. 逻辑运算

三、字符串

1. 字符串的表示

2. 字符串的操作

2.1 字符串的执行

2.2 字符串与数值之间的转换

2.3 字符串的连接

2.4 字符串的比较

2.5 字符串的查找与替换

四、结构数据与单元数据

1. 结构数据

1.1 结构数据的建立与引用

1.2 结构成员的修改

2. 单元数据


一、常用内部函数

  • 内部函数是由 MATLAB 系统根据一般用户的需要编制并提供给用户使用的一组程序,也被称为系统函数或库函数。


1. 常用数学函数

MATLAB 提供了许多数学函数,函数的自变量规定为矩阵变量,运算法则是将函数逐项作用于矩阵的元素上,因而运算的结果是一个与自变量具有相同维数和大小的矩阵,即结果矩阵与自变量矩阵同型。例如,我们可以对 A 矩阵中的每一个元素开更号。

>> A=[4,2;3,6]
A =
     4     2
     3     6
>> B=sqrt(A)
B =
    2.0000    1.4142
    1.7321    2.4495

MATLAB 中一些常见的数学函数如下表所示。

7.png8.png


函数使用说明如下。

(1) 三角函数有以弧度为单位的函数和以角度为单位的函数,以角度为单位的函数在函数名后面加 d,以示区别。

(2) abs 函数可以求实数的绝对值、复数的模、字符串的 ASCII 码值。例如, abs(-4)、abs(3+4i)、abs(‘a’)的值分别为 4、5、97。

(3) 求余运算和求模运算有相同的地方但又不完全一致,主要的区别在于对负整数进行除法运算时的操作不同。

对于整数 a、b 来说,求余运算或求模运算的方法都是先求整数商 c=a/b,再求余数或模 r=a-c*b。求余运算在取 c 的值时,向 0 方向取整(fix 函数),而求模运算在计算 c 的值时,向负无穷方向取整(floor 函数)。

rem 与 mod 函数的区别是,当 b≠0 时,rem(a,b)=a-b.*fix(a./b),而 mod(a,b)=a-b.*floor(a/b);当 b=0 时,rem(a,0)=NaN, 而 mod(a,0)=a。

显然,如果 a、b 符号相同,那么 rem(a,b)=mod(a,b)。 如果 a、b 符号相反,那么 mod(a,b)=rem(a,b)+b。

rem(a,b) 的符号与 a 相同,而 mod(a,b) 的符号与 b 相同。例如,rem(7,4)=mod(7,4)=3;rem(-7,- 4)= -mod(-7,-4)= -3;rem(7,-4)=3,而 mod(7,-4)= -1;rem(-7,4)= -3,而 mod(-7,4)=1。

(4) 用于取整的函数有 fix、 floor、 ceil、 round,要注意它们的区别。round 函数的作用是四舍五入。设 a 为最靠近 x 的正整数(|x|≥a),则其余 3 个函数的区别可表示下图。

693b744009744e5bb99d237c0a6c0b71.png


设 x=2.45,则 fix(x)、floor(x)、 ceil(x)、 round(x) 的结果分别是 2、2、3、 2。

设 x= -2.65,则 fix(x)、floor(x)、 ceil(x)、 round(x) 的结果分别是 -2、-3、 -2、 -3。

(5) 关于符号函数。当 x<0 时, sign(x)=-1;当 x=0 时, sign(x)=0;当 x>0 时,sign(x)=1


2. 矩阵的超越函数

  • MATLAB 提供了一些直接作用于矩阵的超越函数,这些函数名都在上述内部函数名之后缀以 m,并规定输入参数 A 必须是方阵。


2.1 矩阵平方根

sqrtm(A) 计算矩阵 A 的平方根 A \sqrt{A}

A

>> A=[4,2;3,6];
>> B=sqrtm(A)
B =
    1.9171    0.4652
    0.6978    2.3823
>> B*B
ans =
    4.0000    2.0000
    3.0000    6.0000

若 A 为实对称正定矩阵,则一定能算出它的平方根。但某些矩阵,如 A=[0,1;0,0] 就得不到平方根。若矩阵 A 含有负的特征值,则 sqrtm(A) 将会得到一个复矩阵,例如:

>> A=[4,9;16,25];
>> eig(A)  %矩阵 A 的特征值
ans =
   -1.4452
   30.4452
>> B=sqrtm(A)
B =
   0.9421 + 0.9969i   1.5572 - 0.3393i
   2.7683 - 0.6032i   4.5756 + 0.2053i

2.2 矩阵对数

  • logm(A) 计算矩阵 A 的自然对数。此函数输入参数的条件与输出结果间的关系和函数 sqrtm(A) 完全一样,例如:
>> A=[4,9;1,5];
>> L=logm(A)
L =
    1.0639    2.4308
    0.2701    1.3340

2.3 矩阵指数

expm(A) 的功能是求矩阵指数 e A e^{A}e

A

。例如,对上面计算所得到的 A 的自然对数 L,求其矩阵指数 B = e L B=e^{L}B=e

L

>> B=expm(L)
B =
    4.0000    9.0000
    1.0000    5.0000

从这个结果可知,B 与 A 恰好是相同的,即 expm(A) 函数与 logm(A) 函数是互逆的。


2.4 普通矩阵函数

  • funm(A,@fun) 对方阵 A 计算由 fun 定义的函数的矩阵函数值。例如,当 fun 取 exp 时,funm(A,@fun) 可以计算矩阵 A 的指数,与 expm(A) 的计算结果一样。
>> A=[2,-1;1,0];
>> funm(A,@exp)
ans =
    5.4366   -2.7183
    2.7183         0
>> expm(A)
ans =
    5.4366   -2.7183
    2.7183         0

funm 函数可以用于 exp、log、sin、cos、sinh 和 cosh 等函数,但求矩阵的平方根只能用 sqrtm 函数。


二、MATLAB 运算

  • MATLAB 的运算都是针对矩阵而言的,既有矩阵意义下的运算,也有针对矩阵元素的运算。就运算的性质而言,有算术运算、关系运算和逻辑运算。


1. 算术运算

1.1 基本算术运算


MATLAB 的基本算术运算有 +(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)。

这些算术运算的运算规则不难理解,但必须注意,运算是在矩阵意义下进行的,单个数据的算术运算只是一种特例。

(1) 矩阵加减运算。 假定有两个矩阵 A 和 B,则可以由 A+B 和 A-B 实现矩阵的加减运算。

运算规则是,若 A 和 B 同型,则可以执行矩阵的加减运算,A 和 B 的相应元素相加减。如果 A 与 B 不同型,则 MATLAB 将给出错误信息,提示两个矩阵的维数或大小不匹配。

一个标量也可以和矩阵进行加减运算,这时把标量和矩阵的每一一个元素进行加减运算。

>> x=[2,-1,0;3,2,-4];
>> y=x-1
y =
     1    -2    -1
     2     1    -5

9.png


>> A=[1,2,3;4,5,6];
>> B=[1,2;3,0;7,4];
>> C=A*B
C =
    28    14
    61    32

矩阵 A 和 B 进行乘法运算,要求 A 的列数与 B 的行数相等,此时则称 A、B 矩阵是可乘的,或称 A 和 B 两矩阵维数和大小相容。如果两者的维数或大小不相容,则将给出错误信息,提示两个矩阵是不可乘的。

>> A=[10,20,30;40,50,60];
>> B=[1,3;4,8];
>> C=A*B
错误使用  * 
用于矩阵乘法的维度不正确。请检查并确保第一个矩阵中的列数与第二个矩阵中的行数匹配。要单独对矩阵的每个元素进行运算,请使用 TIMES
(.*)执行按元素相乘。
相关文档

说明 A 和 B 两矩阵维数或大小不相容,不能进行矩阵乘法运算。

在 MATLAB 中,还可以进行矩阵和标量相乘运算,标量可以是乘数也可以是被乘数。矩阵和标量相乘是矩阵中每个元素与此标量相乘。

(3) 矩阵除法。在 MATLAB 中,有两种矩阵除法运算:\ 和 /,分别表示左除和右除。如果 A 矩阵是非奇异方阵,则 A\B 和 B/A 运算可以实现。

A\B 等效于 A 的逆左乘 B 矩阵,也就是 inv(A) * B;而 B/A 等效于 A 矩阵的逆右乘 B 矩阵,也就是 B * inv(A)。

对于含有标量的运算,两种除法运算的结果相同,如 3/4 和 4\3 有相同的值,都等于 0.75。又如,设 a=[10.5,25],则 a/5= -5\a=[2.1000 5.0000]。

对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。对于矩阵运算,一般 A\B≠B/A。

>> A=[1,2,3;4,2,6;7,4,9];
>> B=[4,3,2;7,5,1;12,7,92];
>> C1=A/B
C1 =
    7.9623   -4.2453   -0.0943
   -4.5472    2.9434    0.1321
   -5.1321    3.6415    0.1698
>> C2=A\B
C2 =
    0.5000   -0.5000   44.5000
    1.0000    0.0000   46.0000
    0.5000    1.1667  -44.8333
  • 显然,C1≠C2。
  • (4) 矩阵的乘方。一个矩阵的乘方运算可以表示成 A^x,要求 A 为方阵,x 为标量。
>> A=[1,2,3;4,5,6;7,8,0];
>> A^2
ans =
    30    36    15
    66    81    42
    39    54    69
  • 显然,A^2 即 A*A。
  • 矩阵的开方运算是相当困难的,但有了计算机,这种运算就不再显得那么麻烦了,我们可以利用计算机方便地求出一个矩阵的方根。
>> A=[1,2,3;4,5,6;7,8,0];
>> A^0.1
ans =
   0.9750 + 0.2452i   0.1254 - 0.0493i   0.0059 - 0.0604i
   0.2227 - 0.0965i   1.1276 + 0.1539i   0.0678 - 0.1249i
   0.0324 - 0.1423i   0.0811 - 0.1659i   1.1786 + 0.2500i

1.2 点运算

  • 在 MATLAB 中,有一种特殊的运算,因为其运算符是在有关算术运算符前面加点,所以叫点运算。
  • 点运算符有 .*、./、.\ 和 .^。两矩阵进行点运算是指它们的对应元素进行相关运算,要求两矩阵同型。
>> A=[1,2,3;4,5,6;7,8,9];
>> B=[-1,0,1;1,-1,0;0,1,1];
>> C=A.*B
C =
    -1     0     3
     4    -5     0
     0     8     9
  • A .* B 表示 A 与 B 对应元素之间相乘,与 A * B 是两个截然不同的概念。
  • 同时,如果 A、B 两矩阵同型,则 A./B 表示 A 矩阵除以 B 矩阵的对应元素。B.\A 等价于 A./B。
>> A=[1,2,3;4,5,6];
>> B=[-2,1,3;-1,1,4];
>> C1=A./B
C1 =
   -0.5000    2.0000    1.0000
   -4.0000    5.0000    1.5000
>> C2=B.\A
C2 =
   -0.5000    2.0000    1.0000
   -4.0000    5.0000    1.5000
  • 显然,A./B 和 B.\A 值相等。这与前面介绍的矩阵的左除、右除是不一样的。
  • 若两个矩阵同型,则A.^B 表示两矩阵对应元素进行乘方运算。其中,指数可以是标量,底数也可以是标量。
>> A=[1,2,3];
>> B=[4,5,6];
>> C=A.^B
C =
     1    32   729
>> C1=A.^2
C1 =
     1     4     9
>> C2=2.^[A,B]
C2 =
     2     4     8    16    32    64

这里需要注意的是,点运算是 MATLAB 中一个特殊的运算符。例如,当 x=0.1、0.4、0.7、1 时,分别求 y = sin ⁡ x cos ⁡ x y=\sin x\cos xy=sinxcosx 的值,命令应当写成

>> x=0.1:0.3:1;
>> y=sin(x).*cos(x)
y =
    0.0993    0.3587    0.4927    0.4546

其中 ,y 的表达式中必须时点乘运算。如果 x 只有一个值,则用乘法运算即可。


2. 关系运算


MATLAB 提供了 6 种关系运算符: <(小于)、<=(小于等于)、>(大于)、>=(大于等于)、==(等于)、~=(不等于)。它们的含义不难理解,但要注意其书写方法与数学中的不等式符号不尽相同。

MATLAB 还提供了与 6 种关系运算符对应的函数 It、le、 gt、 ge、 eq、 ne。

关系运算符的运算法则如下。

(1) 当两个比较量是标量时,直接比较两数的大小。若关系成立,关系表达式结果为 1,否则为 0。

>> 12>3
ans =
  logical
   1
>> eq(2,3)
ans =
  logical
   0

(2) 当参与比较的量是两个同型的矩阵时,比较是对两矩阵相同位置的元素按标量关系运算规则逐个进行,并给出元素比较结果。最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由 0 或 1 组成。

(3) 当参与比较的一个是标量,而另一个是矩阵时,则把标量与矩阵的每一个元素按标量关系运算规则逐个比较,并给出元素比较结果。最终的关系运算的结果是一个与原矩阵同型的矩阵,它的元素由 0 或 1 组成。

例如,我们产生 5 阶随机方阵 A,其元素为 [10,90] 区间的随机整数,然后判断 A 的元素是否能被 3 整除。

>> A=fix((90-10+1)*rand(5)+10)
A =
    75    17    22    21    63
    83    32    88    44    12
    20    54    87    84    78
    83    87    49    74    85
    61    88    74    87    64
>> P=rem(A,3)==0  %等价于 P=eq(rem(A,3),0)
P =
  5×5 logical 数组
   1   0   0   1   1
   0   0   0   0   1
   0   1   1   1   1
   0   1   0   0   0
   0   0   0   1   0
  • 其中,rem(A,3) 是矩阵 A 的每个元素除以 3 的余数矩阵。判断余数矩阵是否为 0 时,0 被扩展为与 A 同型的零矩阵,P 是比较的结果矩阵。
  • 此外,MATLAB 还提供了一些关系运算函数,如下表所示。
  • 11.png
  • 例如,我们建立矩阵 A,然后找出大于 4 的元素的位置,并输出相应位置的元素。
>> A=[4,-65,-54,0,6;56,0,67,-45,0]
A =
     4   -65   -54     0     6
    56     0    67   -45     0
>> k=find(A>4)
k =
     2
     6
     9
>> A(k)
ans =
    56
    67
     6

这里需要注意的是,find 函数得到的矩阵元素的位置是以相应元素的序号来表示的。


3. 逻辑运算


MATLAB 提供了 3 种逻辑运算符:&(与)、|(或)和 ~(非)。此外,还提供了 4 个逻辑运算函数:and(a,b)、 or(a,b)、 not(a) 和 xor(a,b),分别代表与、或、非、异或运算。

在逻辑运算中,非零元素为真,用 1 表示;零元素为假,用 0 表示。

设参与逻辑运算的是两个标量 a 和 b,那么,逻辑运算的含义如下。

(1) a&b 或函数 and(a, b):当 a、b 全为非零时,结果为 1;a、b 只要有一个为零则结果为 0。

(2) a|b 或函数 or(a,b):当 a、b 中只要有一个非零,结果为 1;a、b 全为零时结果为 0。

(3)~a 和函数 not(a):当 a 是零时,结果为 1;当 a 非零时,结果为 0。

(4)函数 xor(a,b):当 a、b 的值不同时,结果为 1;当 a、b 的值相同时,结果为 0。

逻辑运算还有以下运算法则。

(1) 若参与逻辑运算的是两个同型矩阵,那么运算将对矩阵相同位置上的元素按标量规则逐个进行。最终运算结果是一个与原矩阵同型的矩阵,其元素由 1 或 0 组成。

(2) 若参与逻辑运算的一个是标量,一个是矩阵,那么运算将在标量与矩阵中的每个元素之间按标量规则逐个进行。最终运算结果是一个与矩阵同型的矩阵,其元素由 1 或 0 组成。

(3 )逻辑非是单目运算符,也服从矩阵运算规则。

在算术运算、关系运算和逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。


相关文章
|
9天前
|
机器学习/深度学习 算法
m基于GA-GRU遗传优化门控循环单元网络的电力负荷数据预测算法matlab仿真
在MATLAB 2022a中,一个基于遗传算法优化的GRU网络展示显著优化效果。优化前后的电力负荷预测图表显示了改进的预测准确性和效率。GRU,作为RNN的一种形式,解决了长期依赖问题,而遗传算法用于优化其超参数,如学习率和隐藏层单元数。核心MATLAB程序执行超过30分钟,通过迭代和适应度评估寻找最佳超参数,最终构建优化的GRU模型进行负荷预测,结果显示预测误差和模型性能的提升。
26 4
|
19天前
|
算法 数据安全/隐私保护
matlab程序,傅里叶变换,频域数据,补零与不补零傅里叶变换
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
19天前
|
数据安全/隐私保护
matlab 曲线光滑,去毛刺,去离群值,数据滤波,高通滤波,低通滤波,带通滤波,带阻滤波
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
19天前
|
数据安全/隐私保护
时域与频域数据互相转换,傅里叶变换与逆傅里叶变换,matlab程序,时域转频域
地震波格式转换、时程转换、峰值调整、规范反应谱、计算反应谱、计算持时、生成人工波、时频域转换、数据滤波、基线校正、Arias截波、傅里叶变换、耐震时程曲线、脉冲波合成与提取、三联反应谱、地震动参数、延性反应谱、地震波缩尺、功率谱密度
|
19天前
|
计算机视觉
MATLAB用Lasso回归拟合高维数据和交叉验证
MATLAB用Lasso回归拟合高维数据和交叉验证
|
19天前
|
SQL 移动开发 算法
MATLAB改进模糊C均值聚类FCM在电子商务信用评价应用:分析淘宝网店铺数据|数据分享
MATLAB改进模糊C均值聚类FCM在电子商务信用评价应用:分析淘宝网店铺数据|数据分享
|
19天前
|
机器学习/深度学习 数据可视化
Matlab决策树对空气质量和天气温度及天气数据做交通出行推荐预测|数据分享
Matlab决策树对空气质量和天气温度及天气数据做交通出行推荐预测|数据分享
|
19天前
|
数据挖掘 数据库
数据分享|MATLAB、R基于Copula方法和k-means聚类的股票选择研究上证A股数据
数据分享|MATLAB、R基于Copula方法和k-means聚类的股票选择研究上证A股数据
|
19天前
|
计算机视觉
MATLAB偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据
MATLAB偏最小二乘回归(PLSR)和主成分回归(PCR)分析光谱数据
|
19天前
|
数据采集 算法 数据可视化
MATLAB、R用改进Fuzzy C-means模糊C均值聚类算法的微博用户特征调研数据聚类研究
MATLAB、R用改进Fuzzy C-means模糊C均值聚类算法的微博用户特征调研数据聚类研究

热门文章

最新文章