第二章多项式与插值 来源于实际、又广泛用于实际。 多项式插值的主要目的是用一个多项式 拟合离散点上的函数值,使得可以用该 多项式估计数据点之间的函数值 可导出数值积分方法,有限差分近似 关注插值多项式的表达式、精度、选点 效果
第二章 多项式与插值 • 来源于实际、又广泛用于实际。 • 多项式插值的主要目的是用一个多项式 拟合离散点上的函数值,使得可以用该 多项式估计数据点之间的函数值。 • 可导出数值积分方法,有限差分近似 • 关注插值多项式的表达式、精度、选点 效果
21关于多项式 MATLAB命令 一个多项式的幂级数形式可表示为: y=C1x+C2x+…+Cnx+Cn+ 也可表为嵌套形式 y=(…(x+C2)x+C3)x…+Cn)x+CnH1 或因子形式 (x-71)(x-12)…(x-n) N阶多项式n个根,其中包含重根和复根。若多 项式所有系数均为实数,则全部复根都将以共轭对 的形式出现
2.1 关于多项式MATLAB命令 • 一个多项式的幂级数形式可表示为: • 也可表为嵌套形式 • 或因子形式 N阶多项式n个根,其中包含重根和复根。若多 项式所有系数均为实数,则全部复根都将以共轭对 的形式出现 1 1 2 1 n n n n y c x c x c x c − = + + + + + 1 2 3 1 ( (( ) ) )n n y c x c x c x c x c = + + + + + 1 1 2 ( )( ) ( )n y c x r x r x r = − − −
幂系数:在 MATLAB里,多项式用行向量表示,其 元素为多项式的系数,并从左至右按降幂排列。 例 y=2x2+x2+4x+5 被表示为>p=[2145] poly asym(p) ans≡ 2*x^3+X^2+4*x+5 Roots:多项式的零点可用命令 roots求的 例:>r= roots(p)得到 0.2500+1.5612 0.2500-1.5612i 1.0000 所有零点由一个列向量给出
• 幂系数:在MATLAB里,多项式用行向量表示,其 元素为多项式的系数,并从左至右按降幂排列。 例: 被表示为 >> p=[2 1 4 5] >> poly2sym(p) ans = 2*x^3+x^2+4*x+5 • Roots: 多项式的零点可用命令roots求的。 例: >> r=roots(p) 得到 r = 0.2500 + 1.5612i 0.2500 - 1.5612i -1.0000 所有零点由一个列向量给出。 3 2 y x x x = + + + 2 4 5
Poly:由零点可得原始多项式的各系数,但可能相差 个常数倍。 例:>poly( ans 1.00000.50002.00002.5000 注意:若存在重根,这种转换可能会降低精度。 例:y=(x-1=x6-6x3+15x1-20x3+15x2-6x+1 >> roots([1-615-2015-61] 1.0042+0.0025i 1.0042-0.00251 1.0000+0.0049i 1.0000-0.00491 0.9958+0.00241 0.9958-0.0024i 舍入误差的影响,与计算精度有关
• Poly: 由零点可得原始多项式的各系数,但可能相差 一个常数倍。 例: >> poly(r) ans = 1.0000 0.5000 2.0000 2.5000 注意:若存在重根,这种转换可能会降低精度。 例: >> r=roots([1 -6 15 -20 15 -6 1]) r = 1.0042 + 0.0025i 1.0042 - 0.0025i 1.0000 + 0.0049i 1.0000 - 0.0049i 0.9958 + 0.0024i 0.9958 - 0.0024i 舍入误差的影响,与计算精度有关。 6 6 5 4 3 2 y x x x x x x x = − = − + − + − + ( 1) 6 15 20 15 6 1
polyol:可用命令 polyol计算多项式的值。 例 +2x2+x+1计算y(25) >>C=[3,-7,2,1,1;xi=2.5,y= polyol(c,xi 23.8125 如果x是含有多个横坐标值的数组,则y也 为与xi长度相同的向量。 C=[3,-7,2,121,Xi=[25,3 yi=polyval(c, xi) yl 23.812576.0000
• polyval: 可用命令polyval计算多项式的值。 例: 计算y(2.5) >> c=[3,-7,2,1,1]; xi=2.5; yi=polyval(c,xi) yi = 23.8125 如果xi是含有多个横坐标值的数组,则yi也 为与xi长度相同的向量。 >> c=[3,-7,2,1,1]; xi=[2.5,3]; >> yi=polyval(c,xi) yi = 23.8125 76.0000 4 3 2 y x x x x = − + + + 3 7 2 1
polyfit:给定n+1个点将可以唯一确定一个n阶多项式。利 用命令 polyfit可容易确定多项式的系数 例 >>X=[1.1,2.3,3.9,5.1 y=[3.8874.276,4.651,2.117]; >a=polyfit(x, y, length(x)-1) a -0.201514385-2.74775.4370 poly2sym(a) ans -403/2000*x^3+2877/2000*x^2-27477/10000*x+5437/1000 多项式为y=-02015x3+1.4385x2-2.7477x+54370 Polyfit的第三个参数是多项式的阶数
• polyfit:给定n+1个点将可以唯一确定一个n阶多项式。利 用命令polyfit可容易确定多项式的系数。 例: >> x=[1.1,2.3,3.9,5.1]; >> y=[3.887,4.276,4.651,2.117]; >> a=polyfit(x,y,length(x)-1) a = -0.2015 1.4385 -2.7477 5.4370 >> poly2sym(a) ans = -403/2000*x^3+2877/2000*x^2-27477/10000*x+5437/1000 多项式为 Polyfit的第三个参数是多项式的阶数。 3 2 y x x x = − + − + 0.2015 1.4385 2.7477 5.4370
多项式积分 y=c1x+C2x+…+cnx+ n+1 Y Jdr Cx++=2x"+.+x Tom+l-c+Cnt n+1 功能:求多项式积分 调用格式:py= poly itg(p) p:被积多项式的系数 py:求积后多项式的系数 poly itg. m function py=poly itg(p) Length(p) py=[p.*[ni:-1:1]^(-1),0 不包括最后一项积分常数
多项式积分: 功能:求多项式积分 调用格式:py=poly_itg(p) p:被积多项式的系数 py:求积后多项式的系数 poly_itg.m function py=poly_itg(p) n=length(p); py=[p.*[n:-1:1].^(-1),0] 不包括最后一项积分常数1 2 1 2 1 2 1 2 n n n n n c c c Y ydx x x x c x c n n + = = + + + + + + + + 1 1 2 1 n n n n y c x c x c x c − = + + + + +
多项式微分: y=Cr +c2x+.''tCnxtcn+ y=nC1x+(n-1)c2x2+…+C Polder:求多项式一阶导数的系数 调用格式为:b= polymer(c) c为多项式y的系数,b是微分后的系数, 其值为: nC1,(n-1)c2,…,Cn
多项式微分: • Polyder: 求多项式一阶导数的系数。 调用格式为: b=polyder(c ) c为多项式y的系数,b是微分后的系数, 其值为: 1 1 2 1 n n n n y c x c x c x c − = + + + + + ' 1 2 1 2 ( 1) n n n y nc x n c x c − − = + − + + 1 2 [ ,( 1) , , ] nc n c c − n
两个多项式的和与差: 71 Va =ax tax ∴+a.x+a m+1 yb=bx+b2x+…+bnx+bn 命令 poly add:求两个多项式的和,其调用格式为 poly add(a, b) 多项式a减去b,可表示为 c- poly add(a-b)
两个多项式的和与差: 命令poly_add:求两个多项式的和,其调用格式为: c= poly_add(a,b) 多项式a减去b,可表示为: c= poly_add(a,-b) 1 1 2 1 n n b n n y b x b x b x b − = + + + + + 1 1 2 1 m m a m m y a x a x a x a − = + + + + +
功能:两个多项式相加 调用格式:b= poly add(plp2) b:求和后的系数数组 poly add. m function p3=poly add(pl, p2) nI=length(pl) n2=length(p2) ifnI==n2 p3-p1+p2; end if nI>n2 p3=p1+zeros(l, n1-n2),p2]: end if nI<n2 p3=zeros(l, n2-n1)p1+p2; end
功能:两个多项式相加 调用格式:b=poly_add(p1,p2) b:求和后的系数数组 • poly_add.m function p3=poly_add(p1,p2) n1=length(p1); n2=length(p2); if n1==n2 p3=p1+p2;end if n1>n2 p3=p1+[zeros(1,n1-n2),p2];end if n1<n2 p3=[zeros(1,n2-n1),p1]+p2;end