您的位置:首页 > 编程语言 > C语言/C++

计算方法_牛顿插值_C++实现

2016-11-03 22:01 417 查看
#include<iostream>

#include<ctime>

using namespace std;

 

float * f(int n,float *x,float *y)

{

    //该函数的返回值是一个长度为n+1的动态数组,存放各阶差商

    float * f = new float[n+1];

        

    f[0] = y[0];

    //cout<<f[0]<<endl;

    for (int i = 1; i <= n; i++) {

        float t = 1;

        float sum = 0;

        for (int k = 0; k <= i; k++) {

            for (int j = 0; j <= i; j++) {

                if (j != k) {

                    t=t*(x[k] - x[j]);

                }            

            }

            sum = sum + y[k] / t;

            t=1;    

        }    

        f[i] = sum;

    

    }

        

    return f;

}

int main(){

    

    float x[5]={0,2,3,5,6},y[5]={0,8,27,125,216};

    int n=4;

    

    float * answer=f(4,x,y);

    for (int i = 0; i <= n; i++) {

        cout<<answer[i]<<endl;

    }

    

    //2阶差乘

    cout<<y[0]/((x[0]-x[1])*(x[0]-x[2]))+y[1]/((x[1]-x[0])*(x[1]-x[2]))+y[2]/((x[2]-x[0])*(x[2]-x[1]))<<endl;

    

        float t = 1;

        float sum = 0;

        for (int k = 0; k <= 2; k++) {

            for (int j = 0; j <= 2; j++) {

                if (j != k) {

                    t=t*(x[k] - x[j]);

                }

                        

            }

            

            sum = sum + (y[k] / t);    

            t=1;

        }    

        

    cout<<sum;

    

    

    

    

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息