目录

1. 前言

2. 多项式的表示

3. Matlab中常用多项式处理的函数

3.1 roots(p)

3.2 conv(p,q)

3.3 polyval(p,x)

3.4 poly(p)

3.5 poly(A)

3.6 poly2sym(p, x)

3.7 residue(b,a)和residue(r,p,k)


1. 前言

Matlab用于动态系统建模、仿真与分析时,将会大量使用多项式。许多系统的模型描述(如系统的传递函数)都需要使用多项式,并在多项式描述的基础上对系统进行仿真分析。本文将概要性第介绍MATLAB中的多项式表示及其基本运算。

可以说多项式的表示和处理构成了动态系统建模和分析的基础。关于动态系统建模和分析的概要,可以参考Matlab/Simulink:动态系统模型的表示及仿真分析基础

2. 多项式的表示

在Matlab中,n阶多项式由一个长度为n+1的向量p所表示,向量p的元素为多项式的系数,且按照自变量x的降幂顺序排列。

比如说,n阶多项式在Matlab中用以下方式表示:

p = [a0,a1,a2,...,an];

这里,一定需要注意的是,系数向量中的元素是按照x的降幂顺序排列,第一个元素表示最高幂次项的系数,而最后一个原数表示常数项。而且,即便某一项的系数为0,也不能漏掉,必须在数组p中全部表示出来。因此matlab是根据系数向量p的长度来判断多项式的阶数,根据元素的位置(索引序号)来判断它所对应的x的幂次项。

比如说,应该表示为

p = [3 0 1 0]; 

3. Matlab中常用多项式处理的函数

3.1 roots(p)

该函数用于求解由p表示的n阶多项式的根,即方程p(x)=0的根,包括复数根,返回值为长度为n的向量。

p = [3,0,1,2,1];
roots(p)
[z,p,k] = tf2zpk(p,1)

容易猜到在动态系统的零极点模型求解中要用到这个函数。比如说,以上例子中,对tf2zpk的调用的返回值的z其实就等于roots(p)。

3.2 conv(p,q)

卷积和多项式乘法。

它计算p和q两个向量的卷积,所得到的结果向量pq所表示的多项式对应于p和q所表示的两个多项式的乘积。换言之,两个多项式的乘积的系数向量等于两个多项式的系数向量的卷积。

该函数计算多项式p,q的乘积,通常也称为p,q的卷积。

conv()函数有一个参数shape用于指定输出的形状,可以取值'same', 'full'和'valid'。

'full'是指全卷积,不指定该参数的时候采用的就是'full'。

'same'表示取全卷积中长度等于第一个输入向量p长度的结果部分,而且是掐头去尾的中间部分。

‘valid’稍微别扭一些,其输出也是全卷积结果的掐头去尾的中间部分。但是所取的长度是 。其物理含义不是很直观,官方解释是“Only those parts of the convolution that are computed without the zero-padded edges. ”,“仅返回计算的没有补零边缘的卷积部分”。但是我并没有看懂到底是啥意思。。。^-^

容易想到'same'和'valid'模式的卷积不是可交换的,运行以下例子代码可以清楚地看出这点:

% conv
u = [1 2 3];
v = [2 1 0 1 0 1 3];
w = conv(u,v)
w = conv(u,v,'full') % The same as conv(u,v)
w = conv(u,v,'same')
w = conv(v,u,'same')
w = conv(u,v,'valid')
w = conv(v,u,'valid')

3.3 polyval(p,x)

若x为一数值,则计算多项式在x处的值;若x为向量或矩阵,则计算多项式在x中每一元素处的值。由于是逐元素(elementwise operation)返回值的形状与输入x相同。

p = [3 0 1 0];
X = magic(3) % 生成一个3阶魔方矩阵
polyval(p,X)
polyvalm(p,X) % 与polyval完全不同的运算!

polyval(p,x)有一个名字相近的表亲polyvalm(),但是它们的功能完全不同!polyvalm()的运算涉及到比较高阶的数学知识,超出了本文的范围。有兴趣的小伙伴自行查询matlab help。

3.4 poly(p)

poly(p)计算以向量p中的元素为根的多项式,即由根反向求多项式。容易想到它与roots是互逆的处理,但是并不是严格的互逆。这是因为一个方程的根是相同的。这个从以下例子可以看出:

poly([2 -3])
poly(roots([2 1 0 1 0 1 3]))

第2条语句返回的向量与原向量相差一个系数。

3.5 poly(A)

如果A是一个方阵的话,则poly(A)返回的是方阵A的特征多项式。

特征多项式的根即为特征向量,以下代码段通过从不同的方式来计算特征多项式以及求特征根,演示了这些函数所代表的运算之间的关系。

A = [1 8 -10; -4 2 4; -5 2 8];
eA = eig(A) % 求A的特征向量
poly(eA)    % 求以A的特征向量为根的多项式,即A的特征多项式
p = poly(A) % 直接求A的特征多项式
assert( abs((eA - roots(p))' * (eA - roots(p))) < 1e-10 ) % 验证eA与特征多项式的根的一致性,在误差范围内

3.6 poly2sym(p, x)

poly2sym(p)是属于matlab的符号运算的一部分,它将以向量p表示的多项式转换为其符号表示形式,第2个参数用于表示指定的自变量符号,如果不指定的话就使用x。

poly2sym([1 0 -2 -5])
t = sym('t');
poly2sym([1 0 -2 -5], t) % 将自变量指定为 t 替代缺省的 xpoly2sym([1 0 -2 -5]) * poly2sym([1 1 ])

ans = x^3 - 2*x - 5
ans = t^3 - 2*t - 5
ans = -(x + 1)*(- x^3 + 2*x + 5)

符号计算的功能对于撰写论文中需要进行公式推导啊什么的是一个很方便的工具 。

3.7 residue(b,a)和residue(r,p,k)

[r,p,k] = residue(b,a) 计算以如下形式展开的两个多项式之比的 部分分式展开式 的留数、极点和直项:

  residue 的输入是由多项式 b = [bm ... b1 b0] 和 a = [an ... a1 a0] 的系数组成的向量。输出为留数 r = [rn ... r2 r1]、极点 p = [pn ... p2 p1] 和多项式 k

[b,a] = residue(r,p,k) 将部分分式展开式转换回两个多项式之比,并将系数返回给 b 和 a

使用 residue 求以下多项式之比的部分分式展开式:

b = [-2, 6, 3];
a = [3, 0, 2, 1];
[r,p,k] = residue(b,a)
[b,a]   = residue(r,p,k)

Matlab: 多项式表示及其基本运算相关推荐

  1. Matlab入门教程--基本运算与函数(一)

    Matlab入门教程--基本运算与函数(一) 在MATLAB下进行基本数学运算,只需将运算式直接打入提示号(>>)之後,并按入Enter键即可.例如: >>(5*2+1.3-0 ...

  2. Matlab常用语法和基本运算

    (一)Matlab基本操作    1> 实数的加减乘除乘方等运算 可直接在Matlab的控制台下进行对应的操作,如下. >> 5+6 ans =11>> 3-2 ans ...

  3. matlab基本矩阵运算,科学网—matlab中矩阵基本运算 - 成爱芳的博文

    以矩阵A为例: (1)转置矩阵求取   AT transpose(A) >> A=[1 0 3; 2:4; 3 1 0] A = 1     0     3 2     3     4 3 ...

  4. MATLAB 数据及基本运算 --持续更新

    目录 2.1 MATLAB 的数值数据及操作         2.1.1 数值数据         2.1.2 数据的输出格式 2.2 MATCAB的变量及操作         2.2.1 变量与赋值 ...

  5. matlab矩阵及其基本运算—特征值分解和svd奇异值分解

    特征值分解 函数 eig eig: Find eigenvalues and eigenvectors 格式 d = eig(A)         %求矩阵A的特征值d,以向量形式存放d. d = e ...

  6. matlab基本矩阵运算,matlab的矩阵基本运算问题已知A=[a,b,c;d,e,f;h,I,j],B=[l,m,n;x,y,z;q,o,p]...

    共回答了22个问题采纳率:95.5% clear all;clc; syms a b c d e f h l j m n x y z o p q A=[a,b,c;d,e,f;h,l,j]; B=[l ...

  7. MATLAB矩阵的基本运算及操作

  8. matlab矩阵及其基本运算—特征值分解和奇异值分解

    特征值分解 函数 eig 格式 d = eig(A)         %求矩阵A的特征值d,以向量形式存放d. d = eig(A,B)       %A.B为方阵,求广义特征值d,以向量形式存放d. ...

  9. 谱减法matlab程序_从零开始的matlab学习笔记——(2)基本运算

    写到后面的时候忽然发现自己好多小点没有写,这里赶紧亡羊补牢一下: pi:在matlab里代表圆周率 abs(a)对a求绝对值 mod(a,b):a除b的余数,emmm C语言中一般用a%b 反三角函数 ...

最新文章

  1. 华为诺亚方舟加拿大实验室提出BANet,双向视觉注意力机制用于单目相机深度估计...
  2. python读取redis存储数据的存储时间_Python读写Redis数据库操作示例
  3. 宝塔php加入环境变量,宝塔面板如何配置 node.js 环境变量
  4. 排序算法之——选择排序
  5. Spring动态注入泛型集合Bean
  6. mysql系统自带示例数据库_MySQL系统自带的数据库information schema
  7. 推荐系统知识梳理——协同过滤
  8. C#读书笔记之继承、接口与抽象类续
  9. paip.提升用户体验---c++ qt自定义窗体(2)---边框线的绘制
  10. 《Java并发编程实战》【第四部分 高级主题】
  11. Win10 Android Fastboot驱动问题
  12. 计算机制作游戏,怎么制作游戏?
  13. android左抽屉点击事件,Android导航抽屉单击事件问题
  14. 小李飞刀:醉卧沙场君莫笑,python你还是等等我
  15. java缺失_Java中找出缺失的数字
  16. ONF和ON.Lab合并为一 加速推进SDN落地
  17. html css图标怎么跟文字并排,科技常识:css图标与文字对齐的两种实现方法
  18. 代理平台kb-proxy:注册与登录【三】
  19. 计算机面试常见题目-网络
  20. linux安装——管理应用程序

热门文章

  1. 用python-sklearn做广州房价预测——以此为例说明如何使用python做简单的数据分析
  2. 调整字体间距属性和文字换行属性
  3. 计算机中符号位正负,负数在计算机中的表示+有符号无符号的区别+负数按位运算...
  4. Android 获取夜深模拟器中的文件获取不到
  5. 将数字划分为素数的乘积
  6. Qt 下 按钮发声技术
  7. 设置主菜单背景显示为壁纸
  8. 问题 J: 古罗马数字2
  9. 盖茨接班人:微软产品为何总是挨批
  10. specCPU 2006 备忘