均差牛顿插值MATLAB,M文件
牛顿插值MATLAB算法

MATLAB程序设计期中作业——编程实现牛顿插值成员:刘川(P091712797)签名_____汤意(P091712817)签名_____王功贺(P091712799)签名_____班级:2009信息与计算科学学院:数学与计算机科学学院日期:2012年05月02日牛顿插值的算法描述及程序实现一:问题说明在我们的实际应用中,通常需要解决这样的问题,通过一些已知的点及其对应的值,去估算另外一些点的值,这些数据之间近似服从一定的规律,于是,这就引入了插值法的思想。
插值法是利用函数f (x)在某区间中若干点的函数值,作出适当的特定函数,在这些点上取已知值,在区间的其他点上用这特定函数的值作为函数f (x)的近似值。
如果这特定函数是多项式,就称它为插值多项式。
利用插值基函数很容易得到拉格朗日插值多项式,公式结构紧凑,在理论分析中甚为方便,但当插值节点增减时全部插值基函数均要随之变化,整个公式也将发生变化,这在实际计算中是很不方便的,为了克服这一缺点,提出了牛顿插值。
二:算法分析newton 插值多项式的表达式如下:010011()()()()()n n n N x c c x x c x x x x x x -=+-+⋅⋅⋅+--⋅⋅⋅-其中每一项的系数c i 的表达式如下:12011010[,,,][,,,][,,,]i i i i i f x x x f x x x c f x x x x x -⋅⋅⋅-⋅⋅⋅=⋅⋅⋅=- 即为f (x)在点01,,,i x x x ⋅⋅⋅处的i 阶差商,([]()i i f x f x =,1,2,,i n =),由差商01[,,,]i f x x x ⋅⋅⋅的性质可知: ()01001[,,,]()i i i j j k j k k j f x x x f x x x ==≠⋅⋅⋅=-∑∏ 牛顿插值的程序实现方法:第一步:计算[][][][]001012012,,,,,,,n f x f x x f x x x f x x x x 、、、、。
牛顿插值法matlab

牛顿插值法matlab
牛顿插值法是一种基于牛顿多项式的插值方法,它要求给定的插值点必须满足某种差分公式,且牛顿插值法的误差收敛速度非常快。
牛顿插值法的Matlab实现分为以下几步:
1.给定插值点和插值函数的值。
2.确定多项式的阶数n。
3.根据牛顿插值法,构造一个n×n矩阵A,其中Aij等于第i个点处对x的第j次导数。
4.构造一个n×1矩阵B,其中Bi等于第i个点处的函数值。
5.通过消元法求解矩阵方程组Ax=B,从而求出牛顿插值法的系数。
6.应用求出的系数,构造出牛顿插值多项式。
7.根据牛顿插值多项式进行插值计算。
matlab实现newton差值和hermite差值

(一)实验目的掌握并能够利用newton差值和hermite差值方法解决问题。
(二)问题描述问题四插值。
上述函数的导数为采用三种方法中最好的方法计算这一积分(1)利用数值积分的方法给出在(可以直接计算精确值的,用精确值),用Newton插值方法得到5个椭圆的周长(2)利用数值积分的方法给出在(可以直接计算精确值的,用精确值),用Hermite插值方法得到5个椭圆的周长(3) 选做题:利用以及导数更多的值来进行插值,插值误差会有什么变化?(4)选做题:采用其它的插值方法改进插值的效果。
(三)算法介绍a确定,对于给定的b值都对应着一个椭圆,在本问题中用newton插值法和hermite得到的多项式代替椭圆周长公式中的进行积分,首先画出图像,选择初始点。
图像的实现代码见picture1.m。
newton插值法迭代公式:;Hermite法迭代公式:。
(四)程序建立picture.m文件画出和其导数图像。
(注:此图像为b=0.5时)x=0:0.1:2;y=sqrt(1+(0.5^2-1).*cos(x).^2);yyy=.750./(1-.75.*cos(x).^2).^(1/2).*cos(x).*sin(x);plot(x,y,'r');hold on;plot(x,yyy);hold off;legend('sqrt(1+(0.5^2-1).*cos(x).^2)','.750./(1-.75.*cos(x).^2).^(1/2).*cos(x).*sin(x)');所画图像为:我们选取0,0.3,0.6,0.9,1.2,1.5为初始点。
问题四(1)建立newtondedai1.m文件。
function z=newtondedai1(f,n)syms xia=zeros(n,n);x=[0 0.3 0.6 0.9 1.2 1.5];y=feval(f,x);a(:,1)=y;for i=2:nfor j=2:ia(i,j)=(a(i,j-1)-a(i-1,j-1))/(x(1,i)-x(1,i-j+1)); endendt=xi-x(1,1);p=a(1,1);for i=2:np=p+a(i,i)*t;t=t*(xi-x(1,i));endp=collect(vpa(p))问题四(2)建立hermite3.m文件。
matlab(迭代法_牛顿插值)

实验报告内容:一:不动点迭代法解方程二:牛顿插值法的MA TLAB实现完成日期:2012年6月21日星期四数学实验报告一日期:2012-6-21hold on>> fplot(g,[-2,2])>> fplot(f,[-2,2])>> hold off>> grid输出结果如下所示:所以,确定初值为x0=1二:不断迭代算法:第一步:将f(x0)赋值给x1第二步:确定x1-x0的绝对值大小,若小于给定的误差值,则将x1当做方程的解,否则回到第一步编写计算机程序:clearf=inline('0.5*sin(x)+0.4');x0=1;x1=f(x0);k=1;while abs(x1-x0)>=1.0e-6x0=x1;x1=f(x0);k=k+1;fprintf('k=%.0f,x0=%.9f,x1=%.9f\n',k,x0,x1)end显示结果如下:k=2,x0=0.820735492,x1=0.765823700k=3,x0=0.765823700,x1=0.746565483k=4,x0=0.746565483,x1=0.739560873k=5,x0=0.739560873,x1=0.736981783k=6,x0=0.736981783,x1=0.736027993k=7,x0=0.736027993,x1=0.735674699k=8,x0=0.735674699,x1=0.735543758k=9,x0=0.735543758,x1=0.735495216k=10,x0=0.735495216,x1=0.735477220k=11,x0=0.735477220,x1=0.735470548k=12,x0=0.735470548,x1=0.735468074k=13,x0=0.735468074,x1=0.735467157>>。
MATLAB中的插值运算

MATLAB中的插值运算在数学中,有时需要查表,如对数表。
在具体查表时,需要的数据表中可能没有,这时一般可以先找出它相邻的数,再从表中查出其相应结果,然后按一定的关系把这些相邻的数以及它相应的结果加以修正,就可求出要查数的数据结果的近似值,这个修正关系就是一种插值.在实践中,常常需要测量某些数据,但由于客观条件的限制,所测得的数据可能不够细密,满足不了实践的需要,这时便可以通过插值方法对数据进行加密处理。
此外,对于给定的离散数据对,如果要找一个函数来近似描述其对应关系,常常也需要插值。
与插值有关的MATLAB 函数(一)POLY2SYM 函数主要功能:把多项式的系数向量转换为符号多项式.调用格式一:poly2sym (C)调用格式二:f1=poly2sym(C,'V')或f2=poly2sym(C, sym (’V') ),(二) POLYVAL 函数主要功能:估计多项式的值。
调用格式:Y = polyval(P,X)(三)POLY 函数主要功能:把根转换为多项式的系数向量。
调用格式:Y = poly (V )(四) CONV 函数主要功能:计算卷积和多项式的和。
调用格式:C =conv (A, B )(五) DECONV 函数主要功能:计算逆卷积和多项式的除法、商和余式。
调用格式:[Q ,R ] =deconv (B,A)(六) roots(poly (1:n ))命令调用格式:roots(poly (1:n ))(七) det(a*eye(size (A)) — A )命令调用格式:b=det(a *eye (size (A)) - A )grange 插值方法介绍 对给定的n 个插值点12x ,,...n x x 及对应的函数值12,,...,n y y y ,利用n 次Lagrange 插值多项式,则对插值区间内任意x 的函数值y 可通过下式求的:11y()()n n j k k j k j j k x x x y x x ==≠-=-∑∏MATLAB 中没有直接实现拉格朗日算法的函数所以需建立M 文件:function y=lagrange (a,b ,x)y=0;for i=1:length (a)l=1;for j=1:length(b)if j==il=l;elsel=l.*(x-a(j))/(a(i)—a(j));endendy=y+l*b(i);end算例:给出f(x)=ln(x)的数值表,用Lagrange计算ln(0。
Matlab程序Newton插值函数

编写程序构造区间上的以等分结点为插值结点的Newton插值公式,假设结点数为(包括两个端点),给定相应的函数值,插值区间和等分的份数,该程序能快速计算出相应的插值公式。
以,为例计算其对应的插值公式,分别取不同的值并画出原函数的图像以及插值函数的图像,观察当增大时的逼近效果.解:Matlab计算程序为:clearclcf=input('请输入函数表达式:f(x)=','s');%测试公式为:1/(1+25*x^2)a=input('请输入区间左端值a:');%-1b=input('请输入区间右端值b:');%1n=input('请输入区间结点数(包括两个端点)n:');%取不同n值比较for i=1:nx(i)=a+(b-a)/(n-1)*(i-1);y(i,1)=eval(subs(f,'x','x(i)'));endfor j=1:n-1for k=j:n-1temp=y(k+1,j)-y(k,j);y(k+1,j+1)=temp/(x(k+1)-x(k+1-j));endc(j)=y(j,j);c(j+1)=y(j+1,j+1);endp=c(1);q=1;syms Xfor i=2:nq=q*(X-x(i-1));p=p+c(i)*q;endp=simple(p)for i=1:301t(i)=a+(b-a)/300*(i-1);Nn(i)=eval(subs(p,'X','t(i)'));endfor i=1:301h(i)=a+(b-a)/300*(i-1);yy(i)=eval(subs(f,'x','h(i)'));endplot(h,yy,'r')hold onplot(t,Nn,'b')hold ongrid onlegend('ÔʼÇúÏßf(x)','²åÖµÇúÏßN(x)')title('Å£¶Ù²åÖµ') xlabel('x') ylabel('f(x)')当n=5时,Newton插值公式为:p =(1250*X^4)/377 - (3225*X^2)/754 + 1 Matlab绘制的拟合图像为:由上图可见,n取较小值时,拟合误差较大当n=10时,Newton插值公式为:p = (84*X^9 + *X^8 - 112*X^7 - 4*X^6 + 136*X^5 + *X^4 + 44*X^3 - *X^2 + 4*X + 9741593257)/2706126848Matlab绘制的拟合图像为:由上图可见,随着n的增加,曲线拟合情况变好,且曲线两端拟合情况不如中间好。
牛顿插值法matlab程序例题

牛顿插值法是一种常用的数值分析方法,用于构造一个多项式函数,以便在给定的数据点上进行插值。
这个主题在数学和工程领域中有着广泛的应用,特别是在数据拟合和函数逼近方面。
牛顿插值法的核心思想是通过不断地添加新的数据点来构造一个多项式,并利用已知数据点来确定多项式的系数,从而实现对未知数据点的插值预测。
在Matlab中,实现牛顿插值法并不困难,我们可以利用已有的函数和工具来简化计算过程。
下面,我们将通过一个具体的例题来讲解如何使用Matlab编写牛顿插值法的程序,并分析其结果。
我们需要明确牛顿插值法的数学原理。
给定n个互不相同的节点\(x_0, x_1, ... , x_n\),以及在这些节点上的函数值\(f(x_0), f(x_1), ... , f(x_n)\),我们希望构造一个n次插值多项式p(x),满足p(x_i) = f(x_i),i=0,1,...,n。
牛顿插值多项式的一般形式为:\[p(x) = a_0 + a_1(x - x_0) + a_2(x - x_0)(x - x_1) + ... + a_n(x -x_0)(x - x_1)...(x - x_{n-1})\]其中,\[a_i\]表示插值多项式的系数。
通过牛顿插值法的迭代过程,可以逐步求解出这些系数,进而得到插值多项式的表达式。
接下来,我们将以一个具体的例题来演示如何在Matlab中实现牛顿插值法。
假设我们有如下的数据点和函数值:\(x = [1, 2, 3, 4]\)\(f(x) = [1, 4, 9, 16]\)我们希望利用这些数据点来构造一个插值多项式,并在给定的区间上进行插值计算。
在Matlab中,可以通过interp1函数来进行插值计算,该函数支持多种插值方法,包括牛顿插值法。
下面是一个简单的Matlab程序示例:```matlabx = [1, 2, 3, 4];y = [1, 4, 9, 16];xi = 2.5;yi = interp1(x, y, xi, 'spline');disp(['在x=',num2str(xi),'处的插值结果为:',num2str(yi)]);```在这段代码中,我们首先定义了给定的数据点x和对应的函数值y,然后利用interp1函数对x=2.5处的插值结果进行计算。
MATLAB作业拉格朗日三阶样条插值函数牛顿插值

Lagrange插值M函数syms xx0=[0,1,2];y0=[1,2,3];n=length(x0);for i=1:na=1;for j=1:nif j~=ia=expand(a*(x-x0(j)));endendb=1;for k=1:nif k~=ib=b*(x0(i)-x0(k));endendA(i)=expand(a/b);endL=0;for p=1:nL=L+y0(p)*A(p);endL>> LanguageL =x + 1三阶样条插值M函数function m=naspline(x,y,dy0,dyn,xx)n=length(x)-1;h=diff(x);lemda=h(2/n)./(h(1:n-1)+h(2:n));mu=1-lemda;g=3*(lemda.*diff(y(1:n))./h(1:n-1)+mu.*diff(y(2:n+1))./h(2:n)); g(1)=g(1)-lemda(1)*dy0;g(n-1)=g(n-1)-mu(n-1)*dyn;dy=nachase(lemda,2*ones(1:n-1),mu,g);m=[dy0;dy;dyn];if nargin>=5s=zeros(size(xx));for i=1:nif i==1,kk=find(xx<=x(2));elseif i==nkk=find(xx>x(n));elsekk=find(xx>x(i)&xx<=x(i+1));endxbar=(xx(kk)-x(i))/h(i);s(kk)=alpha0(xbar)*y(i)+alpha1(xbar)*y(i+1)+...h(i)*beta0(xbar)*m(i)+h(i)*beta1(xbar)*m(i+1);endm=s;endfunction x=nachase(a,b,c,d)n=length(a);for k=2:nb(k)=b(k)-a(k)/b(k-1)*c(k-1);d(k)=d(k)-a(k)/b(k-1)*d(k-1);endx(n)=d(n)/b(n);for k=n-1:-1:1x(k)=(d(k)-c(k)*x(k+1))/b(k);endx=x(:);function y=alpha0(x)y=2*x.^3-3*x.^2+1;function y=alpha1(x)y=-2*x.^3+3*x.^2;function y=beta0(x)y=x.^3-2*x.^2+x;function y=beta1(x)y=x.^3-x.^2;naspline([-1 0 1],[-1 0 1],0,-1)ans =1.7500-1.0000>> naspline([-1 0 1],[-1 0 1],0,-1,-1:0.25:1)ans =-1.0000 -0.9258 -0.7188 -0.4023 0 0.4492 0.8438 1.06641.0000ans =Columns 1 through 5-1.0000 -0.9258 -0.7188 -0.4023 0 Columns 6 through 90.4492 0.8438 1.0664 1.0000牛顿插值多项式function yi=Newton(x,y,xi)n=length(x);m=length(y);if n~=merror;return;end%计算均差表YY=zeros(n);Y(:,1)=y';for k=1:n-1for i=1:n-kif abs(x(i+k)-x(i))<epserror;return;endY(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));endend%计算牛顿插值公式yi=0;for i=1:nz=1;for k=1:i-1z=z*(xi-x(k));endyi=yi+Y(1,i)*z;endEnd>>format compact>> x=pi*[1/6 1/4 1/3];y=[0.5 0.7071 0.866];xi=2*pi/9;0.550.60.650.70.750.450.50.550.60.650.70.75>> yi=Newton(x,y,xi)yi =0.6434>>fplot(‘sin ’,[pi/6 pi/4 pi/3]);hold on;>>plot(x,y,’o ’xi,0.6434,’rv ’);hold off;牛顿迭代M 函数function x=nanewton(fname,dfname,x0,e,N) if nargin<5,N=500;endif nargin<4,e=1e-4;endx=x0;x0=x+2*e;k=0;while abs(x0-x)>e&k<N,k=k+1;x0=x;x=x0-feval(fname,x0)/feval(dfname,x0); disp(x)endif k==N,warning('已达迭代次数上限');end >> fun=inline('x^3-x-1');dfun=inline('3*x^2-1'); >> nanewton(fun,dfun,1.5,0.5e-3)1.34781.32521.3247ans =1.32470.550.60.650.70.750.450.50.550.60.650.70.75。
matlab牛顿插值法三次样条插值法

(){}21()(11),5,10,20:12521()1,(0,1,2,,)()2,(0,1,2,,)()()235,20:1100(i i i i n n k k k Newton f x x n x f x x i i n f x nx y i n Newton N x S x n x k y f x =-≤≤=+=-+====-+=L L 题目:插值多项式和三次样条插值多项式。
已知对作、计算函数在点处的值;、求插值数据点的插值多项式和三次样条插值多项式;、对计算和相应的函数值),()() (1,2,,99)4:()max ()()max()n k n k n k n k n k n k kkN x S x k E N y N x E S y S x ==-=-L 和;、计算,;解释你所得到的结果。
算法组织:本题在算法上需要解决的问题主要是:求出第二问中的Newton 插值多项式)(x N n 和三次样条插值多项式()n S x 。
如此,则第三、四问则迎刃而解。
计算两种插值多项式的算法如下:一、求Newton 插值多项式)(x N n ,算法组织如下:Newton 插值多项式的表达式如下:)())(()()(110010--⋅⋅⋅--+⋅⋅⋅+-+=n n n x x x x x x c x x c c x N其中每一项的系数c i 的表达式如下:1102110),,,(),,,(),,,(x x x x x f x x x f x x x f c i i i i i -⋅⋅⋅-⋅⋅⋅=⋅⋅⋅=-根据i c 以上公式,计算的步骤如下:⎪⎪⎪⎩⎪⎪⎪⎨⎧⋅⋅⋅+⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅----),,,,(1),,,(),,,,(),(,),,(2)(,),(),(11101111011010n n n n n n n n x x x x f n x x x f x x x f n x x f x x f x f x f x f 、计算、计算、计算、计算二、求三次样条插值多项式)(x S n ,算法组织如下:所谓三次样条插值多项式)(x S n 是一种分段函数,它在节点i x 011()n n a x x x x b -=<<⋅⋅⋅<<=分成的每个小区间1[,]i i x x -上是3次多项式,其在此区间上的表达式如下:22331111111()[()()]()()666[,]1,2,,.i i i i i i i i i i i i i i ii i h x x h x x S x x x M x x M y M y M h h h x x x i n --------=-+-+-+-∈=⋅⋅⋅,, 因此,只要确定了i M 的值,就确定了整个表达式,i M 的计算方法如下: 令:11111111116()6(,,)i i i i i i i i i i i i i ii i i i i i i h h h h h h y y y y d f x x x h h h h μλμ++++--+++⎧===-⎪++⎪⎨--⎪=-=⎪+⎩, 则i M 满足如下n-1个方程:1121,2,,1i i i i i i M M M d i n μλ-+++==⋅⋅⋅-,方程中有n+1个未知量,则令0M 和n M 分别为零,则由上面的方程组可得到(11)i M i n ≤≤-的值,可得到整个区间上的三次样条插值多项式)(x S n 。
newton插值法matlab

newton插值法matlab
Newton插值法是一种用于求解多项式插值的方法,在MATLAB中非常常见。
它基于离散数据点集来构造出一个插值多项式,该多项式将通过这些点并可以用于预测在数据点之间的任何值。
具体步骤如下:
1. 根据给定的数据点集,构造出一个差商表。
2. 计算出插值多项式的系数。
3. 使用计算出的插值多项式来预测在数据点之间的任何值。
在MATLAB中,可以使用polyfit和polyval函数来实现该方法。
具体实现步骤如下:
1. 定义x和y向量,分别表示数据点的x和y坐标。
2. 使用polyfit函数计算插值多项式的系数。
3. 使用polyval函数将插值多项式应用于一系列x值,以预测
其对应的y值。
- 1 -。
matlab实现牛顿差分及等距节点插值公式

题目:探究matlab中牛顿差分及等距节点插值公式的实现在计算数学问题时,插值是一种常见的数值分析方法,它常常用于估计在已知数据点之间的数值。
而牛顿差分及等距节点插值公式,则是其中的一种重要方法。
本文将从简单到复杂,由浅入深地探讨matlab 中牛顿差分及等距节点插值公式的实现方法,以便读者更深入地理解这一主题。
1. 牛顿插值方法牛顿插值是一种使用多项式进行插值的数值方法,利用了拉格朗日插值多项式的一般形式,其在实际应用中具有良好的稳定性和精确度。
在matlab中,我们可以通过编写函数来实现牛顿插值方法,并根据所给定的数据点计算出插值多项式。
2. 差分及等距节点插值公式差分及等距节点插值公式是牛顿插值的一种具体形式,它通过相邻节点的差分来递推计算插值多项式的系数,从而实现对给定数据点的插值。
在matlab中,我们可以编写代码来实现这一方法,通过对数据点的差分计算来得到插值多项式的系数,并最终得到插值结果。
3. matlab中的实现步骤在matlab中,实现牛顿差分及等距节点插值公式主要包括以下几个步骤:3.1 准备数据点:首先需要准备好给定的数据点,这些数据点将作为插值的依据。
3.2 计算差商:利用给定的数据点,我们可以计算出插值多项式的系数,即差商。
这一步骤可以通过递推计算来实现。
3.3 构建插值多项式:根据得到的插值多项式的系数,我们可以构建出完整的插值多项式。
3.4 计算插值结果:我们可以利用构建好的插值多项式来计算任意点的插值结果。
4. 个人观点和理解在我看来,牛顿差分及等距节点插值公式是一种非常实用和有效的插值方法,在实际工程和科学计算中都有着广泛的应用。
在matlab中,通过编写相应的代码,我们可以很方便地实现这一方法,并得到高质量的插值结果。
掌握牛顿插值及其在matlab中的实现方法对我们来说是非常重要的。
总结回顾本文从简到繁,由浅入深地探讨了matlab中牛顿差分及等距节点插值公式的实现方法。
newton插值法matlab

newton插值法matlab
Newton插值法是一种利用基本差分公式构造插值多项式的方法。
在MATLAB中,可以使用polyfit函数进行Newton插值。
具体步骤如下:
1. 构造差商表
首先需要根据所给数据点构造差商表。
差商表是一个二维数组,其中每一行代表对应的插值点的差商,第一列为插值点的函数值,后面的列为基本差分公式中的差商。
2. 构造插值多项式
使用polyfit函数进行插值多项式的构造。
其中,输入参数x为插值点的横坐标,y为插值点的函数值,n为插值点的个数,返回值p为插值多项式的系数。
3. 计算插值结果
根据插值多项式的系数,可以计算任意一点的插值结果。
使用polyval函数进行计算,其中输入参数x为插值点的横坐标,p为插值多项式的系数,返回值为插值结果的纵坐标。
- 1 -。
Newton插值 matlab

1.3 0.9636
1.5 0.9975
1.7 0.9917
主程序: x=[0.7:0.2:1.7]; y=[0.6442 0.7833 0.8912 0.9636 0.9975 0.9917]; xi=0.74, yi=Newton_int(x,y,xi) 运行得 xi =0.7400 yi = 0.6743 四、实验题目 已知 f ( x) ln x, [a, b] [1, 2], 取 h 0.1, xi 1 ih, i 0,1, 计算 ln1.54 及 ln1.98 的近似值。
function yi=Newton_int(x,y,xi) % Newton 插值多项式; % x为向量,全部的插值节点,按行输入; % y为向量,插值节点处的函数值,按行输入; % xi为被插值点向量; % yi为要求的被插值点函数值向量; n=length(x); Y=zeros(n); Y(:,1)=y';%0阶差商 for k=1:n-1 for i=1:n-k Y(i,k+1)=(Y(i+1,k)-Y(i,k))/(x(i+k)-x(i));%k阶差商 end end %Y %输出差商表 % 以下计算Newton插值公式N(xi) yi=0; for i=1:n z=1; for k=1:i-1 z=z.*(xi-x(k)); end yi=yi+Y(1,i)*z; end %n为已知插值节点个数; % 以下计算差商表Y
,10. 用 Newton 插值
实验 10 Newton 插值
一 实验名称:Newton 插值 二 实验目的:学会用 Newton 插值计算函数值。 三 实验内容: 例 1、设函数 f(x)满足 X 0.7 0.9 1.1 Y 0.6642 0.7833 0.8912 利用六点 Newton 插值多项式计算 f(0.74). 解:先建立函数文件
matlab_牛顿插值法_三次样条插值法

(){}21()(11),5,10,20:12521()1,(0,1,2,,)()2,(0,1,2,,)()()235,20:1100(i i ii n n k k k Newton f x x n x f x x i i n f x nxy i n Newton N x S x n x k y f x =-≤≤=+=-+====-+= 题目:插值多项式和三次样条插值多项式。
已知对作、计算函数在点处的值;、求插值数据点的插值多项式和三次样条插值多项式;、对计算和相应的函数值),()() (1,2,,99)4:()max ()()max()n k n k n k n k n k n k kkN x S x k E N y N x E S y S x ==-=- 和;、计算,;解释你所得到的结果。
算法组织:本题在算法上需要解决的问题主要是:求出第二问中的Newton 插值多项式)(x N n 和三次样条插值多项式()n S x 。
如此,则第三、四问则迎刃而解。
计算两种插值多项式的算法如下:一、求Newton 插值多项式)(x N n ,算法组织如下:Newton 插值多项式的表达式如下:)())(()()(110010--⋅⋅⋅--+⋅⋅⋅+-+=n n n x x x x x x c x x c c x N其中每一项的系数c i 的表达式如下:1102110),,,(),,,(),,,(x x x x x f x x x f x x x f c i i i i i -⋅⋅⋅-⋅⋅⋅=⋅⋅⋅=-根据i c 以上公式,计算的步骤如下:⎪⎪⎪⎩⎪⎪⎪⎨⎧⋅⋅⋅+⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅⋅----),,,,(1),,,(),,,,(),(,),,(2)(,),(),(11101111011010n n n n n n n n x x x x f n x x x f x x x f n x x f x x f x f x f x f 、计算、计算、计算、计算 二、求三次样条插值多项式)(x S n ,算法组织如下:所谓三次样条插值多项式)(x S n 是一种分段函数,它在节点i x 011()n n a x x x x b -=<<⋅⋅⋅<<=分成的每个小区间1[,]i i x x -上是3次多项式,其在此区间上的表达式如下:22331111111()[()()]()()666[,]1,2,,.i i i i i i i i i i i i i i i i i h x x h x x S x x x M x x M y M y M h h h x x x i n --------=-+-+-+-∈=⋅⋅⋅,,因此,只要确定了i M 的值,就确定了整个表达式,i M 的计算方法如下: 令:11111111116()6(,,)i i i i i i i i i i i i i ii i i i i i i h h h h h h y y y y d f x x x h h h h μλμ++++--+++⎧===-⎪++⎪⎨--⎪=-=⎪+⎩, 则i M 满足如下n-1个方程:1121,2,,1i i i i i i M M M d i n μλ-+++==⋅⋅⋅-,方程中有n+1个未知量,则令0M 和n M 分别为零,则由上面的方程组可得到(11)i M i n ≤≤-的值,可得到整个区间上的三次样条插值多项式)(x S n 。
拉格朗日差值、牛顿插值以及三次样条插值的matlab实现

拉格朗日差值、牛顿插值以及三次样条插值的matlab实现% Lagrange插值clearclc%-----------------------------n=10; %结点个数lb=-1; %下界ub=1; %上界step=0.01; %作图点步长%-----------------------------% 原始函数图形x0=lb:step:ub;y0=1./(1+25*x0.^2);plot(x0,y0,'r-');hold on%-----------------------------% 插值函数for i=1:n+1xi(i)=lb+(ub-lb)*(i-1)/n;yi(i)=1/(1+25*xi(i)^2);end%------------------------------count=1;for x=lb:step:ubfl=0;%--------------------------%求出pn(xk)for k=1:n+1up=1;dn=1;%----------------------%求出f(xk)for i=1:n+1if k~=iup=up*(x-xi(i));dn=dn*(xi(k)-xi(i));endend%----------------------fl=fl+yi(k)*up/dn;endpn(count)=fl;%--------------------------fi(count)=1/(1+25*x^2);%求原函数的值count=count+1;end%------------------------------% L插值函数图x=lb:step:ub;plot(x,pn,'g--')%------------------------------num=(ub-lb)/step+1;for i=1:nump_f(i)=pn(i)-fi(i);endcenter=fix(num/2);scale=fix(num/10);a=center-scale;b=center+scale;disp ' pn(i)-fi(i) 的值为:'p_f(a:b) %%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%% %%clear allclc%Newton迭代法求解极小值点%===================================== disp '几点说明:'disp '1.程序中的函数采用课本P102例3.3.2。
matlab 拉格朗日插值法和牛顿插值法 -回复

matlab 拉格朗日插值法和牛顿插值法-回复Matlab 拉格朗日插值法和牛顿插值法引言:在数值分析中,插值法是一种通过已知数据点来估计介于这些数据点之间的未知数值的方法。
拉格朗日插值法和牛顿插值法是两种常用的插值方法,都有各自的优点和适用场景。
本文将详细介绍这两种方法的原理和实现方式,以及在Matlab 中如何使用它们来进行插值计算。
一、拉格朗日插值法1. 原理:拉格朗日插值法是使用一个N次的多项式来逼近未知函数。
给定一组数据点(x0, y0), (x1, y1), …, (xi, yi), …, (xn, yn),通过拉格朗日插值法可以得到一个多项式P(x),使得P(xi) = yi。
该多项式表示了数据点间的曲线关系,从而可以通过插值估算未知点的值。
2. 实现步骤:(1)创建一个N次多项式的拉格朗日插值函数;(2)计算每个插值点的权重系数,即拉格朗日插值函数的系数;(3)根据给定的数据点和权重系数,构建多项式;(4)通过多项式计算未知点的值。
3. Matlab 中的使用:在Matlab 中,可以使用"polyfit" 函数来实现拉格朗日插值法。
该函数可以拟合出一个多项式曲线,将给定的数据点映射到曲线上。
二、牛顿插值法1. 原理:牛顿插值法是通过构造一个差商表来逼近未知函数。
给定一组数据点(x0, y0), (x1, y1), …, (xi, yi), …, (xn, yn),通过牛顿插值法可以得到一个N次多项式P(x),满足P(xi) = yi。
该多项式的系数由差商构成,利用递归的方式逐层求解。
2. 实现步骤:(1)创建一个N次多项式的牛顿插值函数;(2)计算差商表,其中第一列为给定的数据点y值;(3)递归计算差商表中的其他列,直到得到最后的差商值;(4)根据差商表构建多项式;(5)通过多项式计算未知点的值。
3. Matlab 中的使用:在Matlab 中,可以使用"interp1" 函数结合牛顿插值法来进行插值计算。