拉格朗日插值多项式积分求圆周率近似Matlab实现

合集下载

MATLAB实现:拉格朗日插值法示例代码及应用指南

MATLAB实现:拉格朗日插值法示例代码及应用指南

下面是使用 MATLAB 编写的拉格朗日插值法的示例代码:参数:x 是已知点的 x 坐标数组,y 是已知点的 y 坐标数组,point 是要进行插值的点的 x 坐标。

该函数会返回在给定 x 坐标 point 处的插值结果。

算法的实现思路是根据拉格朗日插值公式计算插值多项式,然后将 point 带入多项式计算得到插值结果。

你可以按照以下步骤使用上述函数:定义已知点的 x 坐标数组 x 和对应的 y 坐标数组 y。

调用lagrange_interpolation函数,并将x、y 和要插值的point 作为参数传递进去。

函数将返回在 point 处的插值结果。

以下是一个使用示例:1.定义已知点的 x 和 y 坐标x = [0, 1, 2, 4];y = [1, 4, 3, 2];2.要进行插值的点的 x 坐标point = 3.5;3.调用 lagrange_interpolation 函数进行插值result = lagrange_interpolation(x, y, point);4.输出插值结果disp(['在x = ', num2str(point), ' 处的插值结果为:', num2str(result)]);在上述示例中,已知点的 x 坐标为 [0, 1, 2, 4],对应的 y 坐标为 [1, 4, 3, 2]。

我们要在point = 3.5 处进行插值,然后通过调用lagrange_interpolation 函数计算插值结果,并输出结果。

请注意,拉格朗日插值法适用于小样本量和较低次数的插值问题。

对于大样本量和更高次数的插值,可能需要考虑使用其他插值方法或数值计算库中提供的更高级的插值函数。

用MATLAB实现拉格朗日插值和分段线性插值

用MATLAB实现拉格朗日插值和分段线性插值

用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文献.简直编程如下/*分段线性插值函数:div_linear.m 文献*/function y = div_linear(x0,y0,x,n)%for j = 1:length(x)for i = 1:n-1if (x >= x0(i)) && (x <= x0(i+1))y = (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 = input(‘输进n =:’);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键,出现:此时.图形将于本函数图形基础符合,证明分隔区间越多,图像交近真正在的图像.(3)用lagrange插值瞅察y = |si n(k*π*x)|的缺点分解:1)编写函数文献,保存正在f2.m 中x=0:0.01:1;k= input('输进k:')n= input('输进n:');y=abs(sin(k*pi*x));p=polyfit(x,y,n-1);py=vpa(poly2sym(p),8);plot_x=0:0.01:1;f1=polyval(p,plot_x);plot(x,y,plot_x,f1);2)运止该步调:输进k=:1输进n=:2出现如下图形界里:闭掉图形界里后沉新运止f2.m,输进k=:1,n=:3出现如下界里:再次闭掉图形界里,输进k=:1,n=:6 后出现:此时图形基础符合.类推,输进k=2,n=3后出现:k =2, n =11,出现如下图形:k =2,n =15,那时出现:k =2,n =19,出现:当k=2,n=21时,图形如下:此时基础符合.5、真验归纳:通过本次课程安排,尔发端掌握了MATLAB使用,加深了对付于百般线性插值的明白;培植了独力处事本领战创制力;概括使用博业及前提知识,办理本质数教问题的本领;正在本次课程安排中,正在教授的粗心指挥下,支益匪浅.共时对付数教的钻研有了更深进的认识.。

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

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

题 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:5a=(x1-floor(x1));%请读者认真逐一带入推导if x1==floor(x1)f1=[f1,y(floor(x1)+6)];elsef1=[f1,y(floor(x1)+6)+a*(y(floor(x1)+7)-y(floor(x1)+6))]; endendm=-5:0.1:5plot(m,f1,'-r',x,y,'+')axis([-5 5 0 10])legend('liner插值','原函数');xlabel('X');ylabel('Y');title('liner插值与原函数的对比');grid2、多项式插值x0=-5:1:-3;y0=10*exp(-abs(x0));x=-5:0.1:-3;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;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');gridhold onx0=-3:1:-1;y0=10*exp(-abs(x0));x=-3:0.1:-1;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;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');gridhold onx0=-1:1:1;y0=10*exp(-abs(x0));x=-1:0.1:1;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;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');gridhold onx0=1:1:3;y0=10*exp(-abs(x0));x=1:0.1:3;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;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');gridhold onx0=3:1:5;y0=10*exp(-abs(x0));x=3:0.1:5;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;endaxis([-5 5 0 10])plot(x,y,'m',x0,y0,'+')legend('三次多项式插值','原函数');xlabel('X');ylabel('Y');title('三次多项式插值与原函数的对比');grid3、最邻近插值function pushbutton3_Callback(hObject, eventdata, handles) x=-5:5;y=10*exp(-abs(x));f2=[];for x1=-5:0.1:5if abs(x1-floor(x1))<0.5f2=[f2,y(floor(x1)+6)];elsef2=[f2,y(floor(x1)+7)];endendm=[-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。

matlab实现数值分析插值及积分

matlab实现数值分析插值及积分

数值分析学院:计算机专业:计算机科学与技术班级:xxx学号:xxx姓名:xxx指导教师:xxx数值分析摘要:数值分析(numerical analysis)是研究分析用计算机求解数学计算问题的数值计算方法及其理论的学科,是数学的一个分支,它以数字计算机求解数学问题的理论和方法为研究对象。

在实际生产实践中,常常将实际问题转化为数学模型来解决,这个过程就是数学建模。

学习数值分析这门课程可以让我们学到很多的数学建模方法。

分别运用matlab数学软件编程来解决插值问题和数值积分问题。

题目中的要求是计算差值和积分,对于问题一,可以分别利用朗格朗日插值公式,牛顿插值公式,埃特金逐次线性插值公式来进行编程求解,具体matlab代码见正文。

编程求解出来的结果为:P4x=x4+1。

其中Aitken插值计算的结果图如下:对于问题二,可以分别利用复化梯形公式,复化的辛卜生公式,复化的柯特斯公式编写程序来进行求解,具体matlab代码见正文。

编程求解出来的结果为:0.6932其中复化梯形公式计算的结果图如下:问题重述问题一:已知列表函数表格分别用拉格朗日,牛顿,埃特金插值方法计算P4x 。

问题二:用复化的梯形公式,复化的辛卜生公式,复化的柯特斯公式计算积分121xdx ,使精度小于5×10-5。

问题解决问题一:插值方法对于问题一,用三种差值方法:拉格朗日,牛顿,埃特金差值方法来解决。

一、拉格朗日插值法:拉格朗日插值多项式如下:首先构造1+n 个插值节点n x x x ,,,10 上的n 插值基函数,对任一点i x 所对应的插值基函数)(x l i ,由于在所有),,1,1,,1,0(n i i j x j +-=取零值,因此)(x l i 有因子)())(()(110n i i x x x x x x x x ----+- 。

又因)(x l i 是一个次数不超过n 的多项式,所以只可能相差一个常数因子,固)(x l i 可表示成:)())(()()(110n i i i x x x x x x x x A x l ----=+-利用1)(=i i x l 得:)())(()(1110n i i i i i i x x x x x x x x A ----=+-于是),,2,1,0()())(()()())(()()(110110n i x x x x x x x x x x x x x x x x x l n i i i i i i n i i i =--------=+-+-因此满足i i n y x L =)( ),2,1,0(n i =的插值多项式可表示为:∑==nj j j n x l y x L 0)()(从而n 次拉格朗日插值多项式为:),,2,1,0()()(0n i x l y x L nj i j j i n ==∑=matlab 编程:编程思想:主要从上述朗格朗日公式入手:依靠循环,运用poly ()函数和conv ()函数表示拉格朗日公式,其中的poly (i )函数表示以i 作为根的多项式的系数,例如poly (1)表示x-1的系数,输出为1 -1,而poly (poly (1))表示(x-1)*(x-1)=x^2-2*x+1的系数,输出为1 -2 1;而conv ()表示多项式系数乘积的结果,例如conv (poly (1),poly (1))输出为1 -2 1;所以程序最后结果为x^n+x^n-1+……+x^2+x+1(n 的值据结果的长度为准)的对应系数。

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

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

用matlab编写拉格朗日插值算法的程序10[ 标签:matlab,插值算法,程序]用matlab编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,在整个插值区间上采用拉格朗日插值法计算f(),写出程序源代码,输出计算结果xy匿名回答:1 人气:6 解决时间:2011-05-24 19:58满意答案好评率:83%做了一个测试,希望有所帮助。

代码:% 用matlab编写拉格朗日插值算法的程序,并以下面给出的函数表为数据基础,% 在整个插值区间上采用拉格朗日插值法计算f(),写出程序源代码,输出计算结果% x% yfunction main()clc;x = [ ]; y = [ ];x0 = ;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 =>>如何用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=;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;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('', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n');fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'x的值\n\n');fprintf(fid, '% \n', x);break;endk=k+1;x0=x;endif k==N+1fid = fopen('', 'wt');fprintf(fid,'\n********用SOR迭代求解线性方程组的输出结果********\n\n');fprintf(fid,'迭代次数: %d次\n\n',k);fprintf(fid,'超过最大迭代次数,求解失败!');fclose(fid);endMatlab中龙格-库塔(Runge-Kutta)方法原理及实现龙格-库塔(Runge-Kutta)方法是一种在工程上应用广泛的高精度单步算法。

拉格朗日插值法matlab程序

拉格朗日插值法matlab程序

拉格朗日插值法matlab程序拉格朗日插值法是一种用于构造插值多项式的方法,它可以通过已知数据点来估计函数在其他位置的值。

在数值分析和工程应用中,拉格朗日插值法被广泛使用,尤其在数据处理和曲线拟合方面。

在本文中,我将为您介绍拉格朗日插值法的原理和应用,并共享一个用于实现该方法的简单matlab程序。

让我们来了解一下拉格朗日插值法的原理。

拉格朗日插值法是通过在已知数据点上构造一个插值多项式来实现的。

假设我们有n+1个不同的数据点(x0, y0), (x1, y1), ..., (xn, yn),我们希望通过这些数据点来估计函数在其他位置的值。

拉格朗日插值多项式的一般形式为:P(x) = Σ(yi * li(x))i=0 to n其中,li(x)是拉格朗日基础多项式,它的表达式为:li(x) = Π(x - xj) / (xi - xj)j=0 to n, j ≠ i通过以上公式,我们可以得到拉格朗日插值多项式P(x),从而实现对函数在其他位置的估计。

在matlab中,我们可以通过编写一个简单的程序来实现拉格朗日插值法。

下面是一个用于计算拉格朗日插值多项式的matlab程序:```matlabfunction [L, P] = lagrange_interp(x, y, xx)n = length(x);m = length(xx);L = zeros(n, m);for i = 1:nt = ones(1, m);for j = [1:i-1, i+1:n]t = t .* (xx - x(j)) / (x(i) - x(j));endL(i,:) = t;endP = y * L;end```在上面的程序中,x和y分别表示已知数据点的横纵坐标,xx表示我们希望估计函数值的位置。

程序返回的L矩阵存储了插值多项式的系数,P向量存储了估计函数值的结果。

通过这个简单的程序,我们就可以快速实现拉格朗日插值法的计算。

插值与拟合的MATLAB实现

插值与拟合的MATLAB实现

插值与拟合的MATLAB实现插值和拟合是MATLAB中常用的数据处理方法。

插值是通过已知数据点之间的数值来估计未知位置的数值。

而拟合则是通过已知数据点来拟合一个曲线或者函数,以便于进行预测和分析。

插值方法:1.线性插值:使用MATLAB中的interp1函数可以进行线性插值。

interp1函数的基本语法为:yinterp = interp1(x, y, xinterp),其中x和y为已知数据点的向量,xinterp为待插值的位置。

函数将根据已知数据点的线性关系,在xinterp位置返回相应的yinterp值。

2.拉格朗日插值:MATLAB中的lagrangepoly函数可以使用拉格朗日插值方法。

lagrangepoly的基本语法为:yinterp = lagrangepoly(x, y, xinterp),其中x和y为已知数据点的向量,xinterp为待插值的位置。

函数将根据拉格朗日插值公式,在xinterp位置返回相应的yinterp值。

3.三次样条插值:使用MATLAB中的spline函数可以进行三次样条插值。

spline函数的基本语法为:yinterp = spline(x, y, xinterp),其中x和y为已知数据点的向量,xinterp为待插值的位置。

函数将根据已知数据点之间的曲线关系,在xinterp位置返回相应的yinterp值。

拟合方法:1.多项式拟合:MATLAB中的polyfit函数可以进行多项式拟合。

polyfit的基本语法为:p = polyfit(x, y, n),其中x和y为已知数据点的向量,n为要拟合的多项式的次数。

函数返回一个多项式的系数向量p,从高次到低次排列。

通过使用polyval函数,我们可以将系数向量p应用于其他数据点,得到拟合曲线的y值。

2.曲线拟合:MATLAB中的fit函数可以进行曲线拟合。

fit函数的基本语法为:[f, goodness] = fit(x, y, 'poly2'),其中x和y为已知数据点的向量,'poly2'表示要拟合的曲线类型为二次多项式。

matlab圆周率

matlab圆周率

matlab圆周率计算方法及实现Matlab是一种强大的数学软件,可以用它来进行各种复杂的计算和数据分析。

其中,计算圆周率也是Matlab中常见的问题之一。

本文将介绍几种常见的计算圆周率的方法,并提供相应的Matlab代码实现。

一、Leibniz公式Leibniz公式是一种最简单的计算圆周率的方法。

该公式由德国数学家莱布尼兹在17世纪提出,其基本思想是利用无穷级数逼近圆周率。

具体公式如下:$\pi=4\sum_{n=0}^{\infty}\frac{(-1)^{n}}{2n+1}$根据该公式,我们可以编写如下代码:function pi = leibniz(n)pi = 0;for i = 0:npi = pi + (-1)^i/(2*i+1);endpi = 4*pi;end其中,n为迭代次数。

二、Monte Carlo方法Monte Carlo方法是一种随机模拟方法,可以用于估计各种复杂问题的解。

在计算圆周率时,我们可以利用Monte Carlo方法来模拟投掷点落在圆内或者圆外的概率,并通过比值来估计圆周率。

具体实现过程如下:- 在一个正方形内随机生成n个点;- 统计落在圆内的点的个数m;- 通过比值$\frac{m}{n}$来估计圆周率,即$\pi\approx4\frac{m}{n}$。

根据该方法,我们可以编写如下代码:function pi = monte_carlo(n)x = rand(1,n);y = rand(1,n);d = sqrt(x.^2 + y.^2);m = sum(d <= 1);pi = 4*m/n;end其中,n为生成点的个数。

三、Bailey-Borwein-Plouffe公式Bailey-Borwein-Plouffe公式是一种快速计算圆周率的方法。

该公式由Jonathan M. Borwein、Peter B. Borwein和Simon Plouffe在1995年提出,其基本思想是利用二进制数位上的特殊性质来逼近圆周率。

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

Lagrange 插值多项式积分求圆周率近似
摘要:
公式1:y1=4/(1+x^2) 公式2:y2=4*sqrt(1-x^2) 分别对公式1、公式2求其拉格朗日插值多项式,再对其求0-1上的定积分来求圆周率π的近似值,并在Matlab 中通过画图来比较两个所求得的值与真实值π的偏差。

Lagrange 插值多项式:
)()(l )(L 0i n i n
i x f x x ∑==
其中 )())(())(()
())(())(()(l 11101110i n i i i i i i i n i i x x x x x x x x x x x x x x x x x x x x x -⋯⋯--⋯⋯---⋯⋯--⋯⋯--=+-+-
)(i x f 为函数在i x 处的函数值,)(x L n 为Lagrange 插值多项式。

Matlab 实现:
clc;clear;
a=0;b=1;
n=input('Enter a number n:'); %将0-1分割成n 节点,即n-1段 X=zeros(1,n); %用来放置节点x 的值
P=zeros(1,n); %用来放置节点x 对应的函数值y1 Q=zeros(1,n); %用来放置节点x 对应的函数值y2 x=0;
h=(b-a)/(n-1); %h 为步长
for i=1:n
y1=4/(1+x^2);
y2=4*sqrt(1-x^2);
X(i)=x;
P(i)=y1;
Q(i)=y2;
x=x+h;
end
X;P;Q; %通过循环对X、P、Q进行赋值
syms s;
l=1;z1=0;z2=0;
for j=1:1
for k=2:n
l=l*(s-X(k))/(X(j)-X(k));
end
z1=z1+l*P(j);
z2=z2+l*Q(j);
end
for j=2:n
l=1;
for k=1:j-1
l=l*(s-X(k))/(X(j)-X(k));
end
for k=j+1:n
l=l*(s-X(k))/(X(j)-X(k));
end
z1=z1+l*P(j); %通过循环求的函数y1的Lagrange插值多项式z1 z2=z2+l*Q(j); %通过循环求的函数y2的Lagrange插值多项式z2 end
I1=int(z1,s,0,1); % z1对s在0-1上求定积分
I1=eval(I1) %用小数形式表示I1
I2=int(z2,s,0,1); % z2对s在0-1上求定积分
I2=eval(I2) %用小数形式表示I2
x=3.10:0.0001:3.20;
y0=pi;
y1=I1;
y2=I2;
plot(x,y0,'r') %红线为圆周率π的真实值
hold on
plot(x,y1,'g') %绿线为公式1所求值
hold on
plot(x,y2,'b') %蓝线为公式2所求值
运行结果:
从图中可以看出,当n=6时绿线很接近红线即圆周率π的真实值,而蓝线则偏离较远,当n=11时,绿线基本与红线重叠,而蓝线相对之前来说也减小偏差。

通过比较知道公式1比公式2能更好的求得圆周率π的近似值;随着n的增大,即节点数的增加,Lagrange插值多项式积分所求的值也越来越接近圆周率π的真实值,但是同时也会增大它的运算量,故取一个合适的n使得其结果尽量准确又不至于运算量过大。

相关文档
最新文档