差分形式的牛顿插值法(c++)
本程序对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++)的更多相关文章
- 牛顿插值法——用Python进行数值计算
拉格朗日插值法的最大毛病就是每次引入一个新的插值节点,基函数都要发生变化,这在一些实际生产环境中是不合适的,有时候会不断的有新的测量数据加入插值节点集, 因此,通过寻找n个插值节点构造的的插值函数与n ...
- 牛顿插值法及其C++实现
h1 { margin-bottom: 0.21cm } h1.western { font-family: "Liberation Sans", sans-serif; font ...
- Matlab数值计算示例: 牛顿插值法、LU分解法、拉格朗日插值法、牛顿插值法
本文源于一次课题作业,部分自己写的,部分借用了网上的demo 牛顿迭代法(1) x=1:0.01:2; y=x.^3-x.^2+sin(x)-1; plot(x,y,'linewidth',2);gr ...
- 牛顿插值法(c++)【转载】
摘自<c++和面向对象数值计算>,代码简洁明快,采用模板函数,通用性增强,牛顿差分合理利用存储空间,采用Horner算法(又称秦九韶算法)提高精度,减少时间复杂度,高!确实是高!对其中代码 ...
- 牛顿插值法(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 ...
- CPP,MATLAB实现牛顿插值
牛顿插值法的原理,在维基百科上不太全面,具体可以参考这篇文章.同样贴出,楼主作为初学者认为好理解的代码. function p=Newton1(x1,y,x2) %p为多项式估计出的插值 syms x ...
- 【模拟8.11】星空(差分转化,状压DP,最短路)
一道很好的题,综合很多知识点. 首先复习差分: 将原来的每个点a[i]转化为b[i]=a[i]^a[i+1],(如果是求和形式就是b[i]=a[i+1]-a[i]) 我们发现这样的方便在于我 ...
- 等距结点下的Newton插值多项式系数计算(向前差分)
插值多项式的牛顿法 1.为何需要牛顿法? 使用Lagrange插值法不具备继承性.当求好经过\(({x_0},{y_0})-({x_n},{y_n})\)共n+1个点的插值曲线时候,如果再增加一个 ...
- 埃尔米特插值问题——用Python进行数值计算
当插值的要求涉及到对插值函数导数的要求时,普通插值问题就变为埃尔米特插值问题.拉格朗日插值和牛顿插值的要求较低,只需要插值函数的函数值在插值点与被插函数的值相等,以此来使得在其它非插值节点插值函数的值 ...
随机推荐
- 自学Python编程的第五天(希望有IT大牛帮我看最下面的代码)----------来自苦逼的转行人
2019-09-15-15:40:24 今天没有学知识,是一个一周总结,把这一周学的知识总结一遍,然后把做过的练习题再做一遍 看是否还会有再出现同样的错误,而且还可以知道有哪些知识点没有掌握好,可以把 ...
- linux技能点三 find grep
find: 1. 按文件名查找 find . -name "a*.txt" 注意双引号: 2. 按文件大小查找 find .-size [+/-] ...
- 非Java程序员转行Java-day01-入门基础
1.学习大纲介绍 课件中的代码及资料:提取码:yexw 学习中的依赖包及安装文件:提取码 :8par 2.数据流向分析 2.1.应用型软件开发本质 增删改查(非常重要,5星) 2.2.大型网站演变历史 ...
- Cypress自动化环境搭建
1.Cypress 下载: 官网下载,下载后直接解压即可,解压后便可单机exe文件打开 Ps:直接打开exe是会报错找不到json文件的,所以还要安装依赖环境 运行cypress项目前,必须vue-c ...
- vue.js下移动端绑定click事件失效,pc端正常的问题
原因可能是 我在项目中使用到了 better-scroll,默认它会阻止 touch 事件.所以在配置中需要加上 click: true 即可. 例如: mounted () { this.scrol ...
- SQL SERVER- waitresource解读
例如: OBJECT: 18:1769220894:8 第一个是dbid:18,第二个是objectid:1769220894,第三个是indexID:8 SELECT DB_NAME(18)SELE ...
- 《大象 Thinking in UML》读书笔记:Process-oriented vs. Object-oriented
前言 面向过程 还是 面向对象?这不仅仅是个软件工程术语,其问题甚至可以追溯到亚里士多德:您把这个世界视为过程还是对象? 回归到现今的软件行业,这不仅仅是个某个具体编程技术问题,更是认识论问题. 认识 ...
- redis启动异常处理一例
rm -rf /var/log/redis/redis.log echo "net.core.somaxconn= 1024" >> /etc/sysctl.conf ...
- 项目Alpha冲刺(团队)-测试篇
格式描述 课程名称:软件工程1916|W(福州大学) 作业要求:项目Alpha冲刺(团队)-代码规范.冲刺任务与计划 团队名称:为了交项目干杯 测试用例:测试用例文档.zip 作业目标:描述项目的测试 ...
- web scraper——爬取知乎|微博用户数据模板【三】
前言 在这里呢,我就只给模板,不写具体的教程啦,具体的可以参考我之前写的博文. https://www.cnblogs.com/wangyang0210/p/10338574.html 模板 进入微博 ...