美文网首页
Lagrange和Newton插值

Lagrange和Newton插值

作者: 那年兔 | 来源:发表于2018-10-31 22:16 被阅读0次

分别用1~~4次Lagrange,Newton插值计算函数在0.9处的函数值

i 1 2 3 4 5
xi 0 0.17 0.65 0.85 1

分别用1~~4次Lagrange,Newton插值计算函数在0.9处的函数值

Lagrange

Newton

#include <iostream>
using namespace std;

//求yi的值
float Evaluation(float x)
{
    return 1/(1+25*x*x);
}

//Lagrange
float Lagrange(float x,int n,float a[],float b[])
{
    float t,y=0;
    int j,k;
    for (k = 0;k <= n;k++)
    {
        t = 1;
        for (j = 0;j <= n;j++)
        {
            if (j != k)
                t = ((x - a[j])/(a[k]-a[j]))*t;
        }
        y = t * b[k]+y;
    }
    return y;
}

// Newton均差
void AverageDeviation(int n,float ad[][100],float a[],float b[])
{
    int i,j;
    for (i = 0;i <= n; i++)
    {
        ad[i][0] = b[i];
        for (j = 1;j <= n; j++)
        {
            if(j>i)
                ad[i][j] = 0;
            else
            {
                ad[i][j] = (ad[i-1][j-1]-ad[i][j-1])/(a[i-j]-a[i]);
            }
        }
    }
    
}

//Newton
float Newton(int n,float x,float a[],float b[],float ad[][100])
{
    int i,j;
    float y=ad[0][0];
    float p;
    for (i=1;i<=n;i++)
    {
        p=ad[i][i];
        for(j=0;j<=i-1;j++)
            p *= (x-a[j]);
        y += p;
    }
    return y;

}

int main()
{
    float x,a[100],b[100];
    float ad[100][100];
    int i,j,k,n;
    cout << "输入插值次数n:"<<endl;
    cin >> n;
    cout << "输入你要估算对象xֵ:"<<endl;
    cin >> x;
    for (i=0;i<=n;i++)
    {
        cout<< "输入x"<<i<<"的值:";
        cin >> a[i];
        b[i] = Evaluation(a[i]);
        cout<< "输入y"<<i<<"的值:"<<b[i]<<endl;
    }
    cout << "Lagrange得y = "<< Lagrange(x,n,a,b)<<endl;
    // 调用函数求Newton均差
    AverageDeviation(n,ad,a,b);
    for(i=0;i<=n;i++)
    {
        cout<<"第"<<i<<"阶均差为:"<<ad[i][i]<<endl;
    }
    cout << "Newton得y = "<< Newton(n,x,a,b,ad)<<endl;
    return 0;
}

相关文章

  • Lagrange和Newton插值

    分别用1~~4次Lagrange,Newton插值计算函数在0.9处的函数值 分别用1~~4次Lagrange,N...

  • Lagrange插值算法

    本章涉及知识点1、插值问题的定义2、插值基函数3、Lagrange插值多项式4、Lagrange线性插值5、Lag...

  • Lagrange插值

    # Lagrange插值 标签(空格分隔): 数值方法 插值 --- ## 插值 在实际问题中,往往只能观察到某物...

  • 【数学建模算法】(25)插值与拟合:分段线性插值

    1.插值多项式的震荡 用 Lagrange 插值多项式近似,虽然随着节点个数的增加,的次数变大,多数情况下误差会变...

  • 插值法-1

    Matlab主程序 Newton插值法函数 结果图 重点说明 poly(a1,a2,...,an)表示的是(x-a...

  • 拉格朗日(Lagrange)插值算法

    多项式除法 假定平面上有 求出最低次多项式 经过这些点,前面我们讲过牛顿插值,现在我们不用这个方法。想要经过这些点...

  • 缺失值处理-拉格朗日插值

    常用的插值法有:一维插值法:拉格朗日插值、牛顿插值、分段低次插值、埃尔米特插值、样条插值。二维插值法:双线性插值、...

  • 【数学】线性插值

    线性插值有一阶、二阶、三阶,对应为单线性插值、双线性插值和三线性插值。三者皆为线性插值,不同之处在于单线性插值为2...

  • 反距离权重IDW算法解析与示例

    在GIS和图像处理中插值算法很常用,散点状的数据面状化。常用的插值方法包括:反距离权重插值法(IDW)、克里金插值...

  • 关于Python插件包SciPy interpolate的最新用

    何为插值? 在学习数值分析的时候常常用到一次插值,二次插值...。经过不断的学习和使用可以发现:插值是在直线或曲线...

网友评论

      本文标题:Lagrange和Newton插值

      本文链接:https://www.haomeiwen.com/subject/opsztqtx.html