拉格朗日插值、牛顿插值的matlab代码

合集下载

例题matlab拉格朗日插值

例题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

拉格朗⽇插值和⽜顿插值matlab1. 已知函数在下列各点的值为0.20.40.60.8 1.00.980.920.810.640.38⽤插值法对数据进⾏拟合,要求给出Lagrange插值多项式和Newton插值多项式的表达式,并计算插值多项式在点的值。

程序:x=[0.2 0.4 0.6 0.8 1.0];y=[0.98 0.92 0.81 0.64 0.38];x0=[0.2 0.28 0.44 0.76 1 1.08];[f,f0]=Lagrange(x,y,x0)function [f,f0] = Lagrange(x,y,x0)%求已知数据点的Lagrange插值多项式f,并计算插值多项式f在数据点x0的函数值f0syms t;n = length(x);f = 0.0;for i = 1:nl = y(i);for j = 1:i-1l = l*(t-x(j))/(x(i)-x(j));end;for j = i+1:nl = l*(t-x(j))/(x(i)-x(j));end;f = f + l;simplify(f);if(i==n)f0 = subs(f,'t',x0);f = collect(f);f = vpa(f,6);endend结果:>> Untitled3f =- 0.520833*t^4 + 0.833333*t^3 - 1.10417*t^2 + 0.191667*t + 0.98f0 =[ 49/50, 60137/62500, 56377/62500, 42497/62500, 19/50, 15017/62500]⽜顿:%y为对应x的值,A为差商表,C为多项式系数,L为多项式%X为给定节点,Y为节点值,x为待求节点function[y,A,C,L] = newton(X,Y,x,M)n = length(X);m = length(x);for t = 1 : mz = x(t);A = zeros(n,n);A(:,1) = Y';s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;for j = 2 : nfor i = j : nA(i,j) = (A(i,j-1) - A(i-1,j-1))/(X(i)-X(i-j+1));endq1 = abs(q1*(z-X(j-1)));c1 = c1 * j;endC = A(n, n); q1 = abs(q1*(z-X(n)));for k = (n-1):-1:1C = conv(C, poly(X(k)));d = length(C);C(d) = C(d) + A(k,k);endy(t) = polyval(C,z);endL = poly2sym(C);x=[0.2 0.4 0.6 0.8 1.0];y=[0.98 0.92 0.81 0.64 0.38];x0=[0.2 0.28 0.44 0.76 1 1.08];m=1;[y,A,C,L]=newton(x,y,x0,m)结果:y =0.9800 0.9622 0.9020 0.6800 0.3800 0.2403A =0.9800 0 0 0 00.9200 -0.3000 0 0 00.8100 -0.5500 -0.6250 0 00.6400 -0.8500 -0.7500 -0.2083 00.3800 -1.3000 -1.1250 -0.6250 -0.5208C =-0.5208 0.8333 -1.1042 0.1917 0.9800L =- (25*x^4)/48 + (5*x^3)/6 - (53*x^2)/48 + (23*x)/120 + 49/502. 在区间上分别取,⽤两组等距节点对Runge函数作多项式插值(Lagrange插值和Newton插值均可),要求对每个值,分别画出插值多项式和函数的曲线。

用matlab编写拉格朗日插值算法的程序

用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代码

实验五多项式插值逼近信息与计算科学金融崔振威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做出函数图像。

拉格朗日插值法与牛顿插值法

拉格朗日插值法与牛顿插值法
}
printf("请输入y\n");
for(i=0;i<N;i++)
{
scanf("%f",&y[i]);
}
printf("请输入要计算的点\n");
scanf("%f",&n);
s=y[0];
p=1;
for(i=1;i<N;i++)
{
for(j=1;j<N-i;j++)
{
y[j-1]=(y[j]-y[j-1])/(x[j+i-1]-x[j-1]);
}
p=p*(n-x[i-1]);
s=s+y[0]*p;
}
printf("%f\n",s);
}
变成中关键是要计算出插商,才能使计算结果准确无误。
程序代码
#include <stdio.h>
#define N 3
void main()
{
float x[N],y[N],s,p,n;
int i,j;
printf("请输入x\n");
for(i=0;i<N;i++)
{
scanf("%f",&x[i]);
程序代码:
#include <stdio.h>
#define N 3
void main()
{
float x[N],y[N],l[N],m,s,t,n;
int i,j,k;
printf("请输入x\n");
for(i=0;i<N;i++)

MATLAB作业拉格朗日三阶样条插值函数牛顿插值

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。

插值法(牛顿插值与拉格朗日插值法的M文件编写)

插值法(牛顿插值与拉格朗日插值法的M文件编写)

牛顿插值与拉格朗日插值ployfit 实现多项式回归matlab 的m 文件:Function yint=newtint(x,y,xx)%newtint:newton interpolating polynomial%yint=newtint(x,y,xx):uses an (n-1)-order newton%to determine a value of the dependent variable (yint)%at a given value of the independent variable,xx.%input:%x=independent variable%y=dependent variable%xx=value of independent variable at which Interpolation is calculated % output:% yint=interpolated value of dependent variable%compute the finite divided differences in the form of a%difference tablen=length(x);If length(y)~=n,error('x and y must be same length');Endb=zeros(n,n);%assign dependent variables to the first column of b.b(:,1)=y(:);%the(:)ensures that y is a column vector.For j=2:nFor i=1:n-j+1b(I,j)=(b(i+1,j-1)-b(I,j-1))/(x(i+j-1)-x(i));EndEnd% use the finite divided differences to interpolateXt=1;Yint=b(1,1);For j=1:n-1xt=xt*(xx-x(j));Yint=yint+b(1,j+1)*xt;End-------------------------------------------------------------------------------------------------------------拉格朗日插值方法m 文件的编写Function yint =lagrange(x,y,xx)%lagrange:lagrange interpolating polynomial%yint=lagrange(x,y,xx):uses an (n-1)-order% to determine a value of the dependent variable (yint) at% a given value of the independent variable ,xx.%input:% x=independent variable%y=dependent variable%xx=value of independent variable at which the interpolation is calculated %output:% yint=interpolated value of dependent variablen=length(x);If length(y)~=n,error('x and y must be same length');Ends=0;For i=1:nProduct=y(i);For j=1:nIf i~=jProduct =product*(xx-x(j))/(x(i)-x(j));End插值法2010年10月24日11:16EndEnds=s+product; EndYint=s;。

功能强大的牛顿插值matlab程序代码

功能强大的牛顿插值matlab程序代码

format long;way_in = input('请选择输入的内容(1或2):\n1、输入为f(x)表达式,区间[a,b]及其等分数n的值\n2、输入为f(x)表达式和插值点横坐标xi的值\n');switch way_incase 1f = input('请输入函数表达式:f(x) = ', 's');a = input('请输入区间左端值a:');b = input('请输入区间右端值b:');n = input('请输入区间等分值n:');np = input('请输入插值函数在区间内绘图点数(默认输入100):');for i=1:n+1x(i) = a + (b-a)/n*(i-1);y(i,1) = eval(subs(f,'x(i)','x'));endfor j=1:nfor k=j:ntemp=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);endc(j+1)=y(j+1,j+1);for k=1:np-1xx(k)= a + (b-a)/np*k;yy(k) = eval(subs(f,'xx(k)','x'));endfor k=1:np-1xs=xx(k);for i=1:n+1if i==1s(i)=c(i);elses(i)=c(i);for j=1:i-1s(i)=s(i)*(xs-x(j));endendendNn(k)=sum(s);way_out = input('请选择要绘出的曲线(1、2或3):\n1、同时输出原始曲线f(x)和插值曲线\n2、只输出插值曲线\n3、只输出原始曲线\n');switch way_outcase 1figure;plot(xx,yy,'r');grid on;hold on;plot(xx,Nn,'b');legend('原始曲线f(x)','插值曲线N(x)');title('牛顿插值');case 2figure;plot(xx,Nn,'m');legend('插值曲线N(x)');title('牛顿插值');case 3figure;plot(xx,yy,'g');legend('原始曲线f(x)');title('牛顿插值');otherwiseerrordlg('请正确选择,输入只能为1、2或者3!','提示','on');endcase 2f = input('请输入函数表达式:f(x) = ', 's');xb = input('请输入插值节点的横坐标x:','s');x = sscanf(xb,'%f');disp('x0,x1,...,xi分别为:');disp(x);n = size(x,1) - 1;if n<2errordlg('请至少输入3个xi的值','提示','on');return;endnp = input('请输入插值函数在区间内绘图点数(默认输入100):');a = x(1);b = x(n+1);for i=1:n+1y(i,1) = eval(subs(f,'x(i)','x'));endfor j=1:nfor k=j:ntemp=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);endc(j+1)=y(j+1,j+1);for k=1:np-1xx(k) = a + (b-a)/np*k;yy(k) = eval(subs(f,'xx(k)','x'));endfor k=1:np-1xs=xx(k);for i=1:n+1if i==1s(i)=c(i);elses(i)=c(i);for j=1:i-1s(i)=s(i)*(xs-x(j));endendendNn(k)=sum(s);endway_out = input('请选择要绘出的曲线(1、2或3):\n1、同时输出原始曲线f(x)和插值曲线\n2、只输出插值曲线\n3、只输出原始曲线\n');switch way_outcase 1figure;plot(xx,yy,'r');grid on;hold on;plot(xx,Nn,'b');legend('原始曲线f(x)','插值曲线N(x)');title('牛顿插值');case 2figure;plot(xx,Nn,'m');legend('插值曲线N(x)');title('牛顿插值');case 3figure;plot(xx,yy,'g');legend('原始曲线f(x)');title('牛顿插值');otherwiseerrordlg('请正确选择,输入只能为1、2或者3!','提示','on');endotherwiseerrordlg('请正确选择,输入只能为1或2!','提示','on');end。

matlab 拉格朗日插值法和牛顿插值法

matlab 拉格朗日插值法和牛顿插值法

matlab 拉格朗日插值法和牛顿插值法题目:MATLAB中的拉格朗日插值法和牛顿插值法引言在实际问题中,我们常常需要通过一系列已知数据点来估计未知数据点的值。

这种问题很常见,例如用温度测量数据来预测未来某一天的温度。

为了解决这种插值问题,拉格朗日插值法和牛顿插值法是常用的方法之一。

在本文中,我们将介绍这两种插值方法并详细解释如何在MATLAB中使用它们。

一、拉格朗日插值法拉格朗日插值法是基于拉格朗日多项式的一种插值方法。

该方法使用已知数据点的值和位置来构造一个多项式,进而估计未知数据点的值。

其基本思想是通过多项式与每个数据点相等,并利用拉格朗日插值公式来得到插值多项式。

1. 拉格朗日插值公式拉格朗日插值公式可以表示为:P(x) = Σ(yi * li(x))其中P(x)是插值多项式,yi是第i个数据点的值,li(x)是拉格朗日基函数。

拉格朗日基函数li(x)定义为:li(x) = Π((x-xj)/(xi-xj)) (j ≠i)2. MATLAB实现要在MATLAB中实现拉格朗日插值法,我们可以按照以下步骤进行:(1)首先定义数据点的横坐标x和纵坐标y;(2)使用for循环遍历每个数据点,并计算插值多项式的每一项;(3)将每个数据点的插值多项式项相加,得到最终的插值多项式;(4)通过给定的x值,计算插值多项式的值。

该过程可以通过以下MATLAB代码实现:matlab定义已知数据点的横坐标和纵坐标x = [1, 2, 3, 4];y = [2, 4, 1, 6];计算插值多项式的每一项n = length(x); 数据点数量P = 0; 初始化插值多项式for i = 1:n计算每一项的拉格朗日基函数li = ones(size(x));for j = 1:nif j ~= ili = li .* (xs - x(j)) / (x(i) - x(j));endend计算每一项的插值多项式项Pi = yi * li;将每一项相加得到最终的插值多项式P = P + Pi;end给定x值,计算插值多项式的值x_val = 2.5;y_val = polyval(P, x_val);二、牛顿插值法牛顿插值法是一种使用差商的插值方法。

2、拉格朗日插值的matlab实现

2、拉格朗日插值的matlab实现
%x0处的插值:f0
syms t;
if(length(x)==length(y))
n=length(x);
else
disp('x和y的维数不相等!');
return;
end%检错
f=0.0;
for(i=1:n)
l=y(i);
for(j=1:i-1)
l=l*(t-x(j))/(x(i)-x(j));
end;
[f,f0]=Language(x,y,1.6)%计算输出的拉格朗日插值多项式
%计算x=1.6时的插值输出值f0
运行结果
f =
-799/3125*t*(t-1)*(t-3/2)*(t-2)*(t-5/2)*(t-3)+561/500*t*(t-1/2)*(t-3/2)*(t-2)*(t-5/2)*(t-3)-133/75*t*(t-1/2)*(t-1)*(t-2)*(t-5/2)*(t-3)+3031/2500*t*(t-1/2)*(t-1)*(t-3/2)*(t-5/2)*(t-3)-399/1250*t*(t-1/2)*(t-1)*(t-3/2)*(t-2)*(t-3)+1411/112500*t*(t-1/2)*(t-1)*(t-3/2)*(t-2)*(t-5/2)
for(j=i+1:n)
l=l*(t-x(j))/(x(i)-x(j));%计算拉格朗日基函数
end;
f=f+l;%计算拉格朗日插值函数
simplify(f);%化简
end
f0=subs(f,'t',x0);%计算插值点的函数值
运行程序;
x=0:0.5:3;
y=[0 0.4794 0.8415 0.9975 0.9093 0.5985 0.1411];

Langrage和Newton插值法的matlab实现

Langrage和Newton插值法的matlab实现

仅供参考1.已知数据如下:(1)用MATLAB语言编写按Langrage插值法和Newton插值法计算插值的程序,对以上数据进行插值;(2)利用MATLAB在第一个图中画出离散数据及插值函数曲线。

(1.1)langrage插值法编程实现syms xx0=[0.2,0.4,0.6,0.8,1.0];y0=[0.98,0.92,0.81,0.64,0.38];for i=1:5a=1;for j=1:5if j~=ia=expand(a*(x-x0(j)));endendb=1;for k=1:5if k~=ib=b*(x0(i)-x0(k));endendA(i)=expand(a/b);endL=0;for p=1:5L=L+y0(p)*A(p);endLL =-25/48*x^4+5/6*x^3-53/48*x^2+23/120*x+49/50(1.2)Newton插值程序实现clear allclcsyms xx0=[0.2,0.4,0.6,0.8,1.0];y0=[0.98,0.92,0.81,0.64,0.38];for k=1:5for i=1:ka=1;b=0;for j=1:kif j~=ia=a*(x0(i)-x0(j));endendb=b+y0(i)/a;endA(k)=b;endB=[1,(x-x0(1)),(x-x0(1))*(x-x0(2)),(x-x0(1))*(x-x0(2))*(x-x0(3)),(x-x 0(1))*(x-x0(2))*(x-x0(3))*(x-x0(4))];L1=A.*B;l=0;for m=1:5l=l+L1(m);endL=expand(l)L =61/100+13/30*x+383/48*x^2-155/24*x^3+475/48*x^4(2)画图x0=[0.2,0.4,0.6,0.8,1.0];y0=[0.98,0.92,0.81,0.64,0.38];subplot(1,2,1);plot(x0(1),y0(1),'+r',x0(2),y0(2),'+r',x0(3),y0(3),'+r',x0(4),y0(4),' +r',x0(5),y0(5),'+r')x=0:0.05:1;y=-25/48.*x.^4+5/6.*x.^3-53/48.*x.^2+23/120.*x+49/50;subplot(1,2,2);plot(x,y)2.给定函数21(),[1,1]125f x x x ,利用上题编好的Langrage 插值程序(或Newton 插值程序),分别取3个,5个、9个、11个等距节点作多项式插值,分别画出插值函数及原函数()f x 的图形,以验证Runge 现象、分析插值多项式的收敛性。

拉格朗日插值matlab程序例题

拉格朗日插值matlab程序例题

拉格朗日插值是一种常用的数据拟合方法,它可以通过已知数据点来估计出未知数据点的值。

在数学和工程领域中,拉格朗日插值经常被用来进行数据的近似和预测。

在本文中,我们将深入探讨拉格朗日插值的原理和应用,并以Matlab程序例题来展示其实际运用。

1. 拉格朗日插值的原理拉格朗日插值是利用已知数据点来构造一个多项式,通过这个多项式来拟合数据并进行预测。

它的原理基于拉格朗日多项式的概念,即通过已知的n个点来构造一个n-1次的拉格朗日多项式,利用这个多项式来估计其他点的数值。

2. 拉格朗日插值的公式假设有n个已知的数据点(x1, y1), (x2, y2), …, (xn, yn),则拉格朗日插值多项式可以表示为:L(x) = Σ(yi * li(x)), i=1 to n其中li(x)是拉格朗日基函数,定义为:li(x) = Π((x - xj) / (xi - xj)), j=1 to n, j≠i利用这个公式,我们可以得到拉格朗日插值多项式,进而进行数据的拟合和预测。

3. 拉格朗日插值的Matlab程序实现下面我们将以一个具体的例题来展示如何使用Matlab来实现拉格朗日插值。

假设有如下数据点:y = [10, 5, 8, 3, 6];我们希望利用这些数据点来构造拉格朗日插值多项式,并使用这个多项式来估计x=3.5处的数值。

我们可以编写Matlab程序来实现拉格朗日插值。

代码如下:```matlabfunction result = lagrange_interpolation(x, y, xx)n = length(x);result = 0;for i = 1:ntemp = y(i);for j = 1:nif i ~= jtemp = temp * (xx - x(j)) / (x(i) - x(j));endendresult = result + temp;endend```我们可以调用这个函数来进行插值计算:```matlaby = [10, 5, 8, 3, 6];xx = 3.5;result = lagrange_interpolation(x, y, xx)disp(result);```通过这段程序,我们可以得到x=3.5处的插值结果为6.75。

matlab 拉格朗日插值法和牛顿插值法 -回复

matlab 拉格朗日插值法和牛顿插值法 -回复

matlab 拉格朗日插值法和牛顿插值法-回复问题:matlab中的拉格朗日插值法和牛顿插值法是什么?如何实现?引言:插值法是一种数值分析技术,用于找出一系列已知数据点之间的未知数据点的近似值。

在实际应用中,我们常常需要根据有限个离散数据点来推断出连续函数的性质,这就是插值的问题。

拉格朗日插值法和牛顿插值法是常用的插值方法之一,本文将一步一步地介绍这两种方法的原理及其在Matlab中的实现过程。

一、拉格朗日插值法拉格朗日插值法是通过一个多项式来逼近一组已知数据点,然后利用该多项式求解未知位置的近似值。

拉格朗日插值法的主要思想是利用Lagrange插值多项式来拟合给定的数据,具体步骤如下:1. 根据已知数据点的个数n,构造n次拉格朗日插值多项式。

多项式的一般形式如下:![拉格朗日插值多项式公式](其中,x为自变量,y为因变量,x[i]表示已知点的横坐标,y[i]表示已知点的纵坐标,L[i]表示Lagrange插值基函数。

具体计算Lagrange插值基函数的公式如下:![Lagrange插值基函数公式](2. 根据求出的拉格朗日插值多项式,代入未知位置的横坐标,计算出对应的纵坐标值。

这样就得到了近似值。

二、牛顿插值法牛顿插值法是通过一个低次的插值多项式来逼近一组已知数据点,并通过不断迭代来逐步提高插值多项式的次数。

牛顿插值法的主要思想是利用差商(divided difference)来拟合给定的数据,具体步骤如下:1. 根据已知数据点的个数n,构造n次牛顿插值多项式。

多项式的一般形式如下:![牛顿插值多项式公式](其中,x为自变量,y为因变量,x[i]表示已知点的横坐标,y[i]表示已知点的纵坐标,f[x0, x1]表示差商。

具体计算差商的公式如下:![差商公式](其中,Δy表示差商的分子部分,Δx表示差商的分母部分,Δx[j]表示x[j+1]和x[j]之间的差值,Δy[j]表示y[j+1]和y[j]之间的差值。

matlab牛顿插值法程序

matlab牛顿插值法程序

matlab牛顿插值法程序牛顿插值法是一种数值分析方法,用于确定给定数据点之间的未知函数值。

该方法使用一个插值多项式,该多项式使得插值多项式通过给定的插值点,并且在插值点周围的函数值接近已知函数值。

该方法比其他插值方法更高,因为它使用被插值数据的微分。

下面是MATLAB中牛顿插值法的程序:function [f, c] = newton_interpolation(x, y)% x:插值节点不同的x值,必须有n个元素。

% y:相应在每个节点的y值,必须有n个元素。

% 返回:拟合的多项式和的权重向量c% 我们创建一个表格,其中包含x和y值的第一行n = length(x);delta=zeros(n,n);% 先把第一列设置为y值:delta(:,1)=y';%接下来,我们将使用牛顿插值法来填写余下的每个列for j=2:nfor i=j:ndelta(i,j) = ( delta(i,j-1) - delta(i-1,j-1) )/( x(i) - x(i-j+1));endend% 配置 c 数组% 从差分表中得出k次递归系数矩阵,目标是多项式系数c = zeros(1,n);c(1)=delta(1,1);% 获取插值多项式(通过牛顿插值法)syms t;L = c(1);for j=2:nprod = 1;for i=1:j-1prod = prod * ( t - x(i) );endL = L + c(j) * prod;end% 转换L成一个函数y=L(x)f = matlabFunction(L);end现在,当我们调用这个函数并输入我们想要插值的节点和相应的y值,我们会得到拟合的多项式和传递插值节点的权重向量。

matlab插值法

matlab插值法

MATLAB插值法引言MATLAB是一种高级编程语言和环境,特别适用于数值计算和数据可视化。

插值法是一种在给定有限的数据点的情况下,通过构造插值函数来估计其他数据点的方法。

在MATLAB中,有多种插值方法可供选择,例如拉格朗日插值、牛顿插值和样条插值等。

本文将详细介绍MATLAB中常用的插值方法及其应用。

一、拉格朗日插值法拉格朗日插值法是一种多项式插值方法,通过构造一个满足给定数据点要求的多项式函数,来估计其他数据点的函数值。

其基本思想是通过一个多项式函数对已知数据点进行拟合,以实现函数值的估计。

以下是使用MATLAB实现拉格朗日插值法的步骤:1.确定待插值的数据点集合,假设有n个数据点。

2.构造拉格朗日插值多项式。

拉格朗日插值多项式的表达式为:其中,为拉格朗日基函数,其表达式为:3.利用构造的拉格朗日插值多项式求解其他点的函数值。

二、牛顿插值法牛顿插值法是一种基于差商的插值方法,通过构造一个n次多项式函数来拟合已知数据点,并利用差商的性质来求解其他点的函数值。

使用MATLAB实现牛顿插值法的步骤如下:1.确定待插值的数据点集合,假设有n个数据点。

2.计算差商表。

差商表的计算公式为:3.构造牛顿插值多项式。

牛顿插值多项式的表达式为:4.利用构造的牛顿插值多项式求解其他点的函数值。

三、样条插值法样条插值法是一种通过多段低次多项式来逼近原始数据,以实现光滑插值的方法。

它在相邻数据点处保持一定的连续性,并通过边界条件来确定插值函数的特性。

以下是使用MATLAB实现样条插值法的步骤:1.确定待插值的数据点集合,假设有n个数据点。

2.根据数据点的个数确定样条插值的次数。

一般情况下,插值多项式的次数小于或等于n-1。

3.利用边界条件构造样条插值函数。

常用的边界条件有:自然边界、固定边界和周期边界。

4.利用MATLAB中的插值函数csape或interp1等进行样条插值。

5.利用样条插值函数求解其他点的函数值。

多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值[MATLAB]

多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值[MATLAB]

多项式函数插值:全域多项式插值(⼀)单项式基插值、拉格朗⽇插值、⽜顿插值[MATLAB] 全域多项式插值指的是在整个插值区域内形成⼀个多项式函数作为插值函数。

关于多项式插值的基本知识,见。

在单项式基插值和⽜顿插值形成的表达式中,求该表达式在某⼀点处的值使⽤的Horner嵌套算法啊,见""。

1. 单项式(Monomial)基插值1)插值函数基 单项式基插值采⽤的函数基是最简单的单项式:\phi_j(t)=t^{j-1}, j=1,2,...n;\quad f(t)=p_{n-1}(t)=x_1+x_2t+x_3t^2+...x_nt^{n-1}=\sum\limits_{j=1}^nx_jt^{j-1} 所要求解的系数即为单项式系数x_1,x_2,...x_n,在这⾥仍然采⽤1,2,...n的下标记号⽽不采⽤和单项式指数对应的0,1,2,...,n-1的下标仅仅是出于和前后讨论⼀致的需要。

2)叠加系数 单项式基插值采⽤单项式函数基,若有m个离散数据点需要插值,设使⽤n项单项式基底:x_1+t_1x_2+t_1^2x_3+...+t_1^{n-1}x_n=y_1\\ x_1+t_2x_2+t_2^2x_3+...+t_2^{n-1}x_n=y_2\\ ...... ...... ...... ...... ...... ......\\ x_1+t_mx_2+t_m^2x_3+...+t_m^{n-1}x_n=y_m 系数矩阵为⼀m\times n的矩阵(m\leq n),范德蒙(Vandermonde)矩阵:\begin{bmatrix}1&t_1&t_1^2&...&t_1^{n-1}\\1&t_2&t_2^2&...&t_2^{n-1}\\...&...&...&...&...\\1&t_n&t_n^2&...&t_n^{n-1}\end{bmatrix}\begin{bmatrix}x_1\\x_2\\...\\x_n\end{bmatrix}=\begin{bmatrix}y_1\\y_2\\...\\y_n\end{bmatrix} 根据计算基本理论中的讨论,多项式插值的函数基⼀定线性⽆关,且只要离散数据点两两不同,所构成的矩阵⾏也⼀定线性⽆关,这保证了矩阵⼀定⾏满秩。

拉格朗日差值、牛顿插值以及三次样条插值的matlab实现

拉格朗日差值、牛顿插值以及三次样条插值的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中实现拉格朗日插值法的代码如下:function [y] = LagrangeInterpolation(x, y, x0)% x为已知数据点的横坐标% y为已知数据点的纵坐标% x0为需要求解近似值的横坐标n = length(x); % 数据点个数L = ones(n, 1); % 初始化L矩阵for i = 1:nfor j = 1:nif i ~= jL(i) = L(i) * (x0 - x(j)) / (x(i) - x(j)); % 计算L(i)endendendy = sum(y .* L); % 计算插值结果end以上代码实现了拉格朗日插值法的核心部分。

首先定义了一个L矩阵,用于存储每个数据点对应的L(i)系数。

接着使用两层循环计算每个L(i)系数,并将它们乘起来得到多项式中第i项对应的系数。

最后将所有项相加即可得到插值结果。

需要注意的是,该代码只适用于已知数据点的横坐标互不相同的情况。

如果存在相同的横坐标,则需要对代码进行一定的修改。

在使用该代码时,可以先将已知数据点的横纵坐标存储在两个数组中,然后调用函数计算需要求解近似值的横坐标对应的插值结果即可。

例如:x = [1, 2, 3, 4];y = [1, 4, 9, 16];x0 = 2.5;y0 = LagrangeInterpolation(x, y, x0);以上代码将计算出在x=2.5处对应的近似值y0=6.25。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验五多项式插值逼近
信息与计算科学金融崔振威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+1
v=1;
for j=1:n+1
if k~=j
v=conv(v,poly(x(j)))/(x(k)-x(j)) %对多项式做卷积运算end
end
l(k,:)=v;
end
c=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:n
x1=x;y1=y;
x1(i+1:n)=[];
y1(i+1:n)=[];
n1=length(x1);
s1=0;
for j=1:n1
t1=1;
for k=1:n1
if k==j %如果相等则跳出循环
continue;
else
t1=t1*(x1(j)-x1(k));
end
end
s1=s1+y1(j)/t1;
end
chaS(i)=s1;
end
b(1,:)=[zeros(1,n-1) chaS(1)];
cl=cell(1,n-1); %cell定义了一个矩阵
for i=2:n
u1=1;
for j=1:i-1
u1=conv(u1,[1 -x(j)]); %conv()用于多项式乘法、矩阵乘法
cl{i-1}=u1;
end
cl{i-1}=chaS(i)*cl{i-1};
b(i,:)=[zeros(1,n-i),cl{i-1}];
end
p2=b(1,:);
for j=2:n
p2=p2+b(j,:);
end
if length(t)==1
rm=0;
for i=1:n
rm=rm+p2(i)*t^(n-i);
end
z=rm;
else
k1=length(t);
rm=zeros(1,k1);
for j=1:k1
for i=1:n
rm(j)=rm(j)+p2(i)*t(j)^(n-i);
end
z=rm;
end
end
plot(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.8221
2.2255 2.7183
>> [c,l]=lagran(x,y)
可以得出输出结果为:
c =
0.0139 0.0349 0.1704 0.4991 1.0001 1.0000
l =
-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000
130.2083 -364.5833 369.7917 -160.4167 25.0000 0
-260.4167 677.0833 -614.5833 222.9167 -25.0000 0
260.4167 -625.0000 510.4167 -162.5000 16.6667 0
-130.2083 286.4583 -213.5417 63.5417 -6.2500 0
26.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 0
l =
-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000
130.2083 -364.5833 369.7917 -160.4167 25.0000 0
-260.4167 677.0833 -614.5833 222.9167 -25.0000 0
260.4167 -625.0000 510.4167 -162.5000 16.6667 0
-130.2083 286.4583 -213.5417 63.5417 -6.2500 0
26.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.0000
l =
-26.0417 78.1250 -88.5417 46.8750 -11.4167 1.0000
130.2083 -364.5833 369.7917 -160.4167 25.0000 0
-260.4167 677.0833 -614.5833 222.9167 -25.0000 0
260.4167 -625.0000 510.4167 -162.5000 16.6667 0
-130.2083 286.4583 -213.5417 63.5417 -6.2500 0
26.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.0000
P178.1
2、a0=5 a1=-2 a2=0.5 a3=-0.1 a4=0.003
x0=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.8688
v =
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做出函数图像。

对输出结果v的值和图像进行分析,不难发现函数的输出值没有很明显的偏离函数原图像,即出现龙格现象。

因此利用牛顿插值多项式求该函数,其结果是逼近的。

相关文档
最新文档