Langrage和Newton插值法的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数值实验一(数据的插值运算及其应用完整版)

佛山科学技术学院实 验 报 告课程名称 数值分析 实验项目 插值法与数据拟合 专业班级 机械工程 姓 名 余红杰 学 号 10 指导教师 陈剑 成 绩 日 期 月 日一、实验目的1、学会Lagrange 插值、牛顿插值和三次样条插值等基本插值方法;2、讨论插值的Runge 现象3、学会Matlab 提供的插值函数的使用方法,会用这些函数解决实际问题。
二、实验原理1、拉格朗日插值多项式2、牛顿插值多项式3、三次样条插值 三、实验步骤1、用MATLAB 编写独立的拉格朗日插值多项式函数2、用MATLAB 编写独立的牛顿插值多项式函数3、用MATLAB 编写独立的三次样条函数(边界条件为第一、二种情形)4、已知函数在下列各点的值为:根据步骤1,2,3编好的程序,试分别用4次拉格朗日多项式4()L x 、牛顿插值多项式4()P x 以及三次样条函数()S x (自然边界条件)对数据进行插值,并用图给出 {(,),0.20.08,0,1,2,,10i i i x y x i i =+=},4()L x 、4()P x 和()S x 。
5、在区间[-1,1]上分别取10,20n =用两组等距节点对龙格函数21(),(11)125f x x x=-≤≤+作多项式插值,对不同n 值,分别画出插值函数及()f x 的图形。
6、下列数据点的插值可以得到平方根函数的近似,在区间[0,64]上作图。
(1)用这9个点作8次多项式插值8()L x 。
(2)用三次样条(第一边界条件)程序求()S x 。
7、对于给函数21()125f x x =+在区间[-1,1]上取10.2(0,1,,10)i x i i =-+=,试求3次曲线拟合,试画出拟合曲线并打印出方程,与第5题的结果比较。
四、实验过程与结果:1、Lagrange 插值多项式源代码:function ya=lag(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 ya=0; mu=1; %初始化%循环方式求L 系数,并求和: for i = 1:length(y) for j = 1:length(x) if i ~= jmu = mu * (xa - x(j) ) / ( x(i) - x(j) ); else continue end endya = ya + y(i) * mu ; mu = 1; end2、Newton 源代码:function ya = newton(x,y,xa) %x 所有已知插值点 %y 插值点对应函数值 %xa 所求点,自变量 %ya 所求点插值估计量 %建立系数零矩阵D 及初始化:D = zeros(length(x)-1);ya = y(1);xi = 1;%求出矩阵D,该矩阵第一行为牛顿插值多项式系数:for i=1:(length(x)-1)D(i,1) = (y(i+1) -y(i))/(x(i+1) -x(i));endfor j=2:(length(x)-1)for i=1:(length(x)-j)D(i,j) = (D(i+1,j-1) - D(i,j-1)) / (x(i+j) - x(i)); endend%xi为单个多项式(x-x(1))(x-x(2))...的值for i=1:(length(x)-1)for j=1:ixi = xi*(xa - x(j));endya = ya + D(1,i)*xi;xi = 1;end3、三次样条插值多项式(1)(第一边界条件)源代码:function y=yt1(x0,y0,f_0,f_n,x) _____________(1)%第一类边界条件下三次样条插值;%xi 所求点;%yi 所求点函数值;%x 已知插值点;%y 已知插值点函数值;%f_0左端点一次导数值;%f_n右端点一次导数值;n = length(x0);z = length(y0);h = zeros(n-1,1);k=zeros(n-2,1);l=zeros(n-2,1);S=2*eye(n);for i=1:n-1h(i)= x0(i+1)-x0(i);endfor i=1:n-2k(i)= h(i+1)/(h(i+1)+h(i));l(i)= 1-k(i);end%对于第一种边界条件:k = [1;k]; _______________________(2)l = [l;1]; _______________________(3)%构建系数矩阵S:for i = 1:n-1S(i,i+1) = k(i);S(i+1,i) = l(i);end%建立均差表:F=zeros(n-1,2);for i = 1:n-1F(i,1) = (y0(i+1)-y0(i))/(x0(i+1)-x0(i));endD = zeros(n-2,1);for i = 1:n-2F(i,2) = (F(i+1,1)-F(i,1))/(x0(i+2)-x0(i));D(i,1) = 6 * F(i,2);end%构建函数D:d0 = 6*(F(1,2)-f_0)/h(1); ___________(4)dn = 6*(f_n-F(n-1,2))/h(n-1); ___________(5)D = [d0;D;dn]; ______________(6)m= S\D;%寻找x所在位置,并求出对应插值:for i = 1:length(x)for j = 1:n-1if (x(i)<=x0(j+1))&(x(i)>=x0(j))y(i) =( m(j)*(x0(j+1)-x(i))^3)/(6*h(j))+...(m(j+1)*(x(i)-x0(j))^3)/(6*h(j))+...(y0(j)-(m(j)*h(j)^2)/6)*(x0(j+1)-x(i))/h(j)+... (y0(j+1)-(m(j+1)*h(j)^2)/6)*(x(i)-x0(j))/h(j) ; break;else continue;endendend(2)(自然边界条件)源代码:仅仅需要对上面部分标注的位置做如下修改:__(1):function y=yt2(x0,y0,x)__(2):k=[0;k]__(3):l=[l;0]__(4)+(5):删除—(6):D=[0:D:0]4、——————————————PS:另建了一个f方程文件,后面有一题也有用到。
2、拉格朗日插值的matlab实现

2、拉格朗日插值实例:根据下面的数据点求出其拉格朗日插值格式,并计算当x=1.6时y的值。
x 0 0.5 1.0 1.5 2.0 2.5 3.0y 0 0.4794 0.8145 0.9975 0.9093 0.5985 0.1411function[f,f0]=Language(x,y,x0)%求已知数据点的拉格朗日插值多项式%已知数据点的x坐标向量:x%已知数据点的y坐标向量:y%插值点的x坐标:x0%求得的拉格朗日插值多项式:f%x0处的插值:f0symst;if(length(x)==length(y))n=length(x);elsedisp('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;for(j=i+1:n)l=l*(t-x(j))/(x(i)-x(j));%计算拉格朗日基函数end;f=f+l;%计算拉格朗日插值函数simplify(f);%化简endf0=subs(f,'t',x0);%计算插值点的函数值运行程序;x=0:0.5:3;y=[00.47940.84150.99750.90930.59850.1411];[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)f0=仅供个人学习参考0.9996仅供个人学习参考。
用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)方法是一种在工程上应用广泛的高精度单步算法。
插值法-牛顿插值_拉格朗日插值

牛顿插值_拉格朗日插值#include<stdio.h>#include"math.h"double fun1(double x){ double f;if(x==0)f=4.0;elsef=4/(pow(x,2)+1);return f;}fun(double a,double b,double h,double n){double x1;double sum=0.0;int i;sum+=(fun1(a)+fun1(b));for(i=1;i<=n-1;i++){x1=a+i*h;sum+=(2*fun1(x1));}sum*=(h/2);printf("用复合梯形公式求得的积分为:\n");printf("%lf\n",sum);}void main(){double a,b,n;double h;double t;printf("请输入积分上限与积分下限:\n");scanf("%lf%lf",&a,&b);printf("请输入把此区间n等分的n:\n");scanf("%lf",&n);t=b-a;h=t/n;fun(a,b,h,n);}#include<stdio.h>#include"math.h"double fun1(double x){double f;if(x==0)f=4;elsef=4/(pow(x,2)+1);return f;}fun(double a,double b,double h,double n) {double x1,x2;double sum=0.0;int i;sum+=(fun1(a)+fun1(b));for(i=1;i<=n-1;i++){x1=a+i*h;sum+=(2*fun1(x1));}for(i=0;i<=n-1;i++){x2=a+i*h+0.5*h;sum+=(4*fun1(x2));}sum=sum*(h/6);printf("%lf\n",sum);}void main(){double a,b,n;double h;double t;printf("请输入积分上限与积分下限:\n");scanf("%lf%lf",&a,&b);printf("请输入把此区间n等分的n:\n");scanf("%lf",&n);t=b-a;h=t/n;fun(a,b,h,n);}(2,4)拉格朗日#include <stdio.h>#include <stdlib.h>#include <math.h>int main(){float a[12]={0,-5,-4,-3,-2,-1,0,1,2,3,4,5}; //表示x的取值float b[12]; //表示函数y=5/1+pow(x,2)的值for(int i=1;i<12;i++){b[i]=(float)(5/(1+pow(a[i],2)));}printf("\n");float c,temp1,temp2,T,y[12];do{scanf("%f",&c);for( i=1;i<12;i++){temp1=1;temp2=1;for(int j=1;j<11;j++){if(i!=j){temp1*=(c-a[j]);temp2*=(a[i]-a[j]);}}y[i]=(float)temp1/temp2;}T=0;for( i=1;i<12;i++)T+=y[i]*b[i];printf("%f %f\n",T,(float)5/(1+pow(c,2)));}while(1);return 0;}newton#include <stdio.h>#include <math.h>int main(){float a[11][12];//对第一列和第二列赋值for(int i=0;i<11;i++){scanf("%f",&a[i][0]);a[i][1]=a[i][0]/(1+pow(a[i][0],4));}//对每阶求均差for(int j=2;j<12;j++){int n=0;for(i=j-1;i<11;i++){a[i][j]=(a[i-1][j-1]-a[i][j-1])/(a[n][0]-a[n+1+j-2][0]);n++;}}float y1,y2,m,y;do{scanf("%f",&m);y1=a[0][1]+a[1][2]*(m+5)+a[2][3]*(m+4)*(m+5)+a[3][4]*(m+3)*(m+4)*(m+5)+a[4][5]*(m+2)*(m+ 3)*(m+4)*(m+5)+a[5][6]*(m+1)*(m+2)*(m+3)*(m+4)*(m+5)+a[6][7]*(m)*(m+1)*(m+2)*(m+3)*( m+4)*(m+5);y2=a[7][8]*(m-1)*(m)*(m+1)*(m+2)*(m+3)*(m+4)*(m+5)+a[8][9]*(m-2)*(m-1)*(m)*(m+1)*(m+2 )*(m+3)*(m+4)*(m+5)+a[9][10]*(m-3)*(m-2)*(m-1)*(m)*(m+1)*(m+2)*(m+3)*(m+4)*(m+5)+a[1 0][11]*(m-4)*(m-3)*(m-2)*(m-1)*(m)*(m+1)*(m+2)*(m+3)*(m+4)*(m+5)+a[11][12]*(m-5)*(m-4) *(m-3)*(m-2)*(m-1)*(m)*(m+1)*(m+2)*(m+3)*(m+4)*(m+5);y=y1+y2;printf("%f %f\n",y,m/(1+pow(m,4)));}while(1);return 0;}。
Lagrange 插值多项式与Newton插值

专业序号姓名日期实验1Lagrange 插值多项式【实验目的】1.掌握用MATLAB计算拉格朗日插值方法,改变节点的数目,对插值结果进行初步分析;2.掌握用MATLAB的插值方法并通过实例学习用插值解决实际问题。
3. 观察Runge现象的演示。
【实验内容】Lagrange 插值多项式按照 P74 图4-4 的方法编 Lagrange 插值多项式function y = mylagpoly(X,Y,x)X,Y 采样点x 自变量(向量)y 多项式的函数值要特别注意大小写,x,y 和 t 都是向量【程序如下】:% exp4_2.m --- Runge现象的演示(内含 L 和 N 插值多项式)function try_Runge% 见 P84f = inline('1./(1+25*x.^2)'); % 定义函数n = 11;X = linspace(-1,1,n); % n 等分( n+1 个点),插值点横坐标Y = f(X); % 插值点纵坐标x = -1 : 0.01 : 1; % 加细 xy = mylagpoly(X,Y,x)plot(x,f(x),'r',X,Y,'o',x,y,'b')title('Runge现象') % 加标题legend('y=1/(1+25*x^2)','插值点 ','等分的10次插值多项式',0) % 加标签function y = mylagpoly(X,Y,x)n = length(X);y = zeros(size(x));for i = 1:nt=1;for j = 1:nif j ~= it = t.*((x-X(j))/(X(i)-X(j))); % 注意这里是点乘,字母与书上不同,此时t变成向量了endendy=y+ t.*Y(i);end【运行结果如下】:【结果分析】:拉格朗日插值实验通过离散的点来构造一个函数来逼近原来的函数,理论上应该是点越多,构造函数应该会越来越逼近原函数,但是却发生了Range现象,所以在利用拉格朗日插值法来构造函数来逼近原函数时,应该选择适当的点来逼近原函数,但即使如此,依然不能有效的避免Range现象。
matlab计算方法实验报告3(插值问题)

-2
-1
0
1
2
3
f(x)
-5
1
1
1
7
25
拉格朗日插值法结果:>> chazhi_lage(a,b,1.2)
ans = 1.52800000000000
牛顿插值法结果:>> chazhi_newton(a,b,1.2)
ans = 1.52800000000000
2.已知:√100=10,√121=11,√144=12,分别用拉格朗日和牛顿插值法求√115的近似值。
计算方法实验报告(3)
学生姓名
杨贤邦
学号
指导教师
吴明芬
实验时间
2014.4.9
地点
综合实验大楼203
实验题目
插值方法
实验目的
掌握拉格朗日、牛顿插值法的算法思想;
根据相关数据,用Matlab或C现实拉格朗日、牛顿插值法
实验内容
拉格朗日、牛顿插值法及其Matlab实现;
题目由同学从学习材料中任意选两题。
拉格朗日插值法结果:>> chazhi_lage(x,y,115)
ans =10.72275550536420
牛顿插值法结果:>> chazhi_newton(x,y,115)
ans =10.72275550536420
有上述实验结果分析,无论用拉格朗日或者牛顿的插值法计算出来的结果都是一样的,这是可以理解的,毕竟这两种方法都是通过构造n次插值多项式求得。区别是牛顿插值是一种具有递推性质的插值公式,即公式不用依赖于全部插值节点。当这种递推形式无疑使编程实现的难度高于拉格朗日插值,而且个人还觉得这种算法的时间复杂度比拉格朗日插值法要高。
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实现

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];
Runge现象的演示(内含L和N插值多项式)

实验4_2 Runge现象的演示(内含L 和N 插值多项式)【实验目的】1、了解并掌握matlab软件的基本应用方法;2、初步了解matlab中部分函数,熟悉循环语句的使用;3、通过上机进一步掌握Lagrange插值多项式的建立。
【实验内容】(1)【实验一】 Lagrange 插值多项式(1)首先把本程序另存为一个不同的文件名;(2)把下面程序中开头的注释去掉,再把问号填写正确;.(2)【实验二】Newton 插值多项式对于Newton插值多项式,可以不计算差分表(矩阵),而直接计算差分表中的对角元(实际上只用到这些值),这样就能大大减少储存空间,P79 图4-5 就是这种方法, 请你证明图中y(k)就是差分表的对角元,并注意后半部分就是Horner 算法. 按此法编程【解】:手工分析怎样求解这题。
【计算机求解】:怎样设计程序?流程图?变量说明?能否将某算法设计成具有形式参数的函数形式?【实验一】Lagrange 插值多项式【程序如下】:function y=lagrange(X,Y,x);n=length(X);m=length(x);for i=1:mz=x(i);s=0.0;for k=1:nt=1.0;for j=1:nif j~=kt=t*(z-X(j))/(X(k)-X(j));endends=t*Y(k)+s;endy(i)=s;endf = inline('1./(1+25*x.^2)');n = 30;X = linspace(-1,1,n);Y = f(X);x = -1 : 0.01 : 1;y=lagrange(X,Y,x);plot(x,f(x),'r',X,Y,'o',x,y,'b')title('Runge现象')legend('y=1/(1+25*x^2)','插值点','等分的30次插值多项式',0) 【运行结果如下】将n改为50次,得到下面图像:【结果分析】通过实验,可以更直观的将插值的结果展现出来,同时还能发现格式插值的弊端。
插值法的程序实现

插值法的程序实现一实验目的1.熟悉Matlab编程;2.学习插值方法及程序设计算法二实验题目分别用拉格朗日插值、牛顿插值、自然样条函数对1910、1965、2002的人口进行估算。
三实验原理与理论基础1.拉格朗日插值算法设计①利用已知条件得到xi,yi,i=0,1,2,…②由Lk(x)=((x-x0)*…*(x-x(k-1))*(x-x(k+1))…(x-xn))/ ((xk-x0)*…*(xk-x(k-1))*(xk-x(k+1))…(xk-xn))得出Li(x);③由Y=y1* L1(x)+…+yn*Ln(x)得出Y关于x的表达式。
④带值计算即可。
2.牛顿插值算法设计①利用已知条件得到xi,yi,i=0,1,2,…②利用差商公式f[x0,…xk]=(f[x0,…,x(k-2),xk]-f[x0,…,x(k-1)])/(xk-x(k-1))各阶差商。
③利用牛顿插值公式f(x)=f(x0)-f[x0,x1]*(x-x0)+…f[x0,x1,…xn]*(x-x0)*…(x-x(n-1)).④带值计算即可。
3.自然样条函数算法设计①利用已知条件得到xi,yi,i=0,1,2,…②利用公式求出h(i) u(i) k(i);di;③利用h(i) u(i) k(i);di解出向量M;④将相关变量带入自然样条表达式中即可。
⑤带值计算即可。
四实验内容(一)问题重述:下面给出美国从1920年到1970年的人口表:2002年的人口。
在1910年的实际人口约为91772000,请判断插值计算得到的1965年和2002年的人口数据准确性是多少?2用牛顿插值估计:(1)1965年的人口数;(2)2002年的人口数。
3用自然样条函数估计在1910,1965和2002年的人口数。
请比较以上三种方法所求值的效果。
那一种方法最优?(二)实验代码:1.①用matlab编写的拉格朗日插值M文件如下:function [m,y]=cz5(x)y1=105711;y2=123203;y3=131669;y4=150697;y5=179323;y6=203212;x1=1920; x2=1930; x3=1940; x4=1950; x5=1960; x6=1970;a1=((x-x2)*(x-x3)*(x-x4)*(x-x5)*(x-x6))/((x1-x2)*(x1-x3)*(x1-x4)*(x1-x5)*(x1-x6)); a2=((x-x1)*(x-x3)*(x-x4)*(x-x5)*(x-x6))/((x2-x1)*(x2-x3)*(x2-x4)*(x2-x5)*(x2-x6)); a3=((x-x1)*(x-x2)*(x-x4)*(x-x5)*(x-x6))/((x3-x1)*(x3-x2)*(x3-x4)*(x3-x5)*(x3-x6)); a4=((x-x1)*(x-x2)*(x-x3)*(x-x5)*(x-x6))/((x4-x1)*(x4-x2)*(x4-x3)*(x4-x5)*(x4-x6)); a5=((x-x2)*(x-x3)*(x-x4)*(x-x1)*(x-x6))/((x5-x1)*(x5-x3)*(x5-x2)*(x5-x4)*(x5-x6));a6=((x-x2)*(x-x3)*(x-x4)*(x-x5)*(x-x1))/((x6-x1)*(x6-x2)*(x6-x3)*(x6-x4)*(x6-x5));'实际值大约为:'y=y1*a1+y2*a2+y3*a3+y4*a4+y5*a5+y6*a6;if x==1910m=91772;'估计值大约为:'elsem=(91772-31872)/31872*y+y;'估计值大约为:'End②用c++编写程序如下:#include<iostream.h>#include<stdlib.h>#include<stdio.h>#include<math.h>double H(double x,double a,double p[6]) //求得插值基函数{double h=1.0,f=1.0;for(int i=0;i<6;i++){if(fabs(a-p[i])<0.000001)continue;h*=(x-p[i]); //利用累乘求得插值基函数的分子部分f*=(a-p[i]); //利用累乘求得插值基函数的分母部分}return h/f;}double L(double x,double p[6],double q[6])//求得拉格朗日插值多项式代入x取值时的函数值{double L=0;for(int i=0;i<6;i++){if(fabs(x-p[i])<0.000001)return p[i];L+=q[i]*H(x,p[i],p);// 利用累加实现L=∑(yi*∏[(x-xj)/(xi-xj)])}return L;}void N(double q[6],double f[6][5]){double l=1.0,h=0.0;for(int i=0;i<6;i++){f[i][0]=q[i];}for( i=1;i<6;i++){for(int j=1;j<6;j++)for(int k=0;k<=j;k++);}}double Lagrange(double x,double p[6],double q[6]){return L(x,p,q);}void main(){int i;double x[6],y[6],l=1.0,h=1.0;double f[6][5];cout<<"请输入x的取值:"<<endl;for(i=0;i<6;i++)cin>>x[i];cout<<"请依次输入x对应的y的取值:"<<endl;for(i=0;i<6;i++)cin>>y[i];cout<<"Lagrange多插值项式:"<<endl;cout<<"L=∑(yi*∏[(x-xj)/(xi-xj)]),其中(i=0,1,2,3,4,5;j=0,1,2,3,4,5;j≠i)"<<endl;cout<<endl;cout<<"Lagrange插值多项式在1910,1965,2002处的函数值:"<<endl;cout<<"当x值为1910时"<<Lagrange(1910,x,y)<<endl;cout<<"当x值为1965时"<<Lagrange(1965,x,y)<<endl;cout<<"当x值为2002时"<<Lagrange(2002,x,y)<<endl;cout<<endl;}2.用matlab编写的牛顿插值M文件如下:function [y]=niuden5(x)y1=[105711 123203 131669 150697 179323 203212];x0=[1920 1930 1940 1950 1960 1970];for i=2:6y2(i)=(y1(1)-y1(i))/(x0(1)-x0(i));endfor i=3:6y3(i)=(y2(2)-y2(i))/(x0(2)-x0(i));endfor i=4:6y4(i)=(y3(3)-y3(i))/(x0(3)-x0(i));endfor i=5:6y5(i)=(y4(4)-y4(i))/(x0(4)-x0(i));endy6(6)=(y5(5)-y5(6))/(x0(5)-x0(6));y=y1(1)+y2(2)*(x-x0(1))+y3(3)*(x-x0(1))*(x-x0(2))+y4(4)*(x-x0(1))*(x-x0(2))*(x-x0(3))+y5(5)*(x-x0(1))*(x-x0(2))*(x-x0(3))*(x-x0(4))+y6(6)*(x-x0(1))*(x-x0(2))*(x-x0(3))*(x-x0(4))*(x-x0(5));3.用matlab编写的自然样条函数M文件如下:function []=yangtiaochazhi(x)y1=[105711 123203 131669 150697 179323 203212];x0=[1920 1930 1940 1950 1960 1970];for i=1:5h(i)=x0(i+1)-x0(i);endfor i=1:4u(i)=h(i)/(h(i)+h(i+1));endu(5)=0;k(1)=0;for i=2:5k(i)=h(i)/(h(i-1)+h(i));endd(1)=0;d(6)=0;for i=2:3y21(i)=(y1(1)-y1(i))/(x0(1)-x0(i));endfor i=3:4y22(i)=(y1(2)-y1(i))/(x0(2)-x0(i));endfor i=4:5y23(i)=(y1(3)-y1(i))/(x0(3)-x0(i));endfor i=5:6y24(i)=(y1(4)-y1(i))/(x0(4)-x0(i));endd(1)=0;d(6)=0;d(2)=(y21(2)-y21(3))/(x0(2)-x0(3));d(3)=(y22(3)-y22(4))/(x0(3)-x0(4));d(4)=(y23(4)-y23(5))/(x0(4)-x0(5));d(5)=(y24(5)-y24(6))/(x0(5)-x0(6));A=[2 k(1) 0 0 0 0;u(1) 2 k(2) 0 0 0;0 u(2) 2 k(3) 0 0;0 0 u(3) 2 k(4) 0;0 0 0 u(4)2 k(5);0 0 0 0 u(5) 2];B=[d(1);d(2);d(3);d(4);d(5);d(6)];M=[];M=A\B;echoif x<=1930y=M(1)*((x0(2)-x)*(x0(2)-x)*(x0(2)-x))/(6*h(1))+M(2)*((x-x0(1))*(x-x0(1))*(x-x0(1)) )/(6*h(1))+(y1(1)-(M(1)*h(1)*h(1))/6)*((x0(2)-x)/h(1))+(y1(2)-(M(2)*h(1)*h(1))/6)*( (x-x0(1))/h(1));elseif x<=1940y=M(2)*((x0(3)-x)*(x0(3)-x)*(x0(3)-x))/(6*h(2))+M(3)*((x-x0(2))*(x-x0(2))*(x-x0(2)) )/(6*h(2))+(y1(2)-(M(2)*h(2)*h(2))/6)*((x0(3)-x)/h(2))+(y1(3)-(M(3)*h(2)*h(2))/6)*( (x-x0(2))/h(2));elseif x<=1950y=M(3)*((x0(4)-x)*(x0(4)-x)*(x0(4)-x))/(6*h(3))+M(4)*((x-x0(3))*(x-x0(3))*(x-x0(3)) )/(6*h(3))+(y1(3)-(M(3)*h(3)*h(3))/6)*((x0(4)-x)/h(3))+(y1(4)-(M(4)*h(3)*h(3))/6)*( (x-x0(3))/h(3));elseif x<=1960y=M(4)*((x0(5)-x)*(x0(5)-x)*(x0(5)-x))/(6*h(4))+M(5)*((x-x0(4))*(x-x0(4))*(x-x0(4)) )/(6*h(4))+(y1(4)-(M(4)*h(4)*h(4))/6)*((x0(5)-x)/h(4))+(y1(5)-(M(5)*h(4)*h(4))/6)*( (x-x0(4))/h(4));elsey=M(5)*((x0(6)-x)*(x0(6)-x)*(x0(6)-x))/(6*h(5))+M(6)*((x-x0(5))*(x-x0(5))*(x-x0(5)) )/(6*h(5))+(y1(5)-(M(5)*h(5)*h(5))/6)*((x0(6)-x)/h(5))+(y1(6)-(M(6)*h(5)*h(5))/6)*( (x-x0(5))/h(5));endy五实验结果1. ①5次拉格朗日插值在matlab命令窗口中输入如下代码:>>[m,y]=cz5(1910)>>[m,y]=cz5(1965)>>[m,y]=cz5(2002)结果为:ans =实际值大约为:ans =估计值大约为:m =91772y =31872ans =实际值大约为:ans =估计值大约为:m =5.559574703016167e+005y =1.930815117187500e+005ans =实际值大约为:ans =估计值大约为:m =7.526371798548073e+004y =2.613874841600098e+004②c++中的运行:请输入x的取值:192019301940195019601970请依次输入x对应的y的取值:105711123203131669150697179323203212Lagrange多插值项式:L=∑(yi*∏[(x-xj)/(xi-xj)]),其中(i=0,1,2,3,4,5;j=0,1,2,3,4,5;j≠i)Lagrange插值多项式在1910,1965,2002处的函数值:当x值为1910时31872当x值为1965时193082当x值为2002时26138.72. 牛顿插值在matlab命令窗口中输入如下代码:>>niuden5(1965),niuden5(2002)----------------------------------------------------------------------------------------------------------------- 结果为:ans =1.930815117187500e+005ans =2.613874841600133e+0043. 样条插值在matlab命令窗口中输入如下代码:>> yangtiaochazhi(1965),yangtiaochazhi(2002)结果为:y =1.913745478468899e+005y =2.880973086315789e+005六实验结果分析与小结1. 5次拉格朗日插值与牛顿插值在估计人口时比较接近,但与真实值比起来误差较大,而用样条插值在区间内部估值比较准确,但在区间外估值误差相对较大哦。
matlab 拉格朗日插值法和牛顿插值法 -回复

matlab 拉格朗日插值法和牛顿插值法-回复问题:matlab中的拉格朗日插值法和牛顿插值法是什么?如何实现?引言:插值法是一种数值分析技术,用于找出一系列已知数据点之间的未知数据点的近似值。
在实际应用中,我们常常需要根据有限个离散数据点来推断出连续函数的性质,这就是插值的问题。
拉格朗日插值法和牛顿插值法是常用的插值方法之一,本文将一步一步地介绍这两种方法的原理及其在Matlab中的实现过程。
一、拉格朗日插值法拉格朗日插值法是通过一个多项式来逼近一组已知数据点,然后利用该多项式求解未知位置的近似值。
拉格朗日插值法的主要思想是利用Lagrange插值多项式来拟合给定的数据,具体步骤如下:1. 根据已知数据点的个数n,构造n次拉格朗日插值多项式。
多项式的一般形式如下:来拟合给定的数据,具体步骤如下:1. 根据已知数据点的个数n,构造n次牛顿插值多项式。
多项式的一般形式如下:
数值分析课程实验报告
2012—2013学年度第二学期
系别:数学与计算机科学学院
实验课程
数值分析
班级
10级数学与应用数学2班
fori =1:n
y =y0(i) * l(i) + y;
end
牛顿插值
function[c, d]=newpoly(x, y)
n=length(x);
d=zeros(n, n);
d(:,1)=y';
forj=2 : n
fork=j : n
d(k, j)=(d(k, j-1) - d(k-1, j-1)) / (x(k)-x(k-j+1));
学号
39姓名Biblioteka 指导教师实验题目拉格朗日和牛顿插值
日期
2013年3月27日
实验原理
实验内容及具体步骤:
一、试验环境
计算机MATLAB软件
二、实验目的
1.熟悉启动和退出MATLAB的方法。
2.熟悉MATLAB命令窗口的组成。
3.掌握函数文件的建立及调用。
三、实验内容
四、试验步骤
functiony = lagrange(x0,y0,x)
end
end
c =d(n, n);
fork=(n-1) : - 1 : 1
c =conv(c, poly(x(k)));
m=length(c);
c(m)=c(m)+d(k, k);
end
五、练习
第二章 插值法及其matlab实现 (1)-文档资料

主讲教师:牛晓颖
河北大学质监学院
第二章 插值(Interpolati物之间的数量关系:函数。 有两种情况: 一是表格形式——一组离散的数据来表示函数关系;另 一种是函数虽然有明显的表达式,但很复杂,不便于研究和 使用。 从实际需要出发:对于计算结果允许有一定的误差,可 以把函数关系用一个简单的便于计算和处理的近似表达式来 代替,从而使问题得到简化。 插值法就是一种基本方法 一般地,构造某种简单函数代替原来函数。
(x - xj ) li (x) = (xi - xj ) ji
n j=0
L ) = li (x )y n(x i
i= 0
n
与 节点 有关,而与 f 无关
拉格朗日 多项式
定理
(唯一性) 满足 P 的 n 阶插值 ( x ) = y = 0 , ... , n i i,i
L ) = li (x )y n(x i
然而,方程组的求解也并不是一件容易的事。
对于线性插值的两种形式解进行适当的分析, 从中寻求 规律而得到启发,就有了所谓的拉格朗日插值法(公式)和牛 顿插值(公式).
我们先来看看如何得到二次拉格朗日插值公式。
1.2.2 基函数法 首先, 线性插值的两点式可看作是两个特殊的一次式 的一种线性组合. 1 x - x0 x - x1 y0 + y1 = l i ( x ) y i 两点式 P1 ( x ) =
1 l0(x)= 0(x -x1)(x -x2), 0= (x0-x1)(x0-x2) 同理可得 1 l1(x)= 1(x -x0)(x -x2), 1= (x1-x0)(x1-x2) 1 l2(x)= 2(x -x0)(x -x1), 2= (x2-x0)(x2-x1) (x -x0)(x -x1) (x -x0)(x -x2) P2(x)= y0 + y1 + y2 (x0-x1)(x0-x2) (x2-x0)(x2-x1) (x1-x0)(x1-x2) 此即二次拉格朗日插值公式, 其中, l0(x), l1(x), l2(x)是满足 (2.1)的特殊(基本)二次插值多项式;称为二次插值基函数. (x -x1)(x -x2)
拉格朗日差值、牛顿插值以及三次样条插值的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" 函数结合牛顿插值法来进行插值计算。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
仅供参考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 现象、分析插值多项式的收敛性。
取三个节点如下clearclcx0=0:0.5:1;y0=1./(1+25.*x0.^2);syms xfor i=1:3a=1;for j=1:3if j~=ia=expand(a*(x-x0(j)));endendb=1;for k=1:3if k~=ib=b*(x0(i)-x0(k));endendA(i)=expand(a/b);endL=0;for p=1:3L=L+y0(p)*A(p);endLL =575/377*x^2-1875/754*x+1x1=0:0.0001:1;y1=1./(1+25.*x1.^2);y2=575/377.*x1.^2-1875/754.*x1+1; plot(x1,y1,'+r')hold onplot(x1,y2,'*k')取五个节点如下clearclcx0=0:0.25:1;y0=1./(1+25.*x0.^2);syms xfor 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 =1570000/3725137*x^4-9375000/3725137*x^3+16996575/3725137*x^2-25546875 /7450274*x+1x1=0:0.0001:1;y1=1./(1+25.*x1.^2);y2=1570000/3725137.*x1.^4-9375000/3725137.*x1.^3+16996575/3725137.*x1 .^2-25546875/7450274.*x1+1 ;plot(x1,y1,'+r')hold onplot(x1,y2,'*k')取九个节点clearclcx0=0:0.125:1;y0=1./(1+25.*x0.^2);syms xfor i=1:9a=1;for j=1:9if j~=ia=expand(a*(x-x0(j))); endendb=1;for k=1:9if k~=ib=b*(x0(i)-x0(k));endendA(i)=expand(a/b);endL=0;for p=1:9L=L+y0(p)*A(p);endLL =-745631513600000000/6545742033698309*x^8+3419841600000000000/65457420 33698309*x^7-6621592639456000000/6545742033698309*x^6+701929935000000 0000/6545742033698309*x^5-4393156359065510000/6545742033698309*x^4+16 03771386328125000/6545742033698309*x^3-22515465371294825/503518617976 793*x^2+7750485791015625/13091484067396618*x+1x1=0:0.0001:1;y1=1./(1+25.*x1.^2);y2=-745631513600000000/6545742033698309.*x1.^8+3419841600000000000/65 45742033698309.*x1.^7-6621592639456000000/6545742033698309.*x1.^6+701 9299350000000000/6545742033698309.*x1.^5-4393156359065510000/65457420 33698309.*x1.^4+1603771386328125000/6545742033698309.*x1.^3-225154653 71294825/503518617976793.*x1.^2+7750485791015625/13091484067396618.*x 1+1;plot(x1,y1,'--r')hold onplot(x1,y2,'k')取十一个节点clearclcx0=0:0.1:1;y0=1./(1+25.*x0.^2);syms xfor i=1:11a=1;for j=1:11if j~=ia=expand(a*(x-x0(j)));endendb=1;for k=1:11if k~=ib=b*(x0(i)-x0(k));endendA(i)=expand(a/b);endL=0;for p=1:11L=L+y0(p)*A(p);endLL =-34246599899961879527652554108472435783737151791529333342439890764194 138662212746796134934947111446834934981225775592089458363348770912339 65270312991850496/531784334364368541121377512346039689020405192055863 792565017448202828956543207958970636868736188852138716814254794627774 04544150039401268463093187392345*x^10+1210861925034397303974825235208 856641321245395988383400510933809608933943070109804041433585075703890 43992652515804277667665850493797050376702379508889550848/265892167182 184270560688756173019844510202596027931896282508724101414478271603979 485318434368094426069358407127397313887022720750197006342315465936961 725*x^9-1866684313118720862370761857357873725727309899525470177959305 327610184009984336016654604586537474647225602036909009509629462337871 679343044326927998528782336/13294608359109213528034437808650992225510 129801396594814125436205070723913580198974265921718404721303467920356 36986569435113603750985031711577329684808625*x^8+23611807538171574906 011643599849452960817408616824406084205963728265391951073294139482618 65424198108462767092910060184301539989010355832103758391330174140416/ 949614882793515252002459843475070873250723557242613915294674014647908 850970014212447565837028908664533422882597847549596509716964989308365 412378346291875*x^7-4578860481690066161293496219231309353157185777675 91109706724078596021810685953146111998069361124151268468324505592802944898398657172353734910039192768610304/163726703929916422759044800599 150150560469578834933433671495519766880836374140381456476868453260114 574728083206525439585605123614653329028519375576946875*x^6+1208896240 091227004014649292653180932095752199938547766467634306558831845101356 610875428494980896176123816882698391104104739378941637827301445624516 9422336/5817292837500093432997181104355984276223496430057669169901213 027737741062055955724378619437814926883934224960780737255553232767489 520389398507586046875*x^5-9426742531077361259963874032262920859571499 090962109596557614232718127924658426578037836193059449875770679514969 8078389699551522017848691472848705458783911936/9232366916048064950023 915144896522378826479028747635287587108475743558273319582621018001193 3366120162971669141457400655216222482707293868859536783667265625*x^4+ 337502535313255963451249774988157794349008442554288812868476402072529 386740438292949810847848903190381480351455379945072471021414326937152 58453281704155021312/106527310569785364807968251671882950524920911870 165022549082020873964133922918261011746167615422446341890387470912385 371403333633893031387145619365769921875*x^3-1211158355177464943941661 995806321494372416012729993289144421736931564988847351060533923007000 51676118679651553633528158918481769660983714572459994328070094848/230 809172901201623750597878622413059470661975718690882189677711893588956 832989565525450029833415300407429172853643501638040556206768234672148 8419591681640625*x^2+302715481258614897028208818090865836694936458005 708460532843137494564284294144717946752760785413468650273921187174271 696035438592761935270935490270251188224/32972738985885946250085411231 773294210094567959812983169953958841941279547569937932207147119059328 6296327389790919288054343651723954620960212631370240234375*x+21790216 4370694078464/217902164370694140625x1=0:0.0001:1;y1=1./(1+25.*x1.^2);y2=-34246599899961879527652554108472435783737151791529333342439890764 194138662212746796134934947111446834934981225775592089458363348770912 33965270312991850496/531784334364368541121377512346039689020405192055 863792565017448202828956543207958970636868736188852138716814254794627 77404544150039401268463093187392345.*x1.^10+1210861925034397303974825 235208856641321245395988383400510933809608933943070109804041433585075 70389043992652515804277667665850493797050376702379508889550848/265892 167182184270560688756173019844510202596027931896282508724101414478271 603979485318434368094426069358407127397313887022720750197006342315465 936961725.*x1.^9-1866684313118720862370761857357873725727309899525470 177959305327610184009984336016654604586537474647225602036909009509629 462337871679343044326927998528782336/13294608359109213528034437808650 992225510129801396594814125436205070723913580198974265921718404721303 46792035636986569435113603750985031711577329684808625.*x1.^8+23611807538171574906011643599849452960817408616824406084205963728265391951073 294139482618654241981084627670929100601843015399890103558321037583913 30174140416/949614882793515252002459843475070873250723557242613915294 674014647908850970014212447565837028908664533422882597847549596509716 964989308365412378346291875.*x1.^7-4578860481690066161293496219231309 353157185777675911097067240785960218106859531461119980693611241512684 68324505592802944898398657172353734910039192768610304/163726703929916 422759044800599150150560469578834933433671495519766880836374140381456 476868453260114574728083206525439585605123614653329028519375576946875 .*x1.^6+1208896240091227004014649292653180932095752199938547766467634 306558831845101356610875428494980896176123816882698391104104739378941 6378273014456245169422336/5817292837500093432997181104355984276223496 430057669169901213027737741062055955724378619437814926883934224960780 737255553232767489520389398507586046875.*x1.^5-9426742531077361259963 874032262920859571499090962109596557614232718127924658426578037836193 0594498757706795149698078389699551522017848691472848705458783911936/9 232366916048064950023915144896522378826479028747635287587108475743558 273319582621018001193336612016297166914145740065521622248270729386885 9536783667265625.*x1.^4+337502535313255963451249774988157794349008442 554288812868476402072529386740438292949810847848903190381480351455379 94507247102141432693715258453281704155021312/106527310569785364807968 251671882950524920911870165022549082020873964133922918261011746167615 422446341890387470912385371403333633893031387145619365769921875.*x1.^ 3-1211158355177464943941661995806321494372416012729993289144421736931 564988847351060533923007000516761186796515536335281589184817696609837 14572459994328070094848/230809172901201623750597878622413059470661975 718690882189677711893588956832989565525450029833415300407429172853643 5016380405562067682346721488419591681640625.*x1.^2+302715481258614897 028208818090865836694936458005708460532843137494564284294144717946752 760785413468650273921187174271696035438592761935270935490270251188224 /32972738985885946250085411231773294210094567959812983169953958841941 279547569937932207147119059328629632738979091928805434365172395462096 0212631370240234375.*x1+217902164370694078464/217902164370694140625; plot(x1,y1,'+r')hold onplot(x1,y2,'*k')By 疑似天人。