Lagrange 插值

#include <iostream>
#include <stdio.h>
using namespace std;

int main()
{
    double x,sum,w,w_;
    int number;
    cout << "请输入待插值的点的个数:";
    cin >> number;
    double array[2][number];
    cout << "请输入x值" << endl;
    for(int i = 0;i<number;++i)
        cin >> array[0][i];
    cout << "请输入y值" << endl;
    for(int j = 0;j<number;++j)
        cin >> array[1][j];
    cout << "请分别输入待求点的x坐标:";
        cin >> x;
    sum  = 0;
    w = w_ = 1;
    for(int i = 0;i<number;++i)
        w = w*(x-array[0][i]);
    for(int i = 0;i<number;++i)
    {
    	w_ = 1;
        for(int j = 0;j<number;++j)
        {
            if(j == i)
                continue;
            w_ = w_*(array[0][i]-array[0][j]);
        }
        sum = sum+w/(x-array[0][i])/w_*array[1][i];
    }
    printf("求解答案:%f",sum);
}

算法思想:由拉格朗日插值定义式及推导过程,设计算法。

猜你喜欢

转载自blog.csdn.net/adorkable_thief/article/details/79982182
今日推荐