matlab实现拉格朗日插值,多项式插值,邻近插值,线性插值 程序
matlab拉格朗日插值多项式例题

文章主题:探索MATLAB中的拉格朗日插值多项式在现代科学与工程领域中,数值分析和插值方法是相当重要的研究方向之一。
它们在数据处理、图像处理、信号处理等领域都有着广泛的应用。
而MATLAB作为一个功能强大的数值计算软件,自然也包括了丰富的插值方法。
本文将重点探讨MATLAB中的拉格朗日插值多项式,通过具体例题来展示其应用与解决问题的能力。
一、拉格朗日插值多项式概述拉格朗日插值多项式是一种基本的插值方法,它的基本思想是在给定数据点的情况下,通过构造一个满足通过所有数据点的多项式来逼近实际函数。
具体而言,对于给定的n+1个不同的数据点(x0, y0), (x1,y1), …, (xn, yn),拉格朗日插值多项式可以表示为\[L(x) = \sum_{i=0}^{n} y_i l_i(x)\]其中,li(x)为拉格朗日基函数,它的表达式为\[l_i(x) = \prod_{j=0, j\neq i}^{n} \frac{x-x_j}{x_i-x_j}\]根据拉格朗日插值多项式的构造方式,我们可以看到它通过n+1个数据点构建了一个n次多项式来逼近实际函数,从而实现了插值的目的。
二、MATLAB中的拉格朗日插值多项式函数在MATLAB中,可以利用“lagrange”函数来实现拉格朗日插值多项式的计算。
对于给定的数据点和函数值,我们可以使用下面的MATLAB代码来实现拉格朗日插值多项式的计算:```matlabx = [1, 2, 3, 4, 5];y = [1, 4, 9, 16, 25];xi = 2.5;yi = lagrange(x, y, xi);disp(yi);```在上面的例子中,我们给定了数据点(1, 1), (2, 4), (3, 9), (4, 16), (5, 25),然后利用“lagrange”函数计算了在xi=2.5处的插值结果yi。
通过这样简单的几行代码,就可以实现拉格朗日插值多项式的计算与应用。
例题matlab拉格朗日插值

例题matlab拉格朗日插值
拉格朗日插值是一种常用的数值插值方法,可以用于近似给定数据点的函数。
在MATLAB中,可以使用interp1函数来实现拉格朗日插值。
以下是一个使用拉格朗日插值的例子:
假设有一组数据点,x为自变量,y为因变量,如下:
x = [1, 3, 4, 6];
y = [4, 2, 5, 1];
要在x=2和x=5之间进行插值,可以使用interp1函数来进行插值计算。
代码如下:
x_interp = [2, 5]; % 需要插值的x值
y_interp = interp1(x, y, x_interp, 'linear', 'extrap'); % 使用拉格朗日插值进行插值计算,'linear'表示线性插值方法,'extrap'表示在区间外进行外插值
运行上述代码后,可以得到插值的结果y_interp,即在x=2和x=5处的插值结果。
注意,interp1函数还有其他插值方法可选,如二次插值、三次插值等,可以根据具体的需求进行选择。
希望对你有帮助!。
用matlab编写拉格朗日插值算法的程序

用matlab编写拉格朗日插值算法的程序10[ 标签:matlab,插值算法,程序 ]用matlab编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,在整个插值区间上采用拉格朗日插值法计算f(0.6),写出程序源代码,输出计算结果x -2.15 -1.00 0.01 1.02 2.03 3.25y 17.03 7.24 1.05 2.03 17.06 23.05匿名回答:1 人气:6 解决时间:2011-05-24 19:58满意答案好评率:83%做了一个测试,希望有所帮助。
代码:% 用matlab编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,% 在整个插值区间上采用拉格朗日插值法计算f(0.6),写出程序源代码,输出计算结果% x -2.15 -1.00 0.01 1.02 2.03 3.25% y 17.03 7.24 1.05 2.03 17.06 23.05function main()clc;x = [-2.15 -1.00 0.01 1.02 2.03 3.25]; y = [17.03 7.24 1.05 2.03 17.06 23.05 ]; x0 = 0.6;f = Language(x,y,x0)function f = Language(x,y,x0)%求已知数据点的拉格朗日插值多项式%已知数据点的x坐标向量: x%已知数据点的y坐标向量: y%插值点的x坐标: x0%求得的拉格朗日插值多项式或在x0处的插值: f syms t l;if(length(x) == length(y))n = length(x);elsedisp('x和y的维数不相等!');return; %检错endh=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;endsimplify(h);if(nargin == 3)f = subs (h,'t',x0); %计算插值点的函数值elsef=collect(h);f = vpa(f,6); %将插值多项式的系数化成6位精度的小数end结果:f =0.0201>>如何用MATLAB编写的拉格朗日插值算法的程序、二阶龙格-库塔方法的程序和SOR迭代法的程序,要能运行的∮初夏戀雨¢回答:2 人气:29 解决时间:2009-12-08 19:04满意答案好评率:100%拉格朗日function y=lagrange(x0,y0,x)n=length(x0);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:np=1.0;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;endSOR迭代法的Matlab程序function [x]=SOR_iterative(A,b)% 用SOR迭代求解线性方程组,矩阵A是方阵x0=zeros(1,length(b)); % 赋初值tol=10^(-2); % 给定误差界N=1000; % 给定最大迭代次数[n,n]=size(A); % 确定矩阵A的阶w=1; % 给定松弛因子k=1;% 迭代过程while k<=Nx(1)=(b(1)-A(1,2:n)*x0(2:n)')/A(1,1);for i=2:nx(i)=(1-w)*x0(i)+w*(b(i)-A(i,1:i-1)*x(1:i-1)'-A(i,i+1:n)*x0(i+1:n)')/A(i,i); endif max(abs(x-x0))<=tolfid = fopen('SOR_iter_result.txt', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n'); fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'x的值\n\n');fprintf(fid, '%12.8f \n', x);break;endk=k+1;x0=x;endif k==N+1fid = fopen('SOR_iter_result.txt', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n'); fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'超过最大迭代次数,求解失败!');fclose(fid);endMatlab中龙格-库塔(Runge-Kutta)方法原理及实现龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。
用MATLAB实现拉格朗日插值和分段线性插值.

用MATLAB实现拉格朗日插值和分段线性插值1、实验内容:用MATLAB实现拉格朗日插值和分段线性插值。
2、实验目的:1学会使用MATLAB软件;2会使用MATLAB软件进行拉格朗日插值算法和分段线性差值算法;3、实验原理:利用拉格朗日插值方法进行多项式插值,并将图形显式出来。
4、实验步骤及运行结果(1实现lagrange插值1定义函数:f = 1/(x^2+1 将其保存在 f.m 文件中,具体程序如下:function y = f1(xy = 1./(x.^2+1;2定义拉格朗日插值函数:将其保存在lagrange.m 文件中,具体实现程序编程如下:function y = lagrange(x0,y0,xm = length(x; /区间长度/n = length(x0;for i = 1:nl(i = 1;endfor i = 1:mfor j = 1:nfor k = 1:nif j == kcontinue;endl(j = ( x(i -x0(k/( x0(j - x0(k *l(j;endendendy = 0;for i = 1:ny = y0(i * l(i + y;end3建立测试程序,保存在text.m文件中,实现画图:x=-5:0.001:5;y=(1+x.^2.^-1;p=polyfit(x,y,n;py=vpa(poly2sym(p,10plot_x=-5:0.001:5;f1=polyval(p,plot_x;figureplo t(x,y,‘r',plot_x,f1输入n=6,出现下面的图形:通过上图可以看到当n=6是没有很好的模拟。
于是重新运行text.M并选择n=11由此可见n=11时的图像是可以很好的实现模拟(2分段线性插值:建立div_linear.m文件。
具体编程如下/*分段线性插值函数:div_linear.m 文件*/ function y = div_linear(x0,y0,x,n%for j = 1:length(xfor i = 1:n-1if (x >= x0(i && (x <= x0(i+1y = (x - x0(i+1/(x0(i - x0(i+1*y0(i + ( x - x0(i/(x0(i+1 - x0(i*y0(i+1;elsecontinue;endend%end测试程序(text2.m:输入n =:’;n = input(‘x0 = linspace( -5,5,n;for x = -5:0.01:5y = div_linear(x0,f(x0,x,n;hold on;plot(x,y,'r';plot(x,f(x,'b';end2运行测试程序,这是会出现:输入n=:2输入n=6,并按Enter键,出现:4关掉图形界面后,重新运行程序,输入n=11,并按enter键后出现:5再次关掉图形界面,输入n=100,并按enter键,出现:此时。
用MATLAB实现拉格朗日插值和分段线性插值培训讲学

用M A T L A B实现拉格朗日插值和分段线性插值用MATLAB实现拉格朗日插值和分段线性插值1、实验内容:用MATLAB实现拉格朗日插值和分段线性插值。
2、实验目的:1)学会使用MATLAB软件;2)会使用MATLAB软件进行拉格朗日插值算法和分段线性差值算法;3、实验原理:利用拉格朗日插值方法进行多项式插值,并将图形显式出来。
4、实验步骤及运行结果(1)实现lagrange插值1)定义函数: f = 1/(x^2+1) 将其保存在f.m 文件中,具体程序如下:function y = f1(x)y = 1./(x.^2+1);2)定义拉格朗日插值函数:将其保存在lagrange.m 文件中,具体实现程序编程如下:function y = lagrange(x0,y0,x)m = length(x); /区间长度/n = length(x0);for i = 1:nl(i) = 1;endfor i = 1:mfor j = 1:nfor k = 1:nif j == kcontinue;endl(j) = ( x(i) -x0(k))/( x0(j) - x0(k) )*l(j);endendendy = 0;for i = 1:ny = y0(i) * l(i) + y;end3)建立测试程序,保存在text.m文件中,实现画图:x=-5:0.001:5;y=(1+x.^2).^-1;p=polyfit(x,y,n);py=vpa(poly2sym(p),10)plot_x=-5:0.001:5;f1=polyval(p,plot_x);figureplot(x,y,‘r',plot_x,f1)输入n=6,出现下面的图形:通过上图可以看到当n=6是没有很好的模拟。
于是重新运行text.M并选择n=11由此可见n=11时的图像是可以很好的实现模拟(2)分段线性插值:建立div_linear.m文件。
拉格朗日插值、牛顿插值的matlab代码

实验五多项式插值逼近信息与计算科学金融崔振威201002034031一、实验目的:拉格朗日插值和牛顿插值的数值实现二、实验内容:p171.1、p178.1、龙格现象数值实现三、实验要求:1、根据所给题目构造相应的插值多项式,2、编程实现两类插值多项式的计算3、试分析多项式插值造成龙格现象的原因主程序1、拉格朗日function [c,l]=lagran(x,y)%c为多项式函数输出的系数%l为矩阵的系数多项式%x为横坐标上的坐标向量%y为纵坐标上的坐标向量w=length(x);n=w-1;l=zeros(w,w);for k=1:n+1v=1;for j=1:n+1if k~=jv=conv(v,poly(x(j)))/(x(k)-x(j)) %对多项式做卷积运算endendl(k,:)=v;endc=y*l;牛顿插值多项式主程序function [p2,z]=newTon(x,y,t)%输入参数中x,y为元素个数相等的向量%t为插入的定点%p2为所求得的牛顿插值多项式%z为利用多项式所得的t的函数值。
n=length(x);chaS(1)=y(1);for i=2:nx1=x;y1=y;x1(i+1:n)=[];y1(i+1:n)=[];n1=length(x1);s1=0;for j=1:n1t1=1;for k=1:n1if k==j %如果相等则跳出循环continue;elset1=t1*(x1(j)-x1(k));endends1=s1+y1(j)/t1;endchaS(i)=s1;endb(1,:)=[zeros(1,n-1) chaS(1)];cl=cell(1,n-1); %cell定义了一个矩阵for i=2:nu1=1;for j=1:i-1u1=conv(u1,[1 -x(j)]); %conv()用于多项式乘法、矩阵乘法cl{i-1}=u1;endcl{i-1}=chaS(i)*cl{i-1};b(i,:)=[zeros(1,n-i),cl{i-1}];endp2=b(1,:);for j=2:np2=p2+b(j,:);endif length(t)==1rm=0;for i=1:nrm=rm+p2(i)*t^(n-i);endz=rm;elsek1=length(t);rm=zeros(1,k1);for j=1:k1for i=1:nrm(j)=rm(j)+p2(i)*t(j)^(n-i);endz=rm;endendplot(t,z,'y',x,y,'*r') %输出牛顿插值多项式的函数图p171.1(a)、f(x)=e x解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[exp(0) exp(0.2) exp(0.4) exp(0.6) exp(0.8) exp(1)]y =1.0000 1.2214 1.4918 1.82212.2255 2.7183>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.0139 0.0349 0.1704 0.4991 1.0001 1.0000l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.0139 a1=0.0349 a2=0.1704 a3=0.4991 a4=1.0001 a5=1.0000(b)、f(x)=sin(x)解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[sin(0) sin(0.2) sin(0.4) sin(0.6) sin(0.8) sin(1)];>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.0073 0.0016 -0.1676 0.0002 1.0000 0l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.0073 a1=0.0016 a2=-0.1676 a3=0.0002 a4=1.0000 a5=0(c)、f(x)=(x+1)x+1解:在matlab窗口中输入:>> x=[0 0.2 0.4 0.6 0.8 1];>> y=[1 1.2^1.2 1.4^1.4 1.6^1.6 1.8^1.8 2^2];>> [c,l]=lagran(x,y)可以得出输出结果为:c =0.3945 -0.0717 0.7304 0.9415 1.0052 1.0000l =-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000130.2083 -364.5833 369.7917 -160.4167 25.0000 0-260.4167 677.0833 -614.5833 222.9167 -25.0000 0260.4167 -625.0000 510.4167 -162.5000 16.6667 0-130.2083 286.4583 -213.5417 63.5417 -6.2500 026.0417 -52.0833 36.4583 -10.4167 1.0000 0由输出结果可以的出:P(x)的系数分别为:a0=0.3945 a1=-0.0717 a2=0.7304 a3=0.9415 a4=1.0052 a5=1.0000P178.12、a0=5 a1=-2 a2=0.5 a3=-0.1 a4=0.003x0=0 x1=1 x2=2 x3=3 c=2.5解:在matlab窗口中输入:>> x=[5 -2 0.5 -0.1];>> y=[0 1 2 3];>> t=0:0.1:2.5;>> [u,v]=newTon(x,y,t)可得出输出结果:u =0.1896 -0.7843 -1.3928 2.8688v =2.8688 2.7218 2.5603 2.3855 2.1983 2.0000 1.7917 1.5745 1.3497 1.1182 0.8813 0.6401 0.3957 0.1493 -0.0980 -0.3451 -0.5908 -0.8340 -1.0735 -1.3082 -1.5370 -1.7588 -1.9723 -2.1765 -2.3702 -2.5523由此可以求出牛顿多项式为:f(x)=0.1896x^3--0.7843^x2--1.3928x+2.8688输出的图为:结果分析:利用牛顿插值多项式的函数,通过调用函数可以求得牛顿多项式与给定的点的值,并通过matlab做出函数图像。
Matlab插值方法学习Hermite,lagrange,Newton

大家都知道插值在数学建模中很重要,现在介绍几种常用插值下面介绍几种基本的、常用的插值:拉格朗日多项式插值、牛顿插值、分段线性插值、Hermite插值和三次样条插值。
1.拉格朗日多项式插值拉格朗日插值就是给定n个数,让你用不超过n-1次的多项式你逼近它,当然这n个点要能满足多项式。
这是一种最基本的思想,计算很简单,先计算n个基函数,基函数可以自己上网搜一下,因为这里打出公式有点麻烦。
然后就是把每个点的y值乘以他的基函数,把这n个式子相加,最后化简就ok了。
下面我把代码写出来,我这些代码全是自己写的,注释比较详细,这里只以lagrange为例,其余都放在附件里了。
%定义myLagrange函数,参数为向量x,y,由用户调用该函数时输入function L=myLagrange (x,y)%n 插值结点的个数n=length(x);%L myLagrange函数计算的多项式系数行列式L=zeros(1,n);%%使用双重for循环,第一个for循环是fori=1:n%aa=1;%ww=1;%for循环for j=1:n%如果i不等于jif j~=i%累加法计算aa=a*(x(i)-x(j));%用向量乘法函数conv计算ww=conv(w,[1,-x(j)]);%if语句结束符end%第二个for循环结束符end%递归法计算L,其中y(i)/a*w表示第i个元素L=y(i)/a*w+L;%第一个for结束符end没错,就这么几句代码,所以很简单的。
2.牛顿插值牛顿插值其实是为了解决拉格朗日插值不能增加新的点来说的。
拉格朗日插值只能接受给定的那么多点,了然后插值。
如果你想再加一个点,它会重新开始计算,这个很费时间和内存。
因此牛顿插值就诞生了。
了解牛顿插值前要学习下差商和差分两个简单的概念。
Newton 插值的优点是:每增加一个节点,插值多项式只增加一项,即因而便于递推运算。
而且Newton 插值的计算量小于Lagrange 插值。
MATLAB实现拉格朗日插值

数值分析上机报告题目:插值法学号:4姓名:靳会有一、调用MATLAB内带函数插值1、MATLAB内带插值函数列举如下:2、取其中的一维数据内插函数(interp1)为例,程序如下:其调用格式为:yi=interp1(x, y, xi)yi=interp1(x, y, xi, method)举例如下:x=0:10:100y=[40 44 46 52 65 76 80 82 88 92 110];xi=0:1:100yi=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);elsedisp('x和y的维数不相等!');return; %检错endh=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;endsimplify(h);if(nargin == 3)f = subs (h,'t',x0); %计算插值点的函数值elsef=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 - *t^2 + *t^3 - *t^4 + *t^5 - *t^6图形如下:MATLAB实现拉格朗日插值建立如下拉格朗日插值函数:function y=lagrange(x0,y0,x);n=length(x0);m=length(x);for i=1:mz=x(i);s=;for k=1:np=;for j=1:nif j~=kp=p*(z-x0(j))/(x0(k)-x0(j));endends=p*y0(k)+s;endy(i)=s;end画图程序如下:x=[-5:1:5];y=1./(1+x.^2);x0=[-5::5];y0=lagrange(x,y,x0); y1=1./(1+x0.^2); plot(x0,y0,'r') hold onplot(x0,y1,'g')注:画出的图形为n =10的图形得到图形如下:牛顿K 次插值多项式一、实验目的:1、掌握牛顿插值法的基本思路和步骤。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
题 7:一维函数插值算法
课题内容:
课题 7:一维函数插值算法
课题内容:对函数||
e-
y x
=,取[-5,5]之间步长为 1 的值
*
10
作为粗值,以步长
0.1 作为细值,编写程序实现插值算法:最邻近插值算法,线性插
值算法和三次多项式函数插值算法,并对比插值效果。
课题要求:
1、设计良好的人机交互 GUI 界面。
2、自己编写实现插值算法。
3、在同一个图形窗口显示对比最后的插值效果。
附录
一、界面设计
二、图像结果
三、程序设计
1、线性插值
function pushbutton1_Callback(hObject, eventdata, handles) x=-5:5;
y=10*exp(-abs(x));
f1=[];
for x1=-5:0.1:5
a=(x1-floor(x1));%请读者认真逐一带入推导
if x1==floor(x1)
f1=[f1,y(floor(x1)+6)];
else
f1=[f1,y(floor(x1)+6)+a*(y(floor(x1)+7)-y(floor(x1)+6))]; end
end
m=-5:0.1:5
plot(m,f1,'-r',x,y,'+')
axis([-5 5 0 10])
legend('liner插值','原函数');
xlabel('X');
ylabel('Y');
title('liner插值与原函数的对比');
grid
2、多项式插值
x0=-5:1:-3;
y0=10*exp(-abs(x0));
x=-5:0.1:-3;
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
axis([-5 5 0 10])
plot(x,y,'m',x0,y0,'+')
legend('三次多项式插值','原函数');
xlabel('X');
ylabel('Y');
title('三次多项式插值与原函数的对比');
grid
hold on
x0=-3:1:-1;
y0=10*exp(-abs(x0));
x=-3:0.1:-1;
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
axis([-5 5 0 10])
plot(x,y,'m',x0,y0,'+')
legend('三次多项式插值','原函数');
xlabel('X');
ylabel('Y');
title('三次多项式插值与原函数的对比');
grid
hold on
x0=-1:1:1;
y0=10*exp(-abs(x0));
x=-1:0.1:1;
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
axis([-5 5 0 10])
plot(x,y,'m',x0,y0,'+')
legend('三次多项式插值','原函数');
xlabel('X');
ylabel('Y');
title('三次多项式插值与原函数的对比');
grid
hold on
x0=1:1:3;
y0=10*exp(-abs(x0));
x=1:0.1:3;
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
axis([-5 5 0 10])
plot(x,y,'m',x0,y0,'+')
legend('三次多项式插值','原函数');
xlabel('X');
ylabel('Y');
title('三次多项式插值与原函数的对比');
grid
hold on
x0=3:1:5;
y0=10*exp(-abs(x0));
x=3:0.1:5;
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
axis([-5 5 0 10])
plot(x,y,'m',x0,y0,'+')
legend('三次多项式插值','原函数');
xlabel('X');
ylabel('Y');
title('三次多项式插值与原函数的对比');
grid
3、最邻近插值
function pushbutton3_Callback(hObject, eventdata, handles) x=-5:5;
y=10*exp(-abs(x));
f2=[];
for x1=-5:0.1:5
if abs(x1-floor(x1))<0.5
f2=[f2,y(floor(x1)+6)];
else
f2=[f2,y(floor(x1)+7)];
end
end
m=[-5:0.1:5];
f4=10*exp(-abs(m));
plot(m,f2,'-r',x,y,'+')
axis([-5 5 0 10])
legend('nearest插值','原函数');
xlabel('X');
ylabel('Y');
title('nearest插值与原函数的对比');
grid。