一维数组相关函数的应用以线性拟合为例 四、一维数组在一元多项式运算中的应用 2、多项式的符号表示 练习 练习 11、部分分式展开(留数计算) 求函数在指定点处的留数 12、多项式的矩阵运算 p是多项式的系数向量,相当于用矩阵X代替多项式的变量来对矩阵进行计算,X必须为方阵。 0 -2.5 -4 -5.7 -3.5 -2 -1 2 3.5 4 7 7.5 9.9 10.9 0 0.2 0.6 1 1.3 1.6 1.7 1.8 1.9 2.2 2.3 2.5 2.6 2.9 y x 11.9 13.5 13 11.9 9 6.5 4 1.5 0 -2.5 -5 3.1 3.4 3.8 4.1 4.4 4.7 4.8 4.9 5 5.1 5.3 y x 多项式拟合时的注意事项 在进行曲线拟合时对多项式阶次的选择是任意的。 虽然高阶的多项式可以更准确地拟合数据(仅指该曲线与给定的数据之间的均方误差最小),但在进行曲线拟合时,并不需要采用太高阶的多项式,这主要基于以下原因: 1、越是高阶的多项式其数值特性越差,计算起来也越耗时; 2、随着多项式阶次的升高,拟合的曲线变的越来越不平滑,通常会出现用户不愿意看到的局部波形; 3、由于数据本身的近似性,因此在进行数据拟合时没有必要仅仅考虑使拟合的曲线无限接近数据点,而要在曲线的阶次合均方误差之间综合考虑,因为越是高阶的多项式在物理实现时越困难。 从数学原理上,n+1个数据点可以惟一定义一个n次曲线(或n阶多项式)。 3、向量的方向角与方向余弦,单位向量 a = [4,3,1] d = sqrt(sum(a.^2)) e0 = a./d 4、向量的线性运算 a = [4,3,1] b = [5,2,3] c = 1.6 直接利用matlab的数组运算规则即可进行运算 pab = a + b sab = a – b d = c*a 5、向量的内积(点积,点乘) dot(a,b) = sqrt(dot(a,a)) Matlab中提供了 dot() 函数实现向量的内积 6、两个向量之间的夹角 tmp = dot(a,b)/sqrt(dot(a,a))/sqrt(dot(b,b)) theta = acos(tmp) 7、向量的叉积(叉乘) cross(a,b) = Matlab中提供了 cross() 函数实现向量的内积 8、向量的混合积: dot(cross(a,b),c) 上机练习: 3.以A(1,2,3),B(2,0,5),C(4,2,-1)为顶点的三角形的面积。 4.求以A(0,0,2),B(3,0,5),C(1,1,0),D(4,1,2)为顶点的四面体的体积。 借助matlab提供的函数,处理多项式是一件非常简单的事情,很容易对多项式进行积分、微分以及求根的操作。 一元多项式在代数中占有非常重要的地位。在实际应用中如对实验数据的插值、微商和曲线拟合等,都要大量用到多项式;在矩阵分析时,也要用到一元多项式的概念。多项式函数是形式最简单的函数,也是最容易计算的函数,从理论上讲,它可以表示绝大多数复杂函数。在许多计算机的计算和编程中,很多函数值如sin(x),cos(x)等的计算都是先将函数进行Tailor展开为多项式进行逼近计算的,并且都能达到很高的精度。 1、多项式的表示和创建 在matlab中,一个一元多项式用一个行向量来表示的,向量元素为多项式系数的降幂排列,其中最后一个元素代表多项式中的0幂项。 p = [1,-12,0,25,116] poly2sym() 把系数向量表示的多项式转为符号表示 poly2sym(p) 用默认字符’x’来表示多项式的变量 poly2sym(p,’v’) 用字符‘v’来表示多项式的便量 p = [1,-12,0,25,116] px = poly2sym(p) pt = poly2sym(p,’t’) 3、计算多项式的值 p = [1,-12,0,25,116]; x1 = 2.3; x2 = [-1,3,7]; y = polyval(p,x) p1 = polyval(p,x1); p2 = polyval(p,x2); 计算多项式p在x处的值,x可以是标量,向量或矩阵 4、求多项式的根 r = roots(p) 此函数返回多项式p的根组成的向量 多项式和多项式的根都是用向量表示的,为加以区别,多项式的根表示成列向量。 p = [1,-12,0,25,116] r = root(p) 对于系数为实数的多项式,如果其根出现复数,则复数必是成对出现的。 5、由根创建相应的多项式 r = [1;2;-1;3;7] p = poly(r) p = poly(r) r是一个向量,构造一个多项式,其根为r 由于matlab在进行数据处理时存在截断误差,因此,poly函数的返回值有可能在该出现0的位置出现了一个非常接近0的数,有时还会使某些系数带有一个很小的虚部。因此建议对poly函数的输出结果再进行一次处理,从而消除有可能出现的数据错误。例如,可以通过比较将绝对值极小的数强制置0,或利用real函数将实部从结果中提取出来,取消错误虚部的影响。 由根构造多项式时,所得到的多项式的第一项为1 6、多项式的加法和减法 当两个多项式的阶次不同时,其系数向量的长度也不同,这时需要先将低阶多项式的系数向量前边补上足够的0,以便使它和高阶多项式具有相同的长度,然后再执行加法(减法)运算。 Matlab没有专门的函数执行多项式加法(减法) 如果两个多项式的阶次相同,其系数向量的长度相等,多项式的加法就是将两个多项式向量直接相加(相减)。 7、多项式的乘法 a = [1,2,3,4] b = [1,4,9,16] c = conv(a,b) w = conv(u,v) 此函数返回多项式u和v的乘积 多项式的乘法就是多项式系数向量之间的卷积 如果要执行多个多项式之间的乘法运算,需要重复使用conv函数 数学物理方法(陆全康 赵惠芬,第二版,高等教育出版社,2003)P87 8、多项式的除法 [q,r] = deconv(b,a ) q:用来存储b/a的商多项式, r:用来存储b/a的余数多项式 余数通常都与除数和被除数中较长的那个向量等长,因此r的前面一般有若干个0 此函数表示多项式b除以多项式a得到商多项式q和余数多项式r,如果r的元素全部为0,则表示多项式b可以整除多项式a。 多项式的除法就是多项式系数向量之间进行解卷积运算 9、多项式的微分(求导) polyder( ) 多项式微分 k = polyder(p) 求多项式p的微分多项式 k = polyder(a,b) 求a x b的微分 [q,d] = poyder(b,a):求有理分式b/a的微分 q:分子多项式 d:分母多项式 10、多项式的积分 p = [1,6,20,48,69,72,44] h = polyder(g) q = polyint(h,44) q = polyint(p,k) 对多项式p积分,k为积分常数 q = polyint(p) 对多项式p积分,积分常数为0 找出两个多项式b(x)和a(x)之比b(x)/a(x)的留数、极点及直项向量。 将部分分式展开的形式还原为两个多项式b(x)和a(x)相除的形式
Matlab02:一维数组及其应用.ppt
下载此电子书资料需要扣除0点,