牛顿插值法(c++)

X

Y

0.40

0.41075

0.55

0.57815

0.65

0.69675

0.80

0.88811

0.90

1.02652

1.05

1.25382

#include

using namespace std;

double average_deviation(double* function_value,double* independent_variable,int end);      //声明均差函数

 

int main()

{

      double x[5]={0.40,0.55,0.65,0.80,0.90};      //用来存储已知x的值

      double y[5]={0.41075,0.57815,0.69675,0.88811,1.02652};      //用来存储已知y的值

      double result=0;      //用来保存最后的插值结果

      double input_x;      //插值的x值

      double polynomial;      //保存多项式的值

      cout<<"通过插值得到的函数为:"<<endl;

      for (int i=0;i<5;i++)

      {

            cout<<average_deviation(y,x,i);

            for (int j=0;j

                  cout<<"*"<<"("<<"x-"<<x[j]<<")";

            if (i<4)

                  cout<<"+";

      }

      cout<<endl;

      cout<<"请输入插值的x值:";

      cin>>input_x;

      for (int i=0;i<5;i++)

      {

            polynomial=1;

            for (int j=0;j

            {

                  polynomial*=(input_x-x[j]);

            }

            result+=(average_deviation(y,x,i)*polynomial);

      }

      cout<<"插值得到的函数值为:"<<result<</span><</span>endl;

      return 0;

}

 

 

double average_deviation(double* function_value,double* independent_variable,int end)

{

      double* function_value_f;      //function_value_f用来保存0到k-1的k阶均差

      double* function_value_b;      //function_value_f用来保存1到k的k阶均差

      double* independent_variable_f;      //用来保存前k-1个值

      double* independent_variable_b;      //用来保存后k-1个值

      double value_f;

      double value_b;

      if (0==end)

      {

            return function_value[end];

      }

      else

      {

            function_value_f=new double[end];

            independent_variable_f=new double[end];

            function_value_b=new double[end];

            independent_variable_b=new double[end];

            for (int i=1;i<=end;i++)

            {

                  function_value_f[i-1]=function_value[i];

                  independent_variable_f[i-1]=independent_variable[i];

            }

            for (int i=0;i<=end-1;i++)

            {

                  function_value_b[i]=function_value[i];

                  independent_variable_b[i]=independent_variable[i];

            }

            value_f = average_deviation(function_value_f, independent_variable_f, end - 1);

            value_b = average_deviation(function_value_b, independent_variable_b, end - 1);

           

            delete[] function_value_f;

            delete[] function_value_b;

            delete[] independent_variable_b;

            delete[] independent_variable_f;

           

            return (value_f-value_b)/(independent_variable[end]-independent_variable[0]);

      }

}

牛顿插值法(c++)

posted @ 2015-11-28 05:10  硫酸亚铜  阅读(1026)  评论(0编辑  收藏  举报