MATLAB实现拉格朗日插值

数值分析上机报告

题目:插值法学号:姓名:靳会有

201014924

一、调用MATLAB内带函数插值

1、MATLAB内带插值函数列举如下:

2、取其中的一维数据内插函数()为例,程序如下:

其调用格式为:

yi=interp1(x, y, xi)

yi=interp1(x, y, xi, method)

举例如下:

x=0:10:100

y=[40 44 46 52 65 76 80 82 88 92 110]; xi=0:1:100

yi=interp1(x,y,xi,'spline') 3、其他内带函数调用格式为: Interpft函数:

y=interpft(x,n) y=interpft(x,n,dim) interp2函数:

ZI=interp2(X, Y, Z, XI, YI), ZI=imerp2(Z, ntimes)

ZI=interp2(Z, XI, YI) ,ZI=interp2(X, Y, Z, XI, YI, method) interp3函数:

VI=interp3(X,Y,Z,V,XI,YI,ZI) VI=interp3(V, ntimes) VI=interp3(V,XI,YI,ZI) VI=interp3(…, method) Interpn函数:

VI=interpn(X1, X2, X3, …, V, Y1, Y2, Y3, …) VI=interpn(V, ntimes)

VI=interpn(V, Yl, Y2, Y3, …) VI=interpn(…, method) Spline函数:

yi=spline(x,y,xi) pp=spline(x,y) meshgrid函数:

[X,Y]=meshgrid(x,y) [X,Y]=meshgrid(x)

[X,Y,Z]=meshgrid(x,y,z) Ndgrid函数:

[X1, X2, X3, …]=ndgrid(x1, x2, x3, …) [X1, X2, X3, …]=ndgrid(x) Griddata函数:

ZI=griddata(x, y, z, XI, YI)

[XI, YI, ZI]=griddata(x, y, z, xi, yi) […]=griddata(… method) 二、自编函数插值 1、拉格朗日插值法: 建立M 文件:

function f = Language(x,y,x0) syms t l;

if(length(x) == length(y)) n = length(x); else

disp('x和y的维数不相等!'); return; %检错

end h=sym(0); for (i=1:n) l=sym(y(i)); for(j=1:i-1)

l=l*(t-x(j))/(x(i)-x(j)); end; for(j=i+1:n)

l=l*(t-x(j))/(x(i)-x(j)); end; h=h+l; end simplify(h); if(nargin == 3)

f = subs (h,'t',x0); %计算插值点的函数值 else

f=collect(h);

f = vpa(f,6); %将插值多项式的系数化成6位精度的小数 end

在MATLAB中输入:

x=[18 31 66 68 70 72 70;] y=[23 33 52 51 43 40 46]; f=Language(x,y) plot(x,y)

结果为:

f =Inf + (-t)*Inf - 54329.8*t^2 + 1503.75*t^3 - 22.2065*t^4 + 0.16789*t^5 - 0.000512106*t^6

图形如下:

MATLAB实现拉格朗日插值

建立如下拉格朗日插值函数:

function y=lagrange(x0,y0,x); n=length(x0); m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j)); end end

s=p*y0(k)+s; end

y(i)=s; end

画图程序如下: x=[-5:1:5]; y=1./(1+x.^2); x0=[-5:0.001:5]; y0=lagrange(x,y,x0); y1=1./(1+x0.^2); plot(x0,y0,'r') hold on

plot(x0,y1,'g')

注:画出的图形为n =10的图形

得到图形如下:

牛顿K次插值多项式

一、实验目的:

1、掌握牛顿插值法的基本思路和步骤。 2、 培养编程与上机调试能力。

二、牛顿插值法基本思路与计算步骤:

给定插值点序列(xi,f(xi)),i0,1,,n,。构造牛顿插值多项式Nn(u)。输入要计算的函数点x,并计算Nn(x)的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面Nn(x)的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。

为 的 一阶均差。

均差表:

的 k 阶均差。

1. 输入n值及(i2. 对给定的x,由

x,f(xi)),i0,1,,n,

;要计算的函数点x。

Nn(x)f(x0)(xx0)fx0,x1(xx0)(xx1)fx0,x1,x2(xx0)(xx1)(xxn1)fx0,x1,xn

计算

Nn(x)

的值。

3.输出n。 程序清单:

function[c, d]=newpoly(x, y) %牛顿插值的MATLAB实现

%这里 x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。 %c为所求的牛顿插值多项式的系数构成的向量。 n=length(x);%取x的个数。

d=zeros(n, n);%构造nXn的空数组。 d(: , 1)=y'; for j=2 : n for k=j : n

d(k, j)=(d(k, j-1) - d(k-1, j-1)) / (x(k)-x(k-j+1)); end end

c =d(n, n);

for k=(n-1) : - 1 : 1

c =conv(c, poly(x(k)));% conv求积,poly(x)将该多项式的系数赋给向量。 m=length(c);

c(m)=c(m)+d(k, k); end

五、测试数据与结果:

测试数据:(第三章习题第三题第2题)

01234Y0=-0.916291, y1=-0.693147, y2=-0.510826, y3=-0.357765, y4=-0.223144

N(x

)

建立一个主程序np.m clc clear

newpoly([0.4,0.5,0.6,0.7,0.8],[ -0.916291, -0.693147, -0.510826, -0.357765, -0.223144]) 计算结果如下: ans =

-0.3096 2.6083 -5.4861 5.6921 -2.4744 由此看出所求的牛顿多项式为:

P(x)= -0.3096x4+2.6083x3-5.4861x2+5.6921x-2.4744 P(0.53)= -0.6347。

数值分析上机报告

题目:插值法学号:姓名:靳会有

201014924

一、调用MATLAB内带函数插值

1、MATLAB内带插值函数列举如下:

2、取其中的一维数据内插函数()为例,程序如下:

其调用格式为:

yi=interp1(x, y, xi)

yi=interp1(x, y, xi, method)

举例如下:

x=0:10:100

y=[40 44 46 52 65 76 80 82 88 92 110]; xi=0:1:100

yi=interp1(x,y,xi,'spline') 3、其他内带函数调用格式为: Interpft函数:

y=interpft(x,n) y=interpft(x,n,dim) interp2函数:

ZI=interp2(X, Y, Z, XI, YI), ZI=imerp2(Z, ntimes)

ZI=interp2(Z, XI, YI) ,ZI=interp2(X, Y, Z, XI, YI, method) interp3函数:

VI=interp3(X,Y,Z,V,XI,YI,ZI) VI=interp3(V, ntimes) VI=interp3(V,XI,YI,ZI) VI=interp3(…, method) Interpn函数:

VI=interpn(X1, X2, X3, …, V, Y1, Y2, Y3, …) VI=interpn(V, ntimes)

VI=interpn(V, Yl, Y2, Y3, …) VI=interpn(…, method) Spline函数:

yi=spline(x,y,xi) pp=spline(x,y) meshgrid函数:

[X,Y]=meshgrid(x,y) [X,Y]=meshgrid(x)

[X,Y,Z]=meshgrid(x,y,z) Ndgrid函数:

[X1, X2, X3, …]=ndgrid(x1, x2, x3, …) [X1, X2, X3, …]=ndgrid(x) Griddata函数:

ZI=griddata(x, y, z, XI, YI)

[XI, YI, ZI]=griddata(x, y, z, xi, yi) […]=griddata(… method) 二、自编函数插值 1、拉格朗日插值法: 建立M 文件:

function f = Language(x,y,x0) syms t l;

if(length(x) == length(y)) n = length(x); else

disp('x和y的维数不相等!'); return; %检错

end h=sym(0); for (i=1:n) l=sym(y(i)); for(j=1:i-1)

l=l*(t-x(j))/(x(i)-x(j)); end; for(j=i+1:n)

l=l*(t-x(j))/(x(i)-x(j)); end; h=h+l; end simplify(h); if(nargin == 3)

f = subs (h,'t',x0); %计算插值点的函数值 else

f=collect(h);

f = vpa(f,6); %将插值多项式的系数化成6位精度的小数 end

在MATLAB中输入:

x=[18 31 66 68 70 72 70;] y=[23 33 52 51 43 40 46]; f=Language(x,y) plot(x,y)

结果为:

f =Inf + (-t)*Inf - 54329.8*t^2 + 1503.75*t^3 - 22.2065*t^4 + 0.16789*t^5 - 0.000512106*t^6

图形如下:

MATLAB实现拉格朗日插值

建立如下拉格朗日插值函数:

function y=lagrange(x0,y0,x); n=length(x0); m=length(x); for i=1:m z=x(i); s=0.0; for k=1:n p=1.0; for j=1:n if j~=k

p=p*(z-x0(j))/(x0(k)-x0(j)); end end

s=p*y0(k)+s; end

y(i)=s; end

画图程序如下: x=[-5:1:5]; y=1./(1+x.^2); x0=[-5:0.001:5]; y0=lagrange(x,y,x0); y1=1./(1+x0.^2); plot(x0,y0,'r') hold on

plot(x0,y1,'g')

注:画出的图形为n =10的图形

得到图形如下:

牛顿K次插值多项式

一、实验目的:

1、掌握牛顿插值法的基本思路和步骤。 2、 培养编程与上机调试能力。

二、牛顿插值法基本思路与计算步骤:

给定插值点序列(xi,f(xi)),i0,1,,n,。构造牛顿插值多项式Nn(u)。输入要计算的函数点x,并计算Nn(x)的值,利用牛顿插值公式,当增加一个节点时,只需在后面多计算一项,而前面的计算仍有用;另一方面Nn(x)的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。

为 的 一阶均差。

均差表:

的 k 阶均差。

1. 输入n值及(i2. 对给定的x,由

x,f(xi)),i0,1,,n,

;要计算的函数点x。

Nn(x)f(x0)(xx0)fx0,x1(xx0)(xx1)fx0,x1,x2(xx0)(xx1)(xxn1)fx0,x1,xn

计算

Nn(x)

的值。

3.输出n。 程序清单:

function[c, d]=newpoly(x, y) %牛顿插值的MATLAB实现

%这里 x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。 %c为所求的牛顿插值多项式的系数构成的向量。 n=length(x);%取x的个数。

d=zeros(n, n);%构造nXn的空数组。 d(: , 1)=y'; for j=2 : n for k=j : n

d(k, j)=(d(k, j-1) - d(k-1, j-1)) / (x(k)-x(k-j+1)); end end

c =d(n, n);

for k=(n-1) : - 1 : 1

c =conv(c, poly(x(k)));% conv求积,poly(x)将该多项式的系数赋给向量。 m=length(c);

c(m)=c(m)+d(k, k); end

五、测试数据与结果:

测试数据:(第三章习题第三题第2题)

01234Y0=-0.916291, y1=-0.693147, y2=-0.510826, y3=-0.357765, y4=-0.223144

N(x

)

建立一个主程序np.m clc clear

newpoly([0.4,0.5,0.6,0.7,0.8],[ -0.916291, -0.693147, -0.510826, -0.357765, -0.223144]) 计算结果如下: ans =

-0.3096 2.6083 -5.4861 5.6921 -2.4744 由此看出所求的牛顿多项式为:

P(x)= -0.3096x4+2.6083x3-5.4861x2+5.6921x-2.4744 P(0.53)= -0.6347。


相关文章

  • matlab实现lagrange插值和分段线性插值
  • 数值分析作业 姓名:虞驰程 题目: 函数:f x =1+x2在[-5,5]上,取n=10,对其进行分段线性插值和拉格朗日插值,在Matlab 中实现且绘图. Matlab 实现: 首先定义函数f ,在Matlab 中用function.m ...查看


  • 拉格朗日插值法matlab
  • 实验题目 拉格朗日插值法 一.实验目的及要求 利用Matlab学习拉格朗日插值法 二.研究.解答以下问题 问题: 1.给出节点f(3.15)37.03,f(1.00)7.24,f(0.01)1.05,f(1.02)2.03,f( ...查看


  • 线性拟合法
  • 摘 要 摘 要 插值法和曲线拟合是两种来源于实际,同时又广泛应用于实际的重要的数值 计算方法.随着计算机技术的不断发展以及人类计算机水平的逐步提高,他们在国民经济和科学研究中占据了越来越重要的地位.插值法与曲线拟合结合计算机技术例如MATL ...查看


  • 数值分析上机作业1
  • 数值计算方法上机题目1 1.实验1. 病态问题 1.实验1. 病态问题 实验目的: 算法有"优"与"劣"之分,问题也有"好"和"坏"之别.所谓坏问题就是问题本身 ...查看


  • 数值分析实验(2)
  • 实验二 插值法 P50 专业班级:信计131班 姓名:段雨博 学号:2013014907 一.实验目的 1.熟悉MATLAB 编程: 2.学习插值方法及程序设计算法. 二.实验题目 试用4次牛顿插值多项式P 4(x )及三次样条函数S (x ...查看


  • 数值分析作业思考题
  • 数值分析思考题1 1.讨论绝对误差(限).相对误差(限)与有效数字之间的关系. 2.相对误差在什么情况下可以用下式代替? e *x *-x e =*= x x * *r 3.查阅何谓问题的"病态性",并区分与" ...查看


  • 数字滤波器毕业论文
  • 摘 要 本文介绍了数字滤波器.IIR 数字滤波器的设计和内插技术及用MA TLAB 工具箱进行IIR 数字滤波器的设计和内插程序的实现.本文介绍了IIR 数字滤波器的三种设计方法,即脉冲响应不变法,双线性变换法和一种IIR 数字滤波器的优化 ...查看


  • 数值分析学习心得体会
  • 数值分析学习感想 一个学期的数值分析,在老师的带领下,让我对这门课程有了深刻的理解和感悟.这门 课程是一个十分重视算法和原理的学科,同时它能够将人的思维引入数学思考的模式,在处 理问题的时候,可以合理适当的提出方案和假设.他的内容贴近实际, ...查看


  • 计算方法拉格朗日插值
  • 第二章 插值法 知识点:拉格朗日插值法,牛顿插值法,误差,龙格现象,分段插值. 1.背景 实践活动中,表现事务变化的信息往往只是一些离散点值,例如 每个6小时记录一次温度,以此反映一天的气温变化状况,如下表图 温度(.C) 34 32 30 ...查看


热门内容