精华内容
下载资源
问答
  • 拉格朗日插值matlab

    2021-03-16 23:25:31
    拉格朗日插值matlab
  • 拉格朗日插值Matlab

    2013-01-12 12:19:59
    《现代数值计算》同济大学计算数学教研室 书中介绍的拉格朗日插值matlab仿真。
  • 拉格朗日插值 MATLAB源程序代
  • 拉格朗日插值 matlab

    2010-04-10 22:03:22
    拉格朗日插值在很多学科中有应用,此程序是提供另外一种方法计算!
  • 拉格朗日插值 MATLAB源程序代码
  • 拉格朗日插值 MATLAB源程序代码
  • 拉格朗日插值matlab实现,源代码但是调用,自己编辑main,读者可以根据自己要求自行修改 具体参考教材《matlab使用宝典》
  • 拉格朗日插值matlab实现,源代码但是调用,自己编辑main 具体参考教材《matlab使用手册》
  • Matlab实现的二元拉格朗日插值,里面有详细的注释。
  • matlab中只有牛顿插值和三次样条插值,而却没有拉格朗日插值的实现,本人由他处借鉴,与各位高手共享
  • 拉格朗日插值matlab实现

    千次阅读 2019-07-07 21:41:00
    已给sin0.32=0.314567,sin0.34=0.333487,sin0.36=0.352274,用线性插值及抛物插值计算sin0.3367的值并估计截断误差。 1.线性插值 clc;clear; y=sin_L(0.32,0.314567,0.34,0.333487,0.3367); function y=sin_L...

    已给sin0.32=0.314567,sin0.34=0.333487,sin0.36=0.352274,用线性插值及抛物插值计算sin0.3367的值并估计截断误差。

    1. 线性插值

    clc;clear;
    y=sin_L(0.32,0.314567,0.34,0.333487,0.3367);
    function y=sin_L(x0,y0,x1,y1,x)
    % sin_L输出sin(x)使用线性插值计算得到的函数值
    % 例如: y=sin_L(0.32,0.314567,0.34,0.333487,0.3367)
    %       y = 
    %           0.3304
    %       R = 
    %           9.1892e-06
     
    % 以下为判断输入值是否合法的代码
    if nargin~=5 %nargin表示number of function input arguments,判断函数输入参数的个数
        error('请输入一次插值的2个插值节点和待插值点')
    end
    if ~( isnumeric(x0)&&isnumeric(y0)&&isnumeric(x1)&&isnumeric(y1)&&isnumeric(x) ) %isnumeric()检测字符串是否只由数字组成,如果字符串中只包括数字,就返回Ture,否则返回False。
        error('输入参数必须是数')
    end
     
    % 核心计算的代码
    %y=y0+(y1-y0)*(x-x0)/(x1-x0);%已知一次多项式,即直线上两点,可以用点斜式写出直线
    y=y0*(x-x1)/(x0-x1)+y1*(x-x0)/(x1-x0); %两点式
    % 以下为求解截断误差的代码
    syms M2; % 因为sin(x)的二阶导数是本身,所以只需要挑出最大的y值,即可得到M2  %syms函数用于创建符号对象
    if y0>y1
        M2=y0; 
    else
        M2=y1;
    end
    R=M2*abs((x-x0)*(x-x1))/2;
    disp(['插值结果是:y=',num2str(y)]);
    disp(['最大误差是:R=',num2str(R)]);
    end

    2. 抛物插值

    clc;clear;
    %y1=sin_L(0.32,0.314567,0.34,0.333487,0.3367);%一次性插值
    y2=sin_T(0.32,0.314567,0.34,0.333487,0.36,0.352274,0.3367)%二次抛物插值
    function y=sin_L(x0,y0,x1,y1,x)
    % sin_L输出sin(x)使用线性插值计算得到的函数值
    % 例如: y=sin_L(0.32,0.314567,0.34,0.333487,0.3367)
    %       y = 
    %           0.3304
    %       R = 
    %           9.1892e-06
     
    % 以下为判断输入值是否合法的代码
    if nargin~=5 %nargin表示number of function input arguments,判断函数输入参数的个数
        error('请输入一次插值的2个插值节点和待插值点')
    end
    if ~( isnumeric(x0)&&isnumeric(y0)&&isnumeric(x1)&&isnumeric(y1)&&isnumeric(x) ) %isnumeric()检测字符串是否只由数字组成,如果字符串中只包括数字,就返回Ture,否则返回False。
        error('输入参数必须是数')
    end
     
    % 核心计算的代码
    %y=y0+(y1-y0)*(x-x0)/(x1-x0);%已知一次多项式,即直线上两点,可以用点斜式写出直线
    y=y0*(x-x1)/(x0-x1)+y1*(x-x0)/(x1-x0); %两点式
    % 以下为求解截断误差的代码
    syms M2; % 因为sin(x)的二阶导数是本身,所以只需要挑出最大的y值,即可得到M2  %syms函数用于创建符号对象
    if y0>y1
        M2=y0; 
    else
        M2=y1;
    end
    R=M2*abs((x-x0)*(x-x1))/2;
    disp(['插值结果是:y=',num2str(y)]);
    disp(['最大误差是:R=',num2str(R)]);
    end
    
    
    function y=sin_T(x0,y0,x1,y1,x2,y2,x)
    % sin_T输出sin(x)使用抛物插值计算得到的函数值
    % 例如: y=sin_T(0.32,0.314567,0.34,0.333487,0.36,0.352274,0.3367)
    %       y = 
    %           0.3304
    %       R = 
    %           2.0315e-07
     
    % 以下为判断输入值是否合法的代码
    if nargin~=7
        error('请输入线性插值的插值节点和插值点')
    end
    if ~( isnumeric(x0)&&isnumeric(y0)&&isnumeric(x1)&&isnumeric(y1)&&isnumeric(x2)&&isnumeric(y2)&&isnumeric(x) )
        error('输入参数必须是数')
    end
     
    % 核心计算的代码
    y=y0*(x-x1)*(x-x2)/((x0-x1)*(x0-x2))+y1*(x-x0)*(x-x2)/((x1-x0)*(x1-x2))+y2*(x-x0)*(x-x1)/((x2-x0)*(x2-x1));
     
    %{
    % 以下为求解截断误差的代码
    y_0=cos(x0); % 因为sin(x)的三阶导数是cos(x),那么只要求出x0,x1,x2的cos值,然后去最大即可得到M3
    y_1=cos(x1);
    y_2=cos(x2);
    syms M3;
    if y_0>y_1
        M3=y_0;
    else
        M3=y_1;
    end
    if y_2>M3
        M3=y_2;
    end
    R=M3*abs((x-x0)*(x-x1)*(x-x2))/6
    end
    %}
    
    % 以下为求解截断误差的代码
    %sysm M3;
    M3=cos(x0);%因为在第一象限,cosx是减函数,所以节点处的最大值在第一个节点那里取得
    R=M3*abs((x-x0)*(x-x1)*(x-x2))/6
    end

     

    参考来源:https://blog.csdn.net/m0_37395228/article/details/80874393

    五,优点和缺点

      拉格朗日插值法的公式结构整齐紧凑,在理论分析中十分方便,然而在计算中,当插值点增加或减少一个时,所对应的基本多项式就需要全部重新计算,

      于是整个公式都会变化,非常繁琐。这时可以用重心拉格朗日插值法或牛顿插值法来代替。此外,当插值点比较多的时候,拉格朗日插值多项式的次数

      可能会很高,因此具有数值不稳定的特点,也就是说尽管在已知的几个点取到给定的数值,但在附近却会和“实际上”的值之间有很大的偏差

      这类现象也被称为龙格现象,解决的办法是分段用较低次数的插值多项式。(https://www.cnblogs.com/fengzhiyuan/p/8645246.html)

     

    转载于:https://www.cnblogs.com/yibeimingyue/p/11147996.html

    展开全文
  • 这是一个计算拉格朗日插值多项式作为曲线拟合工具的程序。 输入是来自实验的数据点,可以使用拉格朗日插值多项式确定后一点的值。 还返回多项式系数和拟合曲线。
  • 通过lagrange插值函数,实现拉格朗日插值算法
  • 拉格朗日插值
  • 拉格朗日插值法使用MATLAB做的例题》由会员分享,可在线阅读,更多相关《拉格朗日插值法使用MATLAB做的例题(2页珍藏版)》请在人人文库网上搜索。1、一物体廓线数据如下:x035791112131415y01.21.72.02.12.01.81.21...

    《拉格朗日插值法使用MATLAB做的例题》由会员分享,可在线阅读,更多相关《拉格朗日插值法使用MATLAB做的例题(2页珍藏版)》请在人人文库网上搜索。

    1、一物体廓线数据如下:x035791112131415y01.21.72.02.12.01.81.21.01.6用拉格朗日插值法计算x每改变0.5时y的值,即x 取 0.5, 1, 1.5, , 14.5 时对应的y值。程序如下程序运行结果: x=0 3 5 7 9 11 12 13 14 15; y=0 1.2 1.7 2.0 2.1 2.0 1.8 1.2 1.0 1.6; xi=0.5:0.5:14.5; yi=lang(x,y,xi)yi =Columns 1 through 8-15.4117 -15.9238 -10.9898 -5.4272 -1.2253 1.2000 2.1765 2.2666Columns 9 through 161.9894 1.7000 1.5703 1.6249 1.7995 2.0000 2.1477 2.2040Columns 17 through 242.1752 2.1000 2.0269 1.9904 1.9928 2.0000 1.9537 1.8000Columns 25 through 291.5272 1.2000 0.9656 1.0000 1.3480 plot(x,y,b:,xi,yi)运行图。

    展开全文
  • 有关更多详细信息,请参见 ( http://mathworld.wolfram.com/LagrangeInterpolatingPolynomial.html )。 例子: 在我们想要找到 f(x) 的值的地方输入 x 的值:6.6 所需值为 f(6.600000)= 2.81957>>
  • 拉格朗日插值多项式
  • MATLAB实现拉格朗日插值》由会员分享,可在线阅读,更多相关《MATLAB实现拉格朗日插值(14页珍藏版)》请在人人文库网上搜索。1、实用标准文档文案大全数值分析上机报告题目:插值法学号:201014924姓名:靳会有一、...

    《MATLAB实现拉格朗日插值》由会员分享,可在线阅读,更多相关《MATLAB实现拉格朗日插值(14页珍藏版)》请在人人文库网上搜索。

    1、实用标准文档文案大全数值分析上机报告题目:插值法学号:201014924姓名:靳会有一、调用MATLAB内带函数插值1、MATLAB内带插值函数列举如下:interpl interpft interp2 interp3 interpn spline meshgrid ndgrid griddata一维数据内插(查表法) 使用FFT方法的一维数据内插 二维数据内插(查表法) 三维数据内插(查表法) 多维数据内插(查表法) 三次样条内插为三维绘图产生X和Y阵 为多维函数和内插产生阵列 数据网格2、取其中的一维数据内插函数(interpl )为例,程序如下:其调用格式为:yi=interp1(x, 。

    2、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:100 yi=interp1(x,y,xi,spline)3、其他内带函数调用格式为:Interpft 函数:y=interpft(x,n)y=interpft(x,n,dim)interp2 函数:ZI=interp2(X, Y,乙 XI, YI) , ZI=imerp2(Z, ntimes)Zl=interp2(Z,XI, YI) ,ZI=interp2(X, Y, Z, XI, YI,method) int。

    3、erp3 函数: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, 丫2, 丫3,) method)Spline 函数:yi=spline(x,y,xi)pp=spli ne(x,y)meshgrid 函数:X,Y=meshgrid(x,y)X,Y=meshgrid(x)X,Y,Z=meshgr。

    4、id(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, Zl=griddata(x, y, z, xi, yi)=griddata( method)二、自编函数插值1、拉格朗日插值法:建立M文件:fun cti on f = Lan guage(x,y,x0)syms t l;if(len gth(x) = len gth(y)VI=interpn()n = len gth(x);elsedisp(x和y的维数不相等。

    5、!);return;% 检错endh=sym(O);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(n argin = 3)f = subs (h,t,xO); %计算插值点的函数值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。

    6、 46;f=La nguage(x,y)Plot(x,y)结果为:f =I nf + (-t)*I nf - 54329.8*2 + 1503.75*tA3 - 22.2065P4 + 0.16789*tA5-0.000512106*tA6图形如下:MATLAB实现拉格朗日插值建立如下拉格朗日插值函数:fun cti on y=lagra nge(x0,y0,x);n=len gth(x0);m=le ngth(x);for i=1:mz=x(i);s=0.0;for k=1: np=1.0;for j=1: nif j二k p=p*(z-xO(j)/(xO(k)-xO(j);endends=。

    7、p*yO(k)+s;endy(i)=s;end画图程序如下:x=-5:1:5; y=1./(1+x.A2);xO二卜5:0.001:5; y0=lagra nge(x,y,x0); y1=1./(1+xO.A2);plot(x0,y0,r)hold onplot(xO,y1,g)注:画出的图形为n =10的图形得到图形如下:牛顿K次插值多项式一、实验目的:1、掌握牛顿插值法的基本思路和步骤。2、培养编程与上机调试能力。二、牛顿插值法基本思路与计算步骤:给定插值点序列(Xi, f(Xi) ,i 0,1,n,。构造牛顿插值多项式 Nn(u)。输入要计算的函数点X,并计算Nn(x)的值,利用牛顿插值。

    8、公式,当增加一个节点时,只需在后面多计算 一项,而前面的计算仍有用;另一方面Nn(X)的各项系数恰好又是各阶均差,而各阶均差可用均差公式来计算。/(X)一阶均差。/坯X.L斗二丿氐丄 兀牛耳一/1%斗丄兀討/(X)的k阶均差。均差表:Xk零阶均差一阶均差二阶均差三阶均差Xof(Xo)X1f(X1)fXo, X1X2f(X2)fX 1, X2fXo,X1, X2X3f(X3)fX2, X3fX 1, X2 ,X3fX o,X1, X2X3MMMMM牛顿插值法计算步骤:1输入n值及(Xi, f (Xi) ,i0,1,m ;要计算的函数点x。2.对给定的x,由Nn(X) f (Xo) (X Xo) 。

    9、f Xo,X1(X Xo)(X xjf Xo,X1, X2L(X Xo)(X XjL (x Xn 1)fXo,X1L , Xn计算Nn(X)的值。3 输出 Nn(x)。程序清单: functionc, d=n ewpoly(x, y)%牛顿插值的MATLAB实现%这里x为n个节点的横坐标所组成的向量,y为纵坐标所组成的向量。%c为所求的牛顿插值多项式的系数构成的向量。n=length(x);%取 x 的个数。d=zeros(n, n);% 构造nXn的空数组。d(: , 1)=y;for j=2 : nfor k=j : nd(k, j)=(d(k, j-1) - d(k-1, j-1) / 。

    10、(x(k)-x(k-j+1);endendc =d( n, n);for k=(n-1): - 1 : 1c =conv(c, poly(x(k);% conv 求积,poly(x)将该多项式的系数赋给向量。 m=le ngth(c);c(m)=c(m)+d(k, k);end五、测试数据与结果:测试数据:(第三章习题第三题第 2题)f(x)=lnx的数值如表所示,构造牛顿插值多项式并求ln0.53的值。X0.40.50.60.70.8In-0.91-0.69-0.5108-0.3577-0.22314x6291314726654解:由表可知 X0=0.4, x 1=0.5, x 2=0.6,。

    11、 x 3=0.7, x 4=0.7,函数值:Y0=-0.916291,y1=-0.693147,y2=-0.510826,y3=-0.357765,y4=-0.223144建立一个主程序 n p.m clcclearn ewpoly(0.4,0.5,0.6,0.7,0.8, -0.916291, -0.693147, -0.510826, -0.357765,-0.223144)计算结果如下:ans =-0.30962.6083-5.48615.6921-2.4744由此看出所求的牛顿多项式为:P(x)= -0.3096X4+2.6083x 3-5.4861x 2+5.6921x-2.4744P(0.53)= -0.6347。

    展开全文
  • 代码 #include <stdio.h> #include "math.h" #define Max_N 20 float lagrange(float x[],float y[],float xx,int n) { int i,j; float l,L; L=0.0; for(i=0;i;i++) { l=1.0; for(j=0;j;j++) { if(j!...
  • 拉格朗日插值matlab

    2012-02-08 13:45:34
    拉格朗日插值matlab的m文件,里面有调用示例,可以直接调用。
  • 拉格朗日插值多项式拟合一组点 LAGRANG(X,Y,N,XX) 其中 X 和 Y 是定义一组 N 个点的行向量,使用拉格朗日方法在 X 中找到通过这些点的 N 阶多项式。
  • 此 mfile 仅适用于矩形点集。 它首先在 x 方向执行拉格朗日插值,然后在这些 xCurves 上的点在 y 方向插值。
  • 仅提供 X 和 Y 值
  • matlab语言编写的拉格朗日插值程序,可用于数值计算中
  • matlab拉格朗日插值

    2021-03-29 09:43:52
    matlab拉格朗日插值
  • 拉格朗日曲线插值matlab代码,本人从参考书上找到的。
  • 拉格朗日插值和牛顿插值 matlab

    千次阅读 2018-11-05 22:08:00
    1. 已知函数在下列各点的值为 0.2 0.4 0.6 0.8 1.0 ...用插值法对数据进行拟合,要求给出Lagrange插值多项式和Newton插值多项式的表达式,并计算插值多项式...

     

     

     

    1. 已知函数在下列各点的值为

     

    0.2

    0.4

    0.6

    0.8

    1.0

     

    0.98

    0.92

    0.81

    0.64

    0.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的函数值f0  

    syms t;

    n = length(x);                                   

    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);                        

        if(i==n)

           f0 = subs(f,'t',x0);               

           f = collect(f);                   

           f = vpa(f,6);               

        end

    end

     

    结果:

    >> Untitled3

     

    f =

     

    - 0.520833*t^4 + 0.833333*t^3 - 1.10417*t^2 + 0.191667*t + 0.98

     

     

    f0 =

     

    [ 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 : m

        z = x(t);

        A = zeros(n,n);

        A(:,1) = Y';

        s = 0.0; p = 1.0; q1 = 1.0; c1 = 1.0;

            for j = 2 : n

                for i = j : n

                    A(i,j) = (A(i,j-1) - A(i-1,j-1))/(X(i)-X(i-j+1));

                end

                q1 = abs(q1*(z-X(j-1)));

                c1 = c1 * j;

            end

            C = A(n, n); q1 = abs(q1*(z-X(n)));

            for k = (n-1):-1:1

                C = conv(C, poly(X(k)));

                d = length(C);

                C(d) = C(d) + A(k,k);

            end

            y(t) = polyval(C,z);

     

    end

    L = 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.2403

     

     

    A =

     

        0.9800         0         0         0         0

        0.9200   -0.3000         0         0         0

        0.8100   -0.5500   -0.6250         0         0

        0.6400   -0.8500   -0.7500   -0.2083         0

        0.3800   -1.3000   -1.1250   -0.6250   -0.5208

     

     

    C =

     

       -0.5208    0.8333   -1.1042    0.1917    0.9800

     

     

    L =

     

    - (25*x^4)/48 + (5*x^3)/6 - (53*x^2)/48 + (23*x)/120 + 49/50

     

     

    2. 在区间上分别取,用两组等距节点对Runge函数作多项式插值(Lagrange插值和Newton插值均可),要求对每个值,分别画出插值多项式和函数的曲线。

    程序:

    x=-1:0.2:1;

    y=1./(1+25*x.^2);

    x0=-1:0.01:1;

    [f,f0]=Lagrange(x,y,x0)

    plot(x0,f0)

    结果:

    f =

     

    - 220.942*t^10 + 494.91*t^8 - 381.434*t^6 + 123.36*t^4 - 16.8552*t^2 + 1.0

     

    3.下列数据点的插值

     

    0.01

    1

    4

    9

    16

    25

    36

    49

    64

     

    0.1

    1

    2

    3

    4

    5

    6

    7

    8

    可以得到平方根函数的近似多项式, 要求用上述9个点作8次插值多项式,并在区间画出的曲线。

    程序:

    x=[0.01 1   4   9   16  25  36  49  64];

    y=[0.1  1   2   3   4   5   6   7   8];

    x0=0.01:0.1:64;;

    [f,f0]=Lagrange(x,y,x0)

    plot(x0,f0)

    xlim([0 64]);

    结果:

    f =

    - 2.73858e-10*t^8 + 5.6069e-8*t^7 - 0.00000453906*t^6 + 0.000186698*t^5 - 0.00418177*t^4 + 0.0510128*t^3 - 0.32628*t^2 + 1.19115*t + 0.0881211

     

    转载于:https://www.cnblogs.com/wander-clouds/p/9911920.html

    展开全文
  • 实验四用MATLAB实现拉格朗日插值、分段线性插值.pptx

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,086
精华内容 434
关键字:

拉格朗日差值matlab

matlab 订阅