实验二:Newton牛顿插值法之C语言代码
来源:互联网 发布:ceo cfo cmo 知乎 编辑:程序博客网 时间:2024/06/06 00:54
牛顿插值法与拉格朗日插值法类似,只不过是同一个插值多项式的不同表达形式,所以它们误差也是相等的.题目:
x | 0.56160 | 0.56280 | 0.56401 | 0.56521 |
y | 0.82741 | 0.82659 | 0.82577 | 0.82495 |
具体思路:依据书上的解题步骤,首先我们输入插值点的个数n,然后我们输入插值点的信息,x值是多少,y值是多少,我们用一个结构体定义,再构建一个差商表,我们用一个一维数组保存即可,最后依据牛顿插值公式转化成相应的代码即可.
下面上代码:
/************************************************************************* > File Name: Newton.c > Author:chendiyang > School:WUST_CST_1501班 > Myblog:www.chendsir.com > Mail:1441353519@qq.com > Created Time: 2017年04月19日 星期三 10时34分27秒 ************************************************************************/#include <stdio.h>#define MAX 20//输入点的结构typedef struct stPoint{ double x; double y;} Point;int main(){ int n; int i,j; Point points[MAX+1]; double form[MAX+1]; //用来保存差商表 double x,tmp,newton=0;//这个x是你将要计算的f(x)插值点,tmp基函数,newton是根据牛顿插值公式函数得出N(x)的值 printf("请输入被插值点的个数:(它是从0开始的,所以输入3代表4个点)"); scanf("%d",&n); if(n>MAX) { printf("您输入的个数过多."); return 1; } if(n<=0) { printf("您输入的点数太少."); return 1; } //输入插值点的x值和y值 printf("\n请输入插值点的x值和y值:\n"); for(i=0;i<=n;i++) scanf("%lf%lf",&points[i].x,&points[i].y); //输入计算牛顿插值多项式的x值 printf("\n请输入计算牛顿插值多项式的x值:"); scanf("%lf",&x); //对差商表进行初始化 for(i=0;i<=n;i++) form[i]=points[i].y; for(i=0;i<n;i++) { for(j=n;j>i;j--) { //差商的计算,f(X0,X1,X2,X3...Xn)的值 form[j]=(form[j]-form[j-1])/(points[j].x-points[j-1-i].x); } } tmp=1; newton=form[0]; for(i=0;i<n;i++) { //根据牛顿插值公式,上面差商表都计算完毕了,现在吧差商乘以牛顿插值函数,全部加起来就OK了 tmp=tmp*(x-points[i].x);//tmp是插值函数:例如(x-x0),(x-x1),(x-x2)等 newton=newton+tmp*form[i+1];//完成后newton就是f(x)的值了 } //输入牛顿插值函数f(x)的值 printf("\n牛顿插值函数N(%lf) = %lf \n",x,newton); return 0; //计算完毕}
a 运行结果如图所示:
因为牛顿插值公式和拉格朗日插值公式只是同一个插值多项式的不同表现形式,它们的插值多项式是N(x)是完全相同的,所以它们的误差也是完全相同的,当插值x为0.5635时,利用newton插值公式计算出的结果是完全相同的:0.826116,证实了我之前的拉格朗日插值是对的,当然不排除两个都错了的情况,这个就尴尬了,反正两个结果应该是一模一样的,毕竟误差都是相同的.
实验二到此完毕....(由于图形编程的库函数不熟悉,也不是很会,暂时还是dos窗口吧,到时候看老师怎么说吧,发现自己真是浪费了很多时间,想找个时间好好静下来学些东西,但是生活上一些事情,心真的挺累..)慢慢加油吧
0 0
- 实验二:Newton牛顿插值法之C语言代码
- 实验二:Lagrange拉格朗日插值法之C语言代码
- 利用均差的牛顿插值法(Newton)
- 利用差分的牛顿插值法(Newton)
- 牛顿法 Newton Method
- 牛顿(Newton)方法
- Newton法(牛顿法)
- 牛顿插值法的C语言实现
- 牛顿迭代法c代码
- 实验一:Guass列选主元消去法之C语言代码
- 实验一:Doolittle三角分解法之C语言代码
- Newton法(牛顿法 Newton Method)
- Newton法(牛顿法 Newton Method)
- 牛顿迭代法(Newton's Method)
- 牛顿迭代法(Newton's Method)
- 牛顿法(Newton's Method)
- 牛顿迭代法(Newton's Method)
- 牛顿迭代法(Newton's Method)
- Docker三剑客之Compose-二
- [BZOJ 3450]Tyvj1952 Easy:期望DP
- nova创建虚机流程源码分析 openstack
- gdb
- 初学命令(5)
- 实验二:Newton牛顿插值法之C语言代码
- JESD79-4 第4章 SDRAM命令描述与操作(4.30-4.31)
- UITableView reloadData的本质使用
- CodeIgniter在nginx下404 not found
- Android系统上实现类似按键精灵的效果(模拟触屏点击事件)
- [LeetCode]62. Unique Paths
- java转换json
- 加载框效果
- hdu 2602 01背包