4.1 向量

  • 向量的生成
    • 直接输入法
      • x = [2 4 6 8] (行向量)
      • x = [1;2;3] (列向量)
    • 冒号法
      • x = first:increment:last
      • 表示创建一个从first开始,到last结束,数据元素的增量为increment的向量。若增量为1,上面创建向量的方式简写为x = first:last
      • x = 0:2:10
    • 利用函数linspace创建向量
      • linspace 通过直接定义数据元素个数,而不是数据元素之间的增量来创建向量。此函数的调用格式如下。
      • linspace(first_value, last_value, number)
      • 增量默认为(last_value - first_value) / (number - 1)
    • 利用函数logspace 创建一个对数分隔的向量
      • logspace(first_value, last_value, number)
      • 表示创建一个从10^first_value, 到10^last_value结束,包含number 个数据元素的向量
  • 向量元素的引用
    • x(n) 表示向量中的第n个元素
    • x(n1:n2) 表示向量中的第n1至n2个元素
    • x = [1 2 3 4 5]
    • x(1:3) → ans = 1 2 3
  • 向量运算
    • 向量可以看成是一种特殊的矩阵,因此矩阵的运算对向量同样适用。除此以外,向量还是矢量运算的基础,所以还有一些特殊的运算,主要包括向量的点积、叉积和混合积
    • 向量的点积运算
      • dot(a,b)
        • 返回向量a和b的点积。需要说明的是,a和b必须同维。另外,当a、b都是列向量时,dot(a,b)等同于a .* b
      • dot(a,b,dim)
        • 返回向量a和b在dim维的点积
    • 向量的叉积运算
      • 在空间解析几何学中,两个向量叉乘的结果是一个过两相交向量交点且垂直于两向量所在平面的向量。在MATLAB中,向量的叉积运算可由函数cross 来实现。
        • cross(a,b)
          • 返回向量a 和 b 的叉积。需要说明的是,a和b必须是三维向量
        • cross(a,b,dim)
          • 返回向量a 和 b 在dim维的叉积。需要说明的是,a和b必须有相同的维数,size(a,dim)和size(b,dim)的结果必须为3
          • a = [2 3 4] b = [3 4 6] c = cross(a,b) = [2 0 -1]
    • 向量的混合积运算
      • 在MATLAB中,向量的混合积运算可由以上两个函数(dot、cross)共同来实现
        • a = [2 3 4]; b = [3 4 6]; c = []1 4 5; d = dot(a,cross(b,c)) = -3

4.2 多项式

  • 式指的是代数式,是由数字和字母组成的,如1,5a,sdef,axn + b。式又分为单项式和多项式:
    • 单项式是数字与字母的积,单独的一个数字或字母也是单项式,如3ab
    • 几个单项式的和叫做多项式,如3ab + 5cd
  • 在高等代数中,多项式一般可表示为:a0 xn +a1 xn-1 + … +an-1 x +an 。这是一个n(>0)次多项式,a0,…,an 等是多项式的系数。在MATLAB中,多项式的系数组成的向量表示为p = [a0, a1,….,an-1 ,an],如2x3 -x2 + 3 第4章  向量与多项式 - 图1 [2,-1,0,3]。
  • 系数中的零不能省略。
  • 将对多项式运算转化为对向量的运算,是数学中最基本的运算之一
  • 构建多项式
    • poly2sum(p)
      • p = [3 -2 4 6 8]
      • poly2sym(p)
      • ans = 3x^4 - 2x^3 + 4x^2 + 6x + 8
  • 数值多项式四则运算
    • MATLAB 没有提供专门的针对多项式的加减运算的函数,多项式的四则运算实际上是多项式对应的系数的四则运算。
    • 多项式的四则运算是指多项式的加、减、乘、除运算。需要注意的是,相加、减的两个向量必须大小相等。阶次不同时,低阶多项式必须用零填补,使其与高阶多项式有相同的阶次。多项式的加、减运算直接用“+”、“-”来实现。
      • 乘法运算:多项式的乘法用函数conv(p1,p2)来实现,相当于执行两个数组的卷积(两个多项式相乘)
        • p1 = (1:5) p2 =(2:6) p1 + p2
        • conv(p1,p2)
      • 除法运算:多项式的除法用函数deconv(p1,p2)来实现,相当于执行两个数组的解卷。调用格式如下
        • [k,r] = deconv(p,q)
        • 其中k返回的是多项式p除以q的商,r是余式
        • [k,r] = deconv(p,q) —-> p = conv(q,k) + r
      • 构造多项式
        • root = [-5 3+2i 3-2i]
        • p = poly(root)
        • poly2sym(p) —-> ans = x^3 - x^2 - 17*x + 65
      • 多项式的四则运算
  • p1 = [2 3 4 0 -2] p2 = [0 0 8 -5 6] p = p1+ p2 poly2sym(p) q = conv(p1,p2) poly2sym(q)
  • 多项式的导数运算
    • 多项式导数运算用函数polyder 来实现。其调用格式为 polyder(p), 其中p为多项式的系数向量
      1. ```matlab
      2. p = [2 3 8 -5 6]
      3. a = poly2sym(p)
      4. a = 2*x^4 + 3*x^3 + 8*x^2 - 5*x + 6
      5. %求导
      6. q = polyder(p)
      7. q = 8 9 16 -5
      8. b = poly2sym(q)
      9. b =8*x^3 + 9*x^2 + 16*x - 5
      ```

4.3 特殊变量

  • 本节介绍的特殊变量包括单元型变量和结构型变量。这两种数据类型的特点是允许用户将不同但是相关的数据类型集成一个单一的变量,方便数据的管理

4.3.1 单元型变量

  • 单元型变量是以单元为元素的数组,每个元素称为单元,每个单元可以包含其他类型的数组,如实数矩阵、字符串、复数向量。单元型变量通常由”{ }”创建,其数据通过数组下标来引用。
  • 单元型变量的创建

    • 单元型变量的定义有两种方式,一种是用赋值语句直接定义,另一种是由cell函数预先分配存储空间,然后对单元元素逐个赋值。

      • 赋值语句直接定义:
      • 在直接赋值过程中,与在矩阵的定义中使用中括号不同,单元型变量的定义需要使用大括号,而元素之间由逗号隔开。

        • 实例———生成单元数组

          1. >> A=[1 2;3 4]
          2. A =
          3. 1 2
          4. 3 4
          5. >> B = 3 + 2 * i
          6. B =
          7. 3.0000 + 2.0000i
          8. >> C = 'efg'
          9. C =
          10. 'efg'
          11. >> D = 2
          12. D =
          13. 2
          14. >> E = {A,B,C,D}
          15. E =
          16. 1×4 cell 数组
          17. {2×2 double} {[3.0000 + 2.0000i]} {'efg'} {[2]}
        • MATLAB语言会根据显示的需要决定是将单元元素完全显示,还是只显示存储量来代替

      • 对单元的元素逐个赋值:
      • 该方法的操作方式是先预分配单元型变量的存储空间,然后对变量中的元素逐个进行赋值。实现预分配存储空间的函数是cell
      • 在MATLAB中,可以用cell函数生成单元数组,具体的应用形式如下。
        • cell(N) 生成一个n×n阶的置空的单元数组
        • cell(M,N) 或者cell([M,N])生成一个m×n 阶的置空的单元数组;
        • cell(M,N,P,…) 或者cell([M,N,P,…])生成m×n×p…阶的置空的单元数组
        • cell(size(A))生成与A同形式的单元型的置空矩阵
      • 上面例子中的单元型变量E还可以由以下方式定义。
        1. E= cell(1,3);
        2. E{1,1} = [1:4];
        3. E{1,2} = B;
        4. E{1,3} = 2;
        5. E
  • 单元型变量的引用

    • 单元型变量的引用应当采用大括号作为下标的标识,而小括号作为下标标识符则只显示该元素的压缩形式 ```matlab

      E{1} ans = 1 2 3 4 E(1) ans =

    1×1 cell 数组

    {1×4 double} ```

  • MATLAB语言中有关单元型变量的函数
    1. cell :生成单元型变量
    2. cellfun :对单元型变量中的元素作用的函数
    3. celldisp :显示单元型变量的内容
    4. cellplot :用图形显示单元型变量的内容
    5. num2cell :将数值转换成单元型变量
    6. deal :输入输出处理
    7. cell2struct :将单元型变量转换成结构型变量
    8. struct2cell :将结构型变量转换成单元型变量
    9. iscell :判断是否为单元型变量
    10. reshape :改变单元数组的结构
  • celldisp 函数。celldisp 函数可以显示单元型变量的内容,具体应用形式如下,
    • celldisp(C)显示单元型变量C的内容;
    • celldisp(C,’name’)在窗口中显示的单元型变量的内容的名称为name,而不是通常的显示传统的ans
  • cellplot 函数。cellplot 函数使用彩色的图形来显示单元型变量的结构形式,具体应用形式如下。

    • H = cellplot(C) 返回一个向量,这个向量综合体现了表面、线和句柄
    • H = cellplot(C,’legend’) 返回一个向量,这个向量综合体现了表面、线和句柄,并有图形注释legend
    • 实例 ————— 图形显示单元型变量 ```matlab

      cellfun(‘islogical’,E) ans =

    1×4 logical 数组

    0 0 0 0

    cellplot(E) ```

4.3.2 结构型变量

  • 结构型变量的创建和引用

    • 结构型变量是根据属性名(field)组织起来的不同数据类型的集合。结构的任何一个属性可以包含不同的数据类型,如字符串、矩阵等。结构型变量用函数struct 来创建,其调用格式见下表
      | 调用格式 | 说明 | | —- | —- | | s = struct(‘field’,{},’field2’,{},…) | 表示建立一个空的结构数组,不含数据 | | s = struct(‘field’,values1,’filed2’,value2,…) | 表示建立一个具有属性名和数据的结构数组 |

    • 实例 ————— 创建结构型变量

      1. >> mn = struct('color',{'red','black'},'number',{1,2})
      2. mn =
      3. 包含以下字段的 1×2 struct 数组:
      4. color
      5. number
      6. >> mn(1)
      7. ans =
      8. 包含以下字段的 struct:
      9. color: 'red'
      10. number: 1
      11. >> mn(2)
      12. ans =
      13. 包含以下字段的 struct:
      14. color: 'black'
      15. number: 2
      16. >> mn(2).color
      17. ans =
      18. 'black'
  • 结构型变量的相关函数
    • MATLAB 语言中有关结构型变量的函数见下表
      | 函数名 | 说明 | | —- | —- | | struct | 创建结构型变量 | | fieldnames | 得到结构型变量的属性名 | | getfield | 得到结构型变量的属性值 | | setfield | 设定结构型变量的属性值 | | rmfield | 删除结构型变量的属性 | | isfield | 判断是否为结构型变量的属性 | | isstruct | 判断是否为结构型变量z |