牛顿插值函数C语言程序实现
2017-10-24 15:24
351 查看
牛顿插值函数C语言程序实现
牛顿插值的关键在于差商表的计算,差商表第一行是y值,为了配合计算,在该矩阵上方配上节点x0、x1、x2……xnf[x0,x1]=[f(x1)−f(x0)]/(x1−x0)f[x0,x1,x2]=[f[x1,x2]−f[x0,x1]]/(x2−x0)……
所以只要计算矩阵内上三角值即可。
#include <stdio.h> #include <stdlib.h> int main() { float table(int n,float a1[10],float a2[10],float a3[10][10]); float newton(int n,float a4[10][10],float a5[10]); float arrX[10],arrY[10],arrL[10][10]; int num,i; printf("请输入插值节点的个数(个数应小于10):"); scanf("%d",&num); printf("请输入各个插值节点的值:\n"); for(i=0; i<num; i++) { printf("请输入X%d值:",i+1); scanf("%f",&arrX[i]); printf("请输入Y%d值:",i+1); scanf("%f",&arrY[i]); } table(num,arrX,arrY,arrL); newton(num,arrL,arrX); return 0; } float table(int n,float a1[10],float a2[10],float a3[10][10]) { int i,j; for(i=0; i<n; i++) { a3[0][i]=a2[i];//第一行初始化为y值 } for(i=0; i<n; i++) for(j=n-1; j>i; j--)//从一行最后往前循环,到i=j为止,即上三角全部计算赋值 { a3[i+1][j]=(a3[i][j]-a3[i][j-1])/(a1[j]-a1[j-1*(i+1)]);//差商表计算,最后一项arrX[j-1*(i+1)]脚标是计算步长 } for(i=1; i<n; i++)//下三角未计算赋值,系统会随机分配值给下三角的每一位,故赋值0会使差商表输出更整齐 for(j=0; j<i; j++) { a3[i][j]=0.0; } printf("差商表为:\n"); printf("----------------------------------------------------------\n"); for(i=0; i<n; i++) { for(j=0; j<n; j++) { if(j%n==0)//num个数一行输出 printf("\n"); printf("%f\t",a3[i][j]); } } printf("\n"); printf("----------------------------------------------------------\n"); return 0; } float newton(int n,float a4[10][10],float a5[10]) { int i; float x,y,t1=1.0; while(1) { printf("请输入要插入节点的X值:"); scanf("%f",&x); y=a4[0][0]; for(i=1; i<n; i++) { t1=t1*(x-a5[i-1]); y=y+a4[i][i]*t1;//差商表对角线值依次乘以(x-x0)(x-x1)…… } printf("插值结果为:%f",y); printf("\n"); } return 0; }
运行结果如下:
相关文章推荐
- 用牛顿插值多项式求函数近似值的算法,能用C语言编程实现
- C#的winform程序实现多国语言
- 深入浅出Dll(介绍函数导出、类导出、钓子dll、不同语言混合编程方法、插件等的实现方法) 选择自 iceezone 的 Blog
- 程序实现多国语言的动态切换解决方案
- c 语言之 模拟实现 strcpy 和 strcat 函数
- 实现执行外部程序,并等待程序结束的函数。
- 用C语言实现函数语言中的Map和Reduce操作
- 数值分析之 拉格朗日插值、牛顿插值、分段线性插值实现
- 用VC实现支持多语言的程序
- C#实现动态多语言界面程序
- Appium 新手贴:Windows 平台上的使用 Python 语言实现 appium 自动化程序 for Android (完整版)
- C++ 实现多语言程序开发研究与Xtreme ToolkitPro的使用(二)
- 10个重要的算法C语言实现源代码:拉格朗日,牛顿插值,高斯,龙贝格,牛顿迭代,牛顿-科特斯,雅克比,秦九昭,幂法,高斯塞德尔
- 数据库中的数据运算,有的SQL能实现,程序语言同样能实现,是用SQL运算?还是用程序语言?
- java语言实现:写一个函数,使字符串倒序
- 编写程序,实现strcmp()相同功能myStrcmp()函数
- 汇编语言实现乐曲程序实践
- VS实现程序的多语言
- MIDlet中实现程序管理器和多语言程序
- 函数 atoi() 和 itoa() 的 C 语言实现。