第五章 多项式、插值与数据拟合
• 多项式MATLAB命令
• 插值
– Lagrange插值
– Hermite插值
– Runge现象和分段插值
– 分段插值
– 样条插值的MATLAB表示
• 数据拟合
–多项式拟合
–函数线性组合的曲线拟合方法
–最小二乘曲线拟合
–B样条函数及其MATLAB表示
5.1 关于多项式MATLAB命令
n
c x c
n
n
1
y
• 一个多项式的幂级数形式可表示为:
c x
1
• 也可表为嵌套形式
((
)
(
c x c x c x
1
c x
2
n
1
)
2
y
• 或因子形式
y
3
)n
c x c
1
n
(
c x
1
r
1
)(
x
r
2
)
x
(
)n
r
N阶多项式n个根,其中包含重根和复根。若多
项式所有系数均为实数,则全部复根都将以共轭对
的形式出现
• 幂系数:在MATLAB里,多项式用行向量表示,其
元素为多项式的系数,并从左至右按降幂排列。
y
2
x
3
x
4
x
5
2
例:
被表示为 >> 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
所有零点由一个列向量给出。
y
6
x
1
• Poly: 由零点可得原始多项式的各系数,但可能相差
6
x
5
6
x
6
1)
4
15
x
(
x
一个常数倍。
例: >> poly(r)
ans =
1.0000 0.5000 2.0000 2.5000
注意:若存在重根,这种转换可能会降低精度。
例:
2
15
x
>> 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
舍入误差的影响,与计算精度有关。
3
20
x
3
7
x
2
2
x
1
x
• polyval: 可用命令polyval计算多项式的值。
例: 计算y(2.5)
>> c=[3,-7,2,1,1]; xi=2.5; yi=polyval(c,xi)
yi =
23.8125
如果xi是含有多个横坐标值的数组,则yi也
y
4
3
x
为与xi长度相同的向量。
>> c=[3,-7,2,1,1]; xi=[2.5,3];
>> yi=polyval(c,xi)
yi =
23.8125 76.0000
• 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
0.2015
x
1.4385
x
y
2
2.7477
x
5.4370
n
c x
1
c x
2
n
1
c x
n
c
n
1
n
1
x
c
2
n
n
x
c
n
2
2
x
c
x
c
n
2
n
1
多项式积分:
y
n
Y
ydx
c
1
1
功能:求多项式积分
调用格式:py=poly_itg(p)
p:被积多项式的系数
py:求积后多项式的系数
poly_itg.m
function py=poly_itg(p)
n=length(p);
py=[p.*[n:-1:1].^(-1),0]
不包括最后一项积分常数
n
1
c x
2
c x
n
c
多项式微分:
n
y
c x
1
nc x
1
'
y
c
(
n
n
2
n
1
1)
c x
2
1
n
• Polyder: 求多项式一阶导数的系数。
调用格式为: b=polyder(c )
c为多项式y的系数,b是微分后的系数,
其值为:
[
1)
, (
n
n
c
2
,
,
c
]n
nc
1