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

news2024/10/7 12:17:06

文章目录

  • 一、常用内部函数
    • 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 中一些常见的数学函数如下表所示。
函数名功能函数名功能
sin/sind正弦函数,输入值为弧度/角度abs绝对值函数
cos/cosd余弦函数,输入值为弧度/角度rem求余
tan/tand正切函数,输入值为弧度/角度mod求模
asin/asind反正弦函数,返回值为弧度/角度fix向零方向取整
acos/acosd反余弦函数,返回值为弧度/角度floor不大于自变量的最大整数
atan/atand反正切函数,返回值为弧度/角度ceil不小于自变量的最小整数
sinh/asinh双曲正弦函数/反双曲正弦函数round四舍五入到最邻近的整数
cosh/acosh双曲余弦函数/反双曲余弦函数sign符号函数
tanh/atanh双曲正切函数/反双曲正切函数gcd最大公约数
sqrt平方根函数lcm最小公倍数
log自然对数函数factorial阶乘
log10常用对数函数isprime判断是否为素数
log2以2为底的对数函数primes生成素数列表
exp自然指数函数perms生成所有排列
pow22 的幂randperm生成任意排列
  • 函数使用说明如下。
  • (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 函数)。
  • remmod 函数的区别是,当 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 个函数的区别可表示下图。

在这里插入图片描述

  • 设 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} eA。例如,对上面计算所得到的 A 的自然对数 L,求其矩阵指数 B = e L B=e^{L} B=eL
>> 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

  • (2) 矩阵乘法。假定有两个矩阵 A 和 B,若 A 为 m×n 矩阵,B 为 n×p 矩阵,则 C=A×B 为 m×p 矩阵,其各个元素为 C i j = ∑ k = 1 n a i k . b k j C_{ij}=\sum_{k=1}^{n}a_{ik}.b_{kj} Cij=k=1naik.bkj
  • 其中,i 是从 1 取到 m,j 是从 1 取到 p。
>> 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 x y=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 种关系运算符对应的函数 Itlegtgeeqne
  • 关系运算符的运算法则如下。
  • (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 还提供了一些关系运算函数,如下表所示。
函数名含义
all若向量的所有元素非零,则结果为 1,否则为 0
any若向量中任何一个元素非零,则结果为 1,否则为 0
exist检查变量在工作空间中是否存在,若存在,则结果为 1,否则为 0
find找出向量或矩阵中非零元素的位置
isempty若被查变量是空矩阵,则结果为 1,否则为 0
isinf若元素是 ±tinf,则结果矩阵相应位置元素取 1,否则取 0
isnan若元素是 nan,则结果矩阵相应位置元素取 1,否则取 0
isfinite若元素值大小有限,则结果矩阵相应位置元素取 1,否则取 0
isinteger若被查变量是整型,则取 1,否则取 0
isnumeric若被查变量是数值型,则取 1,否则取 0
isreal若被查变量是实数,则取 1,否则取 0
isfloat若被查变量是浮点型,则取 1,否则取 0\
  • 例如,我们建立矩阵 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 )逻辑非是单目运算符,也服从矩阵运算规则。
  • 在算术运算、关系运算和逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。

三、字符串

  • 在 MATLAB 中,有两种基本的数据类型,一个是数值型数据,一个是字符型数据或称字符串数据。
  • 数值型数据比较好理解,是指能参与数值运算的数据,又分为整型、浮点型和复数型。
  • 字符型数据在日常应用中则不太强调,但却是大量存在的,例如统计一篇英文文章中不同英文字母出现的次数,按姓名排序,等等。字符串数据由若干个字符组成,这些字符可以是计算机系统中允许使用的任何字符。

1. 字符串的表示

  • 在 MATLAB 中,字符串是单引号括起来的字符序列。
>> x='yan zi 22'

x =

    'yan zi 22'

  • 若字符串中的字符含有单引号,则该单引号字符要用两个单引号来表示。
>> 'I ''m a student.'

ans =

    'I 'm a student.'

  • MATLAB 将一个字符串当作一个行向量,每个元素对应一个字符,其引用方法和数值向量相同。
>> A='ABCDEF';
>> A(1:3)

ans =

    'ABC'

  • 也可以建立多行字符串,形成字符串矩阵。
>> A=['abcdef';'123456'];
>> A(2,3)

ans =

    '3'

  • 需要注意的是,这里要求各行字符数要相等。为此,有时不得不用空格来调节各行的长度,使它们彼此相等。
  • 例如,我们建立一个字符串向量,然后对该向量做如下处理。
  • (1) 取第 1~5 个字符组成的子字符串。
  • (2) 将字符串倒过来重新排列。
  • (3) 将字符串中的小写字母变成相应的大写字母,其余字符不变。
  • (4) 统计字符串中小写字母的个数。
>> A='ABc123d4e56Fg9';
>> A1=A(1:5)

A1 =

    'ABc12'

>> A2=A(end:-1:1)

A2 =

    '9gF65e4d321cBA'

>> k=find(A>='a'&A<='z');
>> A(k)=A(k)-('a'-'A')

A =

    'ABC123D4E56FG9'

>> length(k)

ans =

     4

2. 字符串的操作

2.1 字符串的执行

  • 与字符串有关的一个重要函数是 eval,它的作用是把字符串的内容作为对应的 MATLAB 命令来执行,其调用格式如下:
>> eval(s)

  • 其中,s 是字符串。
>> t=pi;
>> m='[t,sin(t),cos(t)]';
>> y=eval(m)

y =

    3.1416    0.0000   -1.0000

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

  • 字符串是以 ASCII 码形式存储的,absdouble 函数都可以用来获取字符串矩阵所对应的 ASCII 码数值矩阵。char 函数可以把 ASCII 码矩阵转换为字符串矩阵。
>> s1='MATLAB';
>> a=abs(s1)

a =

    77    65    84    76    65    66

>> b=double(s1)

b =

    77    65    84    76    65    66

>> char(a+32)

ans =

    'matlab'

  • MATLAB 还有许多用于字符串和数值数据之间转换的函数。
  • setstr 函数将 ASCII 码值转换成对应的字符。
  • str2num 函数或 str2double 函数将数字字符串转换成数值。
  • num2str 函数将数值转换成字符串。
  • int2str 函数将整数转换成字符串。

2.3 字符串的连接

  • 在 MATLAB 中,要将两个字符串连接在一起,有两种常见方法:一是用字符串向量,二是用 strcat 函数。
  • 用字符串向量可以将若干个字符串连接起来,即用中括号将若干个字符串括起来,从而得到一个更长的字符串。
>> f=70;
>> c=(f-32)/1.8;
>> ['Room temperature is ',num2str(c),' degree C.']

ans =

    'Room temperature is 21.1111 degree C.'

  • strcat 函数可以将若干个字符串连接起来。
>> strcat('yan','zi','22')

ans =

    'yanzi22'

2.4 字符串的比较

  • 字符串的比较有两种方法,利用关系运算符或字符串比较函数。
  • 当两个字符串拥有相同的长度时,可以利用关系运算符对字符串进行比较,比较的规则是按 ASCII 值大小逐个字符进行比较,比较的结果是一一个数值向量,其元素为对应字符比较的结果。
>> 'www0'>='W132'

ans =

  1×4 logical 数组

   1   1   1   0

  • 字符串比较函数用于判断字符串是否相等,有 4 种比较方式,函数如下。
  • (1) strcmp(s1,s2):用来比较字符串 s1 和 s2 是否相等,如果相等,返回 1, 否则返回 0。
  • (2) strncmp(s1,s2,n):用来比较前 n 个字符是否相等,如果相等,返回 1,否则返回 0。
  • (3) strcmpi(s1,s2):在忽略字母大小写前提下,比较字符串 s1 和 s2 是否相等,如果相等,返回 1,否则返回 0。
  • (4) strnempi(s1,s2,n):在忽略字符串大小写前提下,比较前 n 个字符是否相等,如果相等,返回 1,否则返回 0。
>> strcmp('www0','W123')

ans =

  logical

   0
 
>> strncmpi('ww0','W12',1)

ans =

  logical

   1
 

2.5 字符串的查找与替换

  • MATLAB 提供了许多函数,用来对字符串中的字符进行查找与替换。常用的有以下两个。
  • (1) findstr(s1,s2):返回短字符串在长字符串中的开始位置(s1,s2 的顺序没有要求)。
>> p1=findstr('this is a test','is')

p1 =

     3     6

>>  p2=findstr('is','this is a test')

p2 =

     3     6

  • 短字符串 is 在长字符串 this is a test 中出现两次,开始位置分别为 3 和 6。
  • (2) strep(1,s2,s3):将字符串 s1 中的所有子字符串 s2 替换为字符串 s3。
>> p3=strrep('this is a test','test','success')

p3 =

    'this is a success'

四、结构数据与单元数据

  • MATLAB 新增加了两种数据类型:结构数据类型和单元数据类型。
  • 这两种数据类型均是将不同的相关数据集成到一个单-的变量中,使得大量的相关数据的处理
    与引用变得简单、方便。

1. 结构数据

  • 个人感觉可以参考 C++ 中的结构体。
  • 结构数据类型把一组类型不同而逻辑上相关的数据组成一个有机的整体,以便于管理和引用。例如要存储学生的基本信息就可采用结构数据类型。

1.1 结构数据的建立与引用

  • 结构矩阵的元素可以是不同的数据类型,它能将一组具有不同属性的数据纳入到一个统一的变量名下进行管理。建立一个结构矩阵可以采用给结构成员赋值的办法,其格式如下:
    结构矩阵名.成员名=表达式
  • 其中,表达式应理解为矩阵表达式。例如,我们要建立含有 3 个元素的结构矩阵 a,命令如下:
>> a(1).x1=10;a(1).x2='liu';a(1).x3=[11,21;34,78];
>> a(2).x1=12;a(2).x2='wang';a(2).x3=[34,191;27,578];
>> a(3).x1=14;a(3).x2='cai';a(3).x3=[13,180;57,231];
  • 这里需要注意的是,结构矩阵元素的成员也可以是结构数据。
>> a(2).x1.x11=90;a(2).x1.x12=12;a(2).x1.x13=30;
  • 以上建立的结构矩阵 a 含有 3 个元素,每个元素又含有 3 个成员,成员 a(2).x1 又是含有 3 个成员的结构数据。
  • 对结构数据的引用,可以引用其成员,也可以引用结构矩阵的元素或结构变量。
 >> a(2).x3

ans =

    34   191
    27   578

>> a(2)

ans = 

  包含以下字段的 struct:

    x1: 12
    x2: 'wang'
    x3: [2×2 double]

>> a

a = 

  包含以下字段的 1×3 struct 数组:

    x1
    x2
    x3

  • 引用结构矩阵元素的成员时,显示其值。引用结构矩阵元素时,显示成员名和它的值,但成员是矩阵时,不显示其具体内容,只显示成员矩阵大小参数。引用结构矩阵时,只显示结构矩阵的大小参数和成员名。

1.2 结构成员的修改

  • 可以根据需要增加或删除结构的成员。例如,我们要给结构矩阵 a 增加一一个成员 x4, 可给 a 中任意一个元素增加成员 x4,命令如下:
>> a(1).x4='410075';
  • 但其他成员均为空矩阵,可以使用赋值语句给它赋确定的值。
  • 要删除结构的成员,则可以使用 rmfield 函数来完成。例如,要删除成员 x4,命令如下:
>> a=rmfield(a,'x4');

2. 单元数据

  • 单元数据类型与结构数据类型类似,也是把不同属性的数据放在一个变量中。不同的是,结构矩阵的各个元素下有成员,每个成员都有自己的名字,对成员的引用如下:
    结构矩阵名.成员名
  • 而单元矩阵的各个元素就是不同类型的数据,用带有大括号下标的形式引用单元矩阵元素。
  • 建立单元矩阵和一般矩阵相似,只是矩阵元素用大括号括起来。
>> a={10,'liu',[11,21;34,78];12,'wang',[34,191;27,578];14,'cai',[13,890;67,231]}

a =

  3×3 cell 数组

    {[10]}    {'liu' }    {2×2 double}
    {[12]}    {'wang'}    {2×2 double}
    {[14]}    {'cai' }    {2×2 double}

  • 可以用带有大括号下标的形式引用单元矩阵元素。
>> a{3,3}

ans =

    13   890
    67   231

  • 单元矩阵的元素可以是结构或单元数据。例如,我们先建立结构变量 y,给上面建立的单位矩阵 a 的元素 a{3,4} 赋值,命令如下:
>> y.x1=34;y.x2=56;
>> a{3,4}=y;
  • 可以使用 celldisp 函数来显示整个单元矩阵,如 celldisp(a)。还可以删除单元矩阵中某个元素,如删除 a 的第 3 个元素,其命令如下:
>> a(3)=[]

a =

  1×11 cell 数组

  列 18

    {[10]}    {[12]}    {'liu'}    {'wang'}    {'cai'}    {2×2 double}    {2×2 double}    {2×2 double}911

    {0×0 double}    {0×0 double}    {1×1 struct}

  • 单元矩阵 a 的第 3 个元素被删除侯,a 变成行向量。这里需要注意的是,这里是 a(3),而不是 a{3}。a{3}=[] 是将 a 的第 3 个元素置为空矩阵,而不是删除它。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/516475.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ChatGPT下的自动化工具Auto-GPT、AgentGPT、BabyAGI和GodMode

ChatGPT 对于一个大目标来说&#xff0c;他是不知道怎么一步一步的帮我们构建出来。有了Auto-GPT、AgentGPT、BabyAGI和GodMode 这些自动化工具&#xff0c;我们只需要输入一个大目标&#xff0c;这些自动化工具能够帮我们一步一步轻松实现。 1.Auto-GPT 网址&#xff1a;htt…

C/C++每日一练(20230512) 成绩打印、补齐数组、水仙花数

目录 1. 成绩打印 ※ 2. 按要求补齐数组 &#x1f31f;&#x1f31f;&#x1f31f; 3. 水仙花数 ※ &#x1f31f; 每日一练刷题专栏 &#x1f31f; Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1. 成绩打印 一个班有10个同学&am…

airserver7.2.7最新中文版下载及功能介绍

最近开会打算把手机投屏到自己的Mac上演示用&#xff0c;于是就打算用下听了很久好用但是一值没有使用的AirServer!十分简单的操作就可以完美的投屏到Mac电脑&#xff0c;而且不用像Mac自带的QuickTime用线连接手机!它可以把AirPlay / AirTunes上的音频、视频、照片、幻灯片还有…

母亲节祝福html源码,母亲节祝福html代码,母亲节表白妈妈代码,母亲节祝福网页代码

母亲节祝福html源码&#xff0c;母亲节祝福html代码&#xff0c;母亲节表白妈妈代码&#xff0c;母亲节祝福网页代码 运行截图 核心代码&#xff1a; <!DOCTYPE HTML> <html lang"zh-Hans"> <head><meta charset"utf-8"><meta…

我们选择护眼台灯的标准是什么?护眼台灯的国家标准

小时候在学校&#xff0c;父母跟老师经常强调“眼睛是心灵的窗户”要保护好眼睛&#xff0c;不管是在学校上学还是在家写作业时&#xff0c;都会很突然的听见“头抬高点”、“眼睛离远点”等类似的劝导&#xff0c;刚开始还不以为然&#xff0c;直到视力下降&#xff0c;带上了…

ctf_BUUCTF_web_总结(待更新)

文章目录 SQL注入文件上传漏洞文件包含漏洞php反序列化RCE模板安全问题&#xff08;SSTI&#xff09;XXE代码审计杂七杂八的知识点正则表达式CTF做题总结 SQL注入 [极客大挑战 2019]EasySQL[SUCTF 2019]EasySQL[强网杯 2019]随便注[极客大挑战 2019]BabySQL[BJDCTF2020]Easy MD…

雪浪云算力开发者大赛

1赛题背景 汽车生产工艺复杂&#xff0c;一辆汽车的制造需要完成焊装、涂装、总装三大工艺&#xff0c; 经过焊装车间、涂装车间、总装车间。各车间存在上下游关联关系&#xff0c;每个车间有自己的优化排序目标&#xff0c;需要综合考虑多种复杂的排序规则及工艺约束&#xf…

9.100ASK_V853-PRO开发板支持E907小核开发

0.前言 ​ 100ASK_V853-PRO开发板的V853芯片集成Arm Cortex-A7和RISC-V E907 双CPU&#xff0c;玄铁E907 是一款完全可综合的高端 MCU 处理器。它兼容 RV32IMAC 指令集&#xff0c;提供可观的整型性能提升以及高能效的浮点性能。E907 的主要特性包括&#xff1a;单双精度浮点单…

centos7设置时区,时间+时间同步的三种方式

centos7设置时区&#xff0c;时间时间同步的三种方式 1.centos7设置时区 1.1查看当前时区&#xff1a; timedatectl 1.2查看时间命令&#xff1a; date1.3选择时区命令 [rootlocalhost test]# tzselect Please identify a location so that time zone rules can be set co…

第五十六章 Unity 音频播放

Unity可以导入大多数标准音频文件格式&#xff0c;精通于在3D 空间中播放声音&#xff0c;还可根据需要提供其他效果。虽然播放声音是一件非常简单的事情&#xff0c;但是为了模拟现实直接中的各种声音效果&#xff0c;Unity会提供各种各样的组件来实现。 首先&#xff0c;我们…

创意无限,场景惊喜:让你的描述变成现实(Skybox Labs)

你是否曾经想象过能够用文字来创造出一个全新的世界&#xff1f;你是否曾经想过能够用一句话来生成一个令人惊叹的360天空盒&#xff1f;如果你的答案是肯定的&#xff0c;那么你一定要试试Skybox Labs&#xff0c;这是一个由Blockade Labs开发的AI-powered解决方案&#xff0c…

最全的免费SSL证书申请方式

在SSL广泛普及的今天&#xff0c;申请一张免费的SSL证书是一件非常容易的事情。这里为大家总结当前阶段(2023年)拥有一张免费SSL证书的方式。首推的方式为来此加密网站&#xff0c;文章后面会有详细的介绍。 下面介绍几种获取免费SSL证书的方式&#xff0c;大家可以根据自己的…

【运维知识进阶篇】集群架构-Nginx常用模块(目录索引+状态监控+访问控制+访问限制)

这篇文章给大家介绍Nginx常用模块&#xff0c;包括Nginx目录索引&#xff0c;Nginx状态监控&#xff0c;Nginx访问控制&#xff0c;Nginx访问限制。熟悉使用模块&#xff0c;才能给Nginx增加色彩。 目录索引模块 Nginx不允许列出整个目录浏览下载&#xff0c;可以用模块自己做…

QT窗体之间值的传递,多种方法实现

QT窗体之间值的传递&#xff0c;多种方法实现 前言[1] QT窗体之间值的传递&#xff0c;多种方法实现1、新建工程2、全局变量extern3、公共成员函数public4、信号与槽singnals5、总结与工程分享主窗口.cpp文件主窗口头文件子窗口.cpp文件子窗口头文件 [2] Qt在子窗口接收父窗口的…

Node.js版本管理工具,我选择n

文件收录&#xff1a; 个人网址&#xff1a;https://linglan01.cn/ Github&#xff1a; https://github.com/CatsAndMice/blog/issues 为什么要管理Node.js版本&#xff1f;这是我们要先明白的点。 假设我电脑Node.js版本为v14.x&#xff0c;日常工作中可能会遇到以下场景&…

c#入门教程(有一定计算机基础的人看)

废话不说&#xff0c;有一定基础的人看&#xff0c;如java等程序员 c#是什么&#xff1f; 开发语言&#xff0c;为什么要学&#xff1f;主流游戏是用这个开发 c#怎么运行? c#微软做的&#xff0c;微软做了个.net framework&#xff0c;c#运行在这个之上。windows自带.net …

8. 100ASK_V853-PRO开发板支持MPP媒体处理平台

0.前言 ​ MPP 系统控制模块&#xff0c;根据芯片特性&#xff0c;完成硬件各个部件的复位、基本初始化工作&#xff0c;同时负责完成 MPP&#xff08;Media Process Platform 媒体处理平台&#xff09;系统各个业务模块的初始化、去初始化以及管理 MPP 系统各个业务模块的工作…

python基于LBP+SVM开发构建基于fer2013数据集的人脸表情识别模型是种什么体验,让结果告诉你...

本身LBPSVM是比较经典的技术路线用来做图像识别、目标检测&#xff0c;没有什么特殊的地方 fer2013数据集在我之前的博文中也有详细的实践过&#xff0c;如下&#xff1a; 《fer2013人脸表情数据实践》 系统地基于CNN开发实现 《Python实现将人脸表情数据集fer2013转化为图像…

IP网络电话呼叫转移设置

这里的网络电话呼叫转移设置&#xff0c;我们以IP电话系统用方位的网络电话机为例说明 通话转移 当用户正在与对方通话时&#xff0c;并希望将呼叫转移到其他号码&#xff0c;这里有两种方法来转移呼叫&#xff0c;出席移转和非出席移转。 出席移转 出席移转也被称为“礼貌…

条形码阅读器 CnetSDK Barcode Scanner SDK Crack

条形码阅读器组件SDK CnetSDK Barcode Scanner SDK 为.NET程序员提供了一个免费测试的条形码阅读器软件&#xff0c;称为.NET Barcode Scanner SDK。它在从许多图像文件中读取条形码和识别条形码方面非常有效。这个.NET条形码库支持最流行的线性和2D条形码&#xff0c;如QR码&a…