插值法
1. 下列数据点的插值
x 0 1 4 9 16 25 36 49 64 y 0 1 2 3 4 5 6 7 8
可以得到平方根函数的近似,在区间[0,64]上作图. (1)用这9个点作8次多项式插值Ls(x). (2)用三次样条(第一边界条件)程序求S(x).
从得到结果看在[0,64]上,哪个插值更精确;在区间[0,1]上,两种插值哪个更精确
解:(1)拉格朗日插值多项式,求解程序如下
syms x l;
>
x1=[0 1 4 9 16 25 36 49 64]; y1=[0 1 2 3 4 5 6 7 8]; n=length(x1); Ls=sym(0); for i=1:n
l=sym(y1(i)); for k=1:i-1
l=l*(x-x1(k))/(x1(i)-x1(k)); end
for k=i+1:n
】
l=l*(x-x1(k))/(x1(i)-x1(k)); end Ls=Ls+l; end
Ls=simplify(Ls) %为所求插值多项式Ls(x).
输出结果为
Ls =
-/*x^2+95549/72072*x-1/00*x^8-2168879/0*x^4+19/0*x^7+657859/*x^3+33983/0*x^5-13003/00*x^6
(2)三次样条插值,程序如下
|
x1=[0 1 4 9 16 25 36 49 64]; y1=[0 1 2 3 4 5 6 7 8]; x2=[0:1:64];
y3=spline(x1,y1,x2);
p=polyfit(x2,y3,3); %得到三次样条拟合函数 S=p(1)+p(2)*x+p(3)*x^2+p(4)*x^3 %得到S(x) 输出结果为: S =
/6464-2399/88*x+/1984*x^2+2656867/624*x^3
(3)在区间[0,64]上,分别对这两种插值和标准函数作图,
\\
plot(x2,sqrt(x2),'b',x2,y2,'r',x2,y3,'y')
蓝色曲线为y=函数曲线,红色曲线为拉格朗日插值函数曲
线,黄色曲线为三次样条插值曲线
100806040200-20010203040506070
可以看到蓝色曲线与黄色曲线几乎重合,因此在区间[0,64]上三次样条插值更精确。
在[0,1]区间上由上图看不出差别,不妨代入几组数据进行比较 ,取x4=[0::1]
x4=[0::1];
sqrt(x4) %准确值 subs(Ls,'x',x4) %拉格朗日插值 spline(x1,y1,x4) %三次样条插值
运行结果为
)
ans =
0 ans =
0 ans =
0
从这几组数值上可以看出在[0,1]区间上,拉格朗日插值更精确。
数据拟合和最佳平方逼近 2. 有实验给出数据表
\
x y
试求3次、4次多项式的曲线拟合,再根据数据曲线形状,求一个另外函数的拟合曲线,用图示数据曲线及相应的三种拟合曲线。 解:(1)三次拟合,程序如下
sym x;
x0=[ ]; y0=[ ];
cc=polyfit(x0,y0,3);
S3=cc(1)+cc(2)*x+cc(3)*x^2+cc(4)*x^3 %三次拟合多项式 xx=x0(1)::x0(length(x0));
~
yy=polyval(cc,xx);
plot(xx,yy,'--'); hold on;
plot(x0,y0,'x'); xlabel('x'); ylabel('y');
运行结果
S3 =
-/624+437/28*x-0524945/28*x^2+409/*x^3
图像如下
…
2.521.5y10.5000.10.20.30.40.5x0.60.70.80.91
(2)4次多项式拟合
sym x;
x0=[ ]; y0=[ ];
cc=polyfit(x0,y0,4);
S3=cc(1)+cc(2)*x+cc(3)*x^2+cc(4)*x^3+cc(5)*x^4 xx=x0(1)::x0(length(x0)); yy=polyval(cc,xx); plot(xx,yy,'r');
'
hold on;
plot(x0,y0,'x'); xlabel('x'); ylabel('y');
运行结果
S3 =
00396215/624-347/28*x+/28*x^2-/624*x^3+849/9007*x^4
图像如下
2.521.5y10.5000.10.20.30.40.5x0.60.70.80.91
(3)另一个拟合曲线,
*
新建一个M-file程序如下:
function [C,L]=lagran(x,y) w=length(x); n=w-1;
L=zeros(w,w); for k=1:n+1 V=1;
for j=1:n+1 if k~=j
{