第四章 多项式与插值
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
xn 1
故方程组有唯一解.
从而插值多项式P(x)存在而且是唯一的.
例 已知误差函数在四个点处函数值 x Erf(x) 0 0 0.6000 0.6039 1.2000 0.9103 1.8000 0.9891
构造3次多项式P(x) 逼近 Erf(x)
设P(x)= a0 + a1x +a2x2 + a3x3, 令 P(xi)=Erf(xi)
例:已知三个一次多项式的零点分别为0.4、0.8、1.2,
求三个一次多项式的乘积。 法1: >>X=[0.4,0.8,1.2]; c=poly(X), P=poly2sym (c)
运行后的结果:
c=
1.0000 -2.4000 1.7600 -0.3840
P= x^3-12/5*x^2+44/25*x-48/125
yi = interp1(x,y,xi,’ cubic’ )
分段三次Hermite插值
同上
yi = interp1(x,y,xi,’ spline’ )
(建议使用三次样条插值)
分段三次样条插值
若已知的数据点x是等距节点,插值速度可提高,此时, 填写最后一个插值方法时,以星号引导,即为 ‘*linear’,’*spline’, ’ *cubic’ ,’ *pchip’ ,’ *nearst’
若找到
P(x)=a0 + a1x +·+ anxn,则称相应的插值为 · ·
代数插值(或多项式插值) 定理: 若插值结点x1,x2,…,xn+1 是(n+1)个互异点,则 满足插值条件 P(xk)= yk 式 (k = 0,1,…,n)的n次插值多项 P(x)=a0 + a1x +……+ anxn
二、 多项式的运算
1.、求根运算 roots(P) P是多项式 p(x)的系数向量,该函数返回 p(x)=0 的全部根(含重根,复根) 2、求值运算
polyval(P, x) 求多项式 P在某点或某些点的函数值;
若x为一数值,则求多项式P在该点处的值; 若x为向量或矩阵,则求多项式P在向量或矩阵中的每个 元素处的值
P=[3,0,4,-5,-7.2,5]; X=roots(P) %求方程f(x)=0的根 G=poly(X) %求多项式g(x),与f(x)的区别是首项系数为1 X0=[5,7.8,9.6,12.3]; f=polyval(P,X0) %求多项式f(x)在给定点的值
3. 多项式的四则运算 (1)多项式的加减法
存在而且是唯一的
此定理表明:在n+1个互异节点构造出来的n次多项式是 lagrange插值多项式、牛顿插值多项式是恒等的
唯一的,也就是说,后面将要学到的幂级数插值多项式、
证明: 由插值条件
P(x1)= y1 P(x2)=y2 ····· ····· ···· P(xn+1)=yn+1
系数行列式
| A | 1 1 x1 x2 1 xn 1
例 求有理分式的导数 P=[3,5,0,-8,1,-5];
Q=[10,5,0,0,6,0,0,7,-1,0,-100];
[p,q]=polyder(P,Q)
若求多项式P的积分:
c=polyint(P)
§4.2 MATLAB插值
常遇到,对于y=f(x),它是存在的,可并不知道它的具
体函数表达式,只知道离散数据
>> P=poly2str(P3,'x')
(2)多项式的乘法
conv(P1,P2) 求多项式P1和P2的乘积
(3)多项式的除法
[Q,r]=deconv(P1,P2) 求P1/P2;
其中Q为多项式P1除以P2的商式,r为P1除以P2的余式。
这里,Q和r仍是多项式系数向量。
deconv是conv的逆函数,即有P1=conv(P2,Q)+r
第四章 多项式与插值
§4.1
一、 多项式的建立
1、直接输入系数向量:把多项式的系数按降幂从
MATLAB与多项式
左至右排列,存成行向量
例:建立多项式 p( x ) 2 x 5 5 x 4 4 x 2 x 4
>>p=[2,5,0,4,1,4];
补充:
将多项式的数值形式转化为字符串或符号表达式的形式 poly2str(p,’s’) 将多项式p转化为以s为变量的字符串形式 poly2sym(p) 将多项式p转化为符号表达式
y f (x)
误差估计:
e ( x ) 0 .5( x a )( x b ) f ( ) e ( x ) 0 .5 ( x a )( x b ) m ax f ( x )
a xb
f (b )
xa
o
x b
x
a xb , a b
在MATLAB中,命令 interp1可做线性插值,
0.32
linear cubic spline nearest 插值点1 插值点2
0.3
0.28
0.26
0.24
0.22
0.2
0.18 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4 0.45 0.5
法2:
>> P1=poly(0.4);P2=poly(0.8);P3=poly(1.2); c =conv (conv (P1, P2), P3) , P=poly2sym (c) 运行后的结果: c=
1.0000 -2.4000 1.7600 -0.3840
P=
x^3-12/5*x^2+44/25*x-48/125
%求f(x)*g(x)
[Q,r]=deconv(f,g) %求f(x)/g(x),商式送Q,余式送r。
4、 多项式的微分与积分
(1)对多项式求导数: p=polyder(P) p=polyder(P,Q) 求多项式P的导函数 求P*Q的导函数
[p,q]=polyder(P,Q) 求P/Q的导函数,导函数的 分子存入p,分母存入q。 (2)对多项式求积分: d=polyint(P) d是多项式P积分后的系数,但不包括 积分常数
当两多项式向量的大小相等,直接两向量相加(减)
当两多项式次数不同时,低阶多项式必须用首0填补,
使其与高阶多项式次数相同
>> P1=[2,5,0,4,1,4];
P= 2 x^5 + 5 x^4 + 5 x^3 + 5 x^2 + 4 x + 6
>> P2=[0,0,5,1,3,2];
>> P3=P1+P2;
例:假设已知的数据点来自函数
f ( x ) ( x 3 x 5)e
2 5 x
sin x 试根据生成的数据进行插值,
得到较光滑的曲线 解: >> x=0:0.12:1;
>> y=(x.^2-3*x+5).*exp(-5*x).*sin(x);
>> plot(x,y,'-o')
0.35
0.3
0.25
0.2
0.15
0.1
0.05
0
0
0.1
0.2
0.3
0.4
0.5
0.6
0.7
0.8
0.9
1
可看出,由这样的数据直接连线绘制出来的曲线十 分粗糙,可再选择一组插值点,然后用interp1插值
x=0:0.12:1;
y=(x.^2-3*x+5).*exp(-5*x).*sin(x);
x0=0:0.02:1; y0=(x0.^2-3*x0+5).*exp(-5*x0).*sin(x0); y01=interp1(x,y,x0); y02=interp1(x,y,x0,'cubic');
poly2sym(p,’s’) 将多项式p转化为以s为变量的符号表达式
>>p=[2,5,0,4,1,4];
A=
>>A= poly2sym(p)
>> B=poly2str(p, 'x')
4 + 2 x5 + 5 x 4 + 4 x 2 + x
B=
2 x^5 + 5 x^4 + 4 x^2 + x + 4
y03=interp1(x,y,x0,'spline');
y04=interp1(x,y,x0,'nearest');
plot(x,y,'mo', x0,y0,'k',x0,y01,'r:', x0,y02,'g:',...
x0,y02,'g:',x0,y03,'m:',x0,y04,'b:')
0.34
polyvalm(P, x) 此处x 必须为方阵,它以方阵为自
变量求多项式 P 的值
例 已知一个多项式
f ( x ) 3 x 4 x 5 x 7.2 x 5
5 3 2
(1)计算f (x)=0 的全部根 (2)由方程f (x)=0的根构造一个多项式 g(x),并与 f (x) 进行对比 (3)计算f (5)、f (7.8)、f (9.6)、f (12.3)的值
得
求解,得 a0=0, a1=1.293, a2= -0.5099, a3=0.0538 所以, P(x)=1.293 x –0.5099 x2 + 0.0538 x3
MATLAB计算程序: x=0:0.6:1.8; y=erf(x); x=x';y=y'; A=[ones(4,1) x x.^2 x.^3]; p=A\y; a0=p(1);a1=p(2); a2=p(3);a3=p(4); t=0:0.2:2; u=a0+a1*t+a2*t.^2+a3*t.^3; plot(x,y,'o',t,u)wk.baidu.com
1 0.8 0.6 0.4 0.2 0
0
0.5
1
1.5
2
一、线性插值(一次多项式插值)
线性插值是两个数据点的直线拟合
g (x) bx ba f (a ) xa ba f (b )
y
f (a )
或
g (x) f (b ) f ( a ) ba ( x a ) f (a )
a0 a0 a 0
a1 x1 an x1 y1
n
a1 x2 an x2 y2
n
a1 xn 1 an xn 1 yn 1
n
x1
n
x2
n
n
n 1 i j 1
( xi x j ) 0
yi=interp1( x, y, xi) 其中:
x表示已知数据点横坐标的向量; y表示已知数据点纵坐
标的向量; xi为插值点的横坐标,输出的yi为插值点的函数值
例 已知数据表如下,分别求 x=0.9,0.7,0.6,0.5
处 y 的值。 x 0.9126 0.8109 y 0 0.25 x= [0.9126,0.8109,0.6931,0.5596,0.4055];
插 值 节 点
xi
yi
x1
y1
x2
y2
xn1 插值函数(常取多项式)
yn 1
被插函数
希望找到一个简单函数 y P ( x ) y f ( x ) 且满足 插值条件: P ( x ) f ( x ) i i
插值区间:[min{ x },max{ x }] i i
P ( x ) 的余项或误差: R( x ) f ( x ) P ( x )
y= [0.0,0.25,0.5,0.75,1.0];
xi = [0.9,0.7,0.6,0.5]';
yi = interp1(x,y,xi,'linear');
[xi , yi]
ans = 0.9000 0.0310 0.7000 0.4854
0.6931
0.5596 0.4055
0.50
0.75 1.00
例 设有两个多项式,计算:
(1)求f(x)+g(x)、f(x)-g(x)。
(2)求f(x)· g(x)、f(x)/g(x)。 f=[3,-5,2,-7,5,6]; g=[3,5,-3]; g1=[0,0,0,3,5,-3]; f+g1 f-g1 %求f(x)+g(x) %求f(x)-g(x)
conv(f, g)
0.6000 0.6743
0.5000 0.8467
另外,interp1命令有5种可选参数
yi = interp1(x,y,xi,’ linear’ ) yi = interp1(x,y,xi,’ nearst’ ) 线性插值(缺省) 最近邻点插值
yi = interp1(x,y,xi,’ pchip’ )
2、用多项式的全部根X来生成
poly(X) 该函数返回以 X为全部根的一个多项式 P
(首项系数为1),当 X是一个长度为m的向量时,
P是一个长度为 m+1的向量。
3、用polyfit 生成多项式的系数
给定 n+1个点可以唯一确定一个 n 阶多项式
调用格式为:
p=polyfit(x, y, n) 其中 x, y是同维向量,代表n+1个数据点的横、纵坐标, n 是多项式的阶数。