zoukankan      html  css  js  c++  java
  • 插值法:

    直线公式:

    (y-y0)/(x-x0)=(y1-y0)/(x1-x0)
    解方程得:y=y0+(x-x0)*(y1-y0)/(x1-x0)
    拉格朗日插值法:
    对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式;
    用途:1 根据不同观测点的一组值拟合出公式
    2 进行插值运算。

    假设有某个二次多项式函数f,已知它在三个点上的取值为:

    • f(4)=10
    • f(5)=5.25
    • f(6)=1

    要求f(18)的值。

    首先写出每个拉格朗日基本多项式:

    ell _{0}(x)={frac  {(x-5)(x-6)}{(4-5)(4-6)}}
    ell _{1}(x)={frac  {(x-4)(x-6)}{(5-4)(5-6)}}
    ell _{2}(x)={frac  {(x-4)(x-5)}{(6-4)(6-5)}}

    然后应用拉格朗日插值法,就可以得到p的表达式(p为函数f的插值函数):

    p(x)=f(4)ell _{0}(x)+f(5)ell _{1}(x)+f(6)ell _{2}(x)
    .\,\,\,\,\,\,\,\,\,\,=10cdot {frac  {(x-5)(x-6)}{(4-5)(4-6)}}+5.25cdot {frac  {(x-4)(x-6)}{(5-4)(5-6)}}+1cdot {frac  {(x-4)(x-5)}{(6-4)(6-5)}}
    .\,\,\,\,\,\,\,\,\,\,={frac  {1}{4}}(x^{2}-28x+136)

    此时代入数值 18就可以求出所需之值: f(18)=p(18)=-11

    C算法: 

    引用 :实验二:Lagrange拉格朗日插值法之C语言代码 - Chen_dSir的博客 - CSDN博客  https://blog.csdn.net/Chen_dSir/article/details/70236987

    ypedef struct stPoint
    {
      double x;
      double y;
    } Point
    #define Dots_N 5

    Point Dots[Dots_N];
    /*n 为插入的点的个数,tmp为拉格朗日基函数,x为要插入的点,lagrange为插值运算后返回的值。*/
    double f32Lagrange_LineSert(Point *points,u8 n,double x)
    {
      u8 i ,j;
      double tmp,lagrange=0;//这个x是你将要计算的f(x)插值点,tmp是拉格朗日基函数,larange是根据拉格朗日函数得出f(x)的值
      for(i=0;i<=n;i++)
      {
        for(j=0,tmp=1;j<=n;j++)
        {
          if(j!=i) //去掉xi与xj相等的情况,范德蒙行列式下标就是j!=k,相等分母为0就没意义了
          {
            tmp=tmp*(x-points[j].x)/(points[i].x-points[j].x);//这个就是套公式tmp是拉格朗日基函数
          }
        }
        lagrange=lagrange+tmp*points[i].y; //最后计算基函数*y,全部加起来,就是该x项的拉格朗日函数了
      }
      return lagrange;
    }

  • 相关阅读:
    openfl使用64位的ndk时,编译报错的问题!
    Haxe是何物?
    jsp中如何判断el表达式中的BigDecimal==0
    如何在springmvc的请求过程中获得地址栏的请求
    【原创】【滑块验证码】
    【原创】【aes加密】
    【原创】【qrcodejs2】生成二维码
    【原创】【ueditor】监听内容
    【原创】【ueditor】内容过多时 菜单控件遮挡页面
    js杂谈
  • 原文地址:https://www.cnblogs.com/jieruishu/p/10173732.html
Copyright © 2011-2022 走看看