本程序对cosx函数进行插值,取步长为0.1,因此x的值为0.00,0.10,0.20,0.30,对应的y值为cos(0.00),cos(0.10),cos(0.20),cos(0.30),其实本程序Horner方法(又称秦九韶算法)效率更高,计算更加准确

#include
<iostream>

#include
<cmath>

using namespace std;

int factorial(int
n);      //声明阶乘函数

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

int main()

{

double
h=0.10;      //计算的步长

double
x[4]={0.00,0.10,0.20,0.30};     
//用来存储已知x的值

double
y[4]={cos(0.00),cos(0.10),cos(0.20),cos(0.30)};     
//用来存储已知y的值

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

double
input_x;      //插值的x值

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

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

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

{

cout<<average_deviation(y,h,i)/(factorial(i))/pow(h,i);

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

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

if
(i<3&&((average_deviation(y,h,i+1)/(factorial(i+1))/pow(h,i+1))>0))

cout<<"+";

}

cout<<endl;

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

cin>>input_x;

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

{

polynomial=1;

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

{

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

}

result+=(average_deviation(y,h,i)/(factorial(i))/pow(h,i)*polynomial);

}

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

cout<<"函数的真实值为:"<<cos(input_x)<<endl;

cout<<"误差为:"<<100*((result-cos(input_x))/cos(input_x))<<"%"<<endl;

return
0;

}

int factorial(int n)

{

if
(n<0)

{

cout<<"请输入正整数值"<<endl;

exit(0);

}

else if
(n==0)

return 1;

else

return n*factorial(n-1);

}

double average_deviation(double*
function_value,double& h,int end)

{

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

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

double
value_f;

double
value_b;

if
(0==end)

{

return function_value[end];

}

else

{

function_value_f=new
double[end];

function_value_b=new
double[end];

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

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

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

function_value_b[i]=function_value[i];

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

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

delete[] function_value_f;

delete[] function_value_b;

return value_f-value_b;

}

}

差分形式的牛顿插值法(c++)的更多相关文章

  1. 牛顿插值法——用Python进行数值计算

    拉格朗日插值法的最大毛病就是每次引入一个新的插值节点,基函数都要发生变化,这在一些实际生产环境中是不合适的,有时候会不断的有新的测量数据加入插值节点集, 因此,通过寻找n个插值节点构造的的插值函数与n ...

  2. 牛顿插值法及其C++实现

    h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font ...

  3. Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法

    本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...

  4. 牛顿插值法(c++)【转载】

    摘自<c++和面向对象数值计算>,代码简洁明快,采用模板函数,通用性增强,牛顿差分合理利用存储空间,采用Horner算法(又称秦九韶算法)提高精度,减少时间复杂度,高!确实是高!对其中代码 ...

  5. 牛顿插值法(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 nam ...

  6. CPP,MATLAB实现牛顿插值

    牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章.同样贴出,楼主作为初学者认为好理解的代码. function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x ...

  7. 【模拟8.11】星空(差分转化,状压DP,最短路)

    一道很好的题,综合很多知识点. 首先复习差分:      将原来的每个点a[i]转化为b[i]=a[i]^a[i+1],(如果是求和形式就是b[i]=a[i+1]-a[i]) 我们发现这样的方便在于我 ...

  8. 等距结点下的Newton插值多项式系数计算(向前差分)

    插值多项式的牛顿法 1.为何需要牛顿法? ​ 使用Lagrange插值法不具备继承性.当求好经过\(({x_0},{y_0})-({x_n},{y_n})\)共n+1个点的插值曲线时候,如果再增加一个 ...

  9. 埃尔米特插值问题——用Python进行数值计算

    当插值的要求涉及到对插值函数导数的要求时,普通插值问题就变为埃尔米特插值问题.拉格朗日插值和牛顿插值的要求较低,只需要插值函数的函数值在插值点与被插函数的值相等,以此来使得在其它非插值节点插值函数的值 ...

随机推荐

  1. Java自学-控制流程 continue

    Java的 continue语句 继续下一次循环 示例 1 : continue 如果是双数,后面的代码不执行,直接进行下一次循环 public class HelloWorld { public s ...

  2. Python基础知识(四)

    Python基础知识(四) 一丶列表 定义格式: 是一个容器,由 [ ]表示,元素与元素之间用逗号隔开. 如:name=["张三","李四"] 作用: 存储任意 ...

  3. 【openshift】OC命令部署Openshift

    OC命令部署Openshift # install openshift wget -c https://github.com/openshift/origin/releases/download/v3 ...

  4. html解决空格显示问题

    在前端里面,大家都知道,html中输入空格或换行是识别不了是空格的,但是有时候需要实现,那么该如何解决呢?主要有以下几个方面: 1:常用的转义:  2:使用全角拼音,然后输入空格也可实现 3:用标签 ...

  5. 遍历js中的数组

    可以使用js中的for循环,或者forEach方法:也可以使用Ext中的方法遍历js中的数组 代码如下: /** * 遍历数组 */ var arr = ['越南', '新加坡', '美国', '俄罗 ...

  6. 《区块链DAPP开发入门、代码实现、场景应用》笔记1——天外飞仙DAPP

    Solidity编程语言解决了编写智能合约的不友好的问题,但是当合约编译并部署之后,对与这些接口的访问,对于一般的使用者来说,门槛有点高, 对普通用户来说也是非常不友好,为了使广大用户理解并方便快捷的 ...

  7. Java项目之查询后分页

    一.Jsp页面: <%@ page language="java" contentType="text/html; charset=UTF-8" page ...

  8. 宝石JUELRYE单词JUELRYE珠宝

    juelrye n.珠宝 late 14c., juelrye "precious ornaments, jewel juelrye (uncountable) Adornment with ...

  9. vue+element 按钮来回切换

    需求很简单,实现很容易,日常记录一下 templace代码: data数据声明: me'thods方法:

  10. Android开发常用开源框架:图片处理

    https://blog.csdn.net/SGQ_CSDN/article/details/79910709 Android开发常用开源框架:图片处理 框架名称 功能描述 Android Unive ...