(MATLAB)第四章-向量与多项式

发布于:2024-03-06 ⋅ 阅读:(110) ⋅ 点赞:(0)

目录

4.1 向量

4.1.1 向量的生成

(1)直接输入法 

(2)冒号法(冒号生成间隔相等的数组)

(3)利用函数linspace()创建向量

(4)利用logspace()创建一个对数分割的向量

4.1.2 向量元素的引用

4.1.3 向量运算

1. 四则运算

2. 点积运算

3. 叉积运算

4. 混合积运算

4.2 多项式

4.2.1 多项式的创建

1. 基本格式:poly2sym(p)

2. 用多项式的根构造多项式

4.2.2 数值多项式·四则运算

1. 加减法:相加减的向量阶次必须相同(低阶次多项式必须用0补齐)

2. 乘法:用conv(p1,p2)实现,相当于执行两个数组的卷积

3. 除法:用deconv(p1,p2)实现,相当于执行两个数组的解卷

补充:多项式乘法问题(多项式卷积,convolution)——

4.2.3 多项式导数运算 polyder(p)

4.3 特殊变量

4.3.1 单元型变量

1. 单元型变量的创建

(1)赋值语句直接定义 定义需要大括号,元素之间用“,”或“;”隔开 

(2) 对单元的元素逐个赋值

2. 单元型变量的引用

3. MATLAB语言中关于单元型变量的函数

4.3.2 结构型变量(⭐)  

1. 结构体变量的创建和引用

2. 结构体变量的相关函数

参考资料:


4.1 向量

4.1.1 向量的生成

(1)直接输入法 

         [向量元素,逗号/空格间隔行向量;分号分隔生成列向量]

(2)冒号法(冒号生成间隔相等的数组)

        基本格式:x=first:increment(数据元素增量):last

        若增量为1简写为x=first:last

(3)利用函数linspace()创建向量

        基本格式:linspace(first_value,last_value,number)

        表示:创建一个从first_value开始到last_value结束一共包括number个元素的向量

(4)利用logspace()创建一个对数分割的向量

        基本格式:logspace(first_value,last_value,number)

        表示:创建一个从10first_value开始到10last_value结束一共包括number个元素的向量

4.1.2 向量元素的引用

格式

说明

x(n)

表示向量x中第n个元素

x(n1:n2)

表示向量x中的第n1n2个元素

4.1.3 向量运算

1. 四则运算

2. 点积运算

        a’*bdot(a,b)(a、b必须同维);dot(a,b,dim)(表示a、b在dim维的点积)

3. 叉积运算

        叉积运算:

$ \vec{v}=\left( v_x,v_y,v_z \right) ^T,\ \vec{u}=\left( u_x,u_y,u_z \right) ^T,\ \vec{v}\times \vec{u}=\left| \begin{matrix} \vec{i}& \vec{j}& \vec{k}\\ v_x& v_y& v_z\\ u_x& u_y& u_z\\ \end{matrix} \right|=\left( \begin{array}{c} v_yu_z-v_zu_y\\ v_zu_x-v_xu_z\\ v_xu_y-v_yu_x\\ \end{array} \right) $

        计算机中常用方法将叉乘改为点乘方法:

        $ \ \vec{v}\times \vec{u}=V\cdot \vec{u}=\left( \begin{matrix} 0& -v_z& v_y\\ v_z& 0& -v_x\\ -v_y& v_x& 0\\ \end{matrix} \right) \left( \begin{array}{c} u_x\\ u_y\\ u_z\\ \end{array} \right) $

        cross(a,b) 注意a、b必须是3维向量

        cross(a,b,dim) a、b在dim维的叉积且size(a,dim)、size(b,dim)必须为3

4. 混合积运算

        混合积运算:

$ \left( \mathbf{a}\times \mathbf{b} \right) \cdot \mathbf{c\ \ }V=\left| \mathbf{a}\times \mathbf{b} \right|\left| \mathbf{c} \right|\left| \cos \varphi \right|=\left| \left( \mathbf{a}\times \mathbf{b} \right) \cdot \mathbf{c} \right| $

        由dotcross共同实现,如d=dot(a,cross(b,c))

4.2 多项式

       n次多项式:$ \sum_{i=0}^n{a_{n-i}x^i}=a_nx^0+a_{n-1}x^1+...+a_1x^{n-1}+a_0x^n $

       系数向量表示(零不可省略)(注意从高阶到低阶):$ p=\left[ a_n,a_{n-1},...,a_1,a_0 \right] $

4.2.1 多项式的创建

1. 基本格式:poly2sym(p)

2. 用多项式的根构造多项式

        输入n阶多项式的根(矩阵):root=[x1 x2 … xn](可以有复数)

        p=poly(root) ( poly - 具有指定根的多项式或特征多项式 ,此 MATLAB 函数(其中 root 是向量)返回多项式的系数,其中多项式的根是 root 的元素。)

        poly2sym(p)

4.2.2 数值多项式·四则运算

1. 加减法:相加减的向量阶次必须相同(低阶次多项式必须用0补齐)

2. 乘法:用conv(p1,p2)实现,相当于执行两个数组的卷积

3. 除法:用deconv(p1,p2)实现,相当于执行两个数组的解卷

        格式:[k,r]=deconv(p,q) k为多项式p除以q的商,r是余式p=conv(q,k)+r

补充:多项式乘法问题(多项式卷积,convolution)——

        已知两个多项式$ f\left( x \right) =a_0+a_1x+a_2x^2+....+a_{n-1}x^{n-1}+a_nx^n $$ $$ g\left( x \right) =b_0+b_1x+b_2x^2+....+b_{m-1}x^{m-1}+b_mx^m $相乘,得到多项式:

$ h\left( x \right) =f\left( x \right) \cdot g\left( x \right) =c_0+c_1x+c_2x^2+....+c_{n+m-1}x^{n+m-1}+c_{n+m}x^{n+m} $

        多项式系数:

$ c_r=a_rb_0+a_{r-1}b_1+a_{r-2}b_2+...+a_2b_{r-2}+a_1b_{r-1}+a_0b_r=\sum_{i=0}^r{a_ib_{r-i}}\ 0\le r\le m+n $

        因此有:

$ p_f=\left[ a_n,a_{n-1},...,a_2,a_1,a_0 \right] ,\ p_g=\left[ b_m,b_{m-1},...,b_2,b_1,b_0 \right] $$ $$ p_h=\left[ c_{n+m},c_{n+m-1},...,c_2,c_1,c_0 \right] =p_f*p_g=conv\left( p_f,p_g \right) \text{} $

         注:如果把以上所有式子中的x化妆成为z,上述推导过程其实就是论证Z变换的性质之一“时域卷积对应于z域相乘”的过程

4.2.3 多项式导数运算 polyder(p)

        示例: 

>> p=1:10
>> p1=poly2sym(p)
>> m1=polyder(p)
>> p2=poly2sym(m1)

p =

     1     2     3     4     5     6     7     8     9    10

 
p1 =
 
x^9 + 2*x^8 + 3*x^7 + 4*x^6 + 5*x^5 + 6*x^4 + 7*x^3 + 8*x^2 + 9*x + 10
 

m1 =

     9    16    21    24    25    24    21    16     9

 
p2 =
 
9*x^8 + 16*x^7 + 21*x^6 + 24*x^5 + 25*x^4 + 24*x^3 + 21*x^2 + 16*x + 9

4.3 特殊变量

4.3.1 单元型变量

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

1. 单元型变量的创建

(1)赋值语句直接定义 定义需要大括号,元素之间用“,”或“;”隔开 

        示例: 

>> A=[1 2;3 4];
>> B=3+2*i;
>> C='efg';
>> D=2;
>> E={A,B;C,D}

E =

  2×2 cell 数组

    {2×2 double}    {[3.000000000000000 + 2.000000000000000i]}
    {'efg'     }    {[                                     2]}

        MATLAB语言会根据显示的需要决定是将单元元素完全显示,还是只显示存储量来代替。 

(2) 对单元的元素逐个赋值

        实现预分配存储空间的函数时cell()。在MATLAB中可以用函数cell()生成单元数组:

        1)cell(N)生成一个n*n阶的置空单元数组

        2)cell(M,N)或者cell([M,N])生成一个m*n阶的置空单元数组

        3)cell(M,N,P…)或者cell([M,N,P…])生成一个m*n*p*…阶置空的单元数组

        4)cell(size(A))生成与A形式相同的单元型置空矩阵

        示例:

>> E=cell(1,3);
>> E{1,1}=[1:4];
>> E{1,2}=3+2*i;
>> E{1,3}=2;
>> E

E =

  1×3 cell 数组

    {[1 2 3 4]}    {[3.000000000000000 + 2.000000000000000i]}    {[2]}

2. 单元型变量的引用

        变量的引用应采用大括号如{i,j}(引用该元素内的具体内容),而通过小括号引用只显示该元素的压缩形式 

        接上例:

>> E{1} %引用单元型变量的第一个单元,显示该单元的具体值

ans =

     1     2     3     4

>> E(1) %引用单元型变量的第一个单元,显示该单元的压缩形式 

ans =

  1×1 cell 数组

    {[1 2 3 4]}

3. MATLAB语言中关于单元型变量的函数

函数名

说明

cell

生成单元形变量

cellfun

对单元型变量中的元素作用的

celldisp(C)

显示单元型变量C的内容

cellplot

用图形显示单元型变量的内容

num2cell

将数值转换成单元型变量

deal

输入输出处理

cell2struct

将单元型变量转换成结构型变量

struct2cell

将结构型变量转换成单元型变量

iscell

判断是否为单元型变量

reshape

改变单元数组的结构

注:

(1)celldisp(C,’name’) 在窗口中显示的单元型变量的内容为name(而不是ans)

(2)H=cellplot(C) 返回一个向量,这个向量综合体现了表面、线和句柄;

          H=cellplot(C,’lengend’) 增加了图形注释legend

        示例:

>> E=cell(1,3);
>> E{1,1}=[1:4];
>> B=3+2*i;
>> E{1,2}=B; 
>> E{1,3}=2;
>> cellfun('islogical',E) %判断单元型变量E中的元素是否为逻辑变量
>> cellplot(E) %使用图形化的方式显示单元变量

4.3.2 结构型变量  

1. 结构体变量的创建和引用

        结构体变量是根据属性名(field)组织起来的不同数据类型的集合。结构的任何一个属性可以包括不同的数据类型,如字符串、矩阵等。采用struct()构建:

调用格式

说明

s=struct(‘field1’,{},’field2’,{},…)

表示建立一个空的结构数组,不含数组

s=struct(‘field1’,values1,’field2’,values2,…)

表示建立一个具有属性名和数据的结构数组

        示例:

>> mn=struct('color',{'red', 'black'},'number',{1,2})
>> mn(1)          % 结构型变量数据通过属性名来引用
>> mn(2)
>> mn(2).color

mn = 

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

    color
    number


ans = 

  包含以下字段的 struct:

     color: 'red'
    number: 1


ans = 

  包含以下字段的 struct:

     color: 'black'
    number: 2


ans =

    'black'

2. 结构体变量的相关函数

函数名

说明

struct

创建结构体变量

fieldname

得到结构体变量的属性名

getfield

得到结构体变量的属性值

setfield

设定结构体变量的属性值

rmfield

删除结构体变量的属性

isfield

判断是否为结构体变量的属性

isstruct

判断是否为结构体变量

参考资料:

[1] 天工在线. MATLAB2020从入门到精通·实战案例版[M]. 北京: 中国水利水电出版社, 2020.