拉格朗日插值法的实现就是通过构造函数,通过已知几对数据然后估算输入对应的数据所得得值。

通过例子可知道拉格朗日法,假设有三组数据分别为(x0,y0),(x1,y1),(x2,y2),与第一个y值相乘得数的分母是(x0-x1)*(x0-x2),分子是:(x-x1)*(x-x2),第二个数就是分母是(x1-x0)*(x1-x2),分子是(x-x0)*(x-x2),第三个数分子是:(x-x0)*(x-x1),分母是(x2-x0)*(x2-x1).

代码实现:

#include<stdio.h>
# define N 100
int main()
{//设置数据; int n,i,j;double l[N],l1[N],l2[N],x,f=1.0,y=0 ,x1[N],y1[N];printf("输入已知数据对数:"); scanf("%d",&n); printf("输入一个x,输入一个y:");for(i=0;i<n;i++){  //先输入一个x,再输入一个y scanf("%lf",&x1[i]);scanf("%lf",&y1[i]);//将数据进行赋初值 l1[i]=1;l2[i]=1;}printf("输入最后已知的x,求y:") ;//输入数据对scanf("%lf",&x);//赋初值//进行l(x)的分子分母构造 for(i=0;i<n;i++){for(j=0;j<n;j++){l1[i]=1.0*l1[i]*(x-x1[j]);//分子构造if(i!=j){l2[i]=1.0*l2[i]*(x1[i]-x1[j]);//分母构造}}l1[i]=1.0*l1[i]/(x-x1[i]);l[i]=1.0*l1[i]/l2[i];  }//计算得到y; for(i=0;i<n;i++){y=y+l[i]*y1[i];}printf("%lf",y);return 0;
}

牛顿插值法:

以例子为例:0.43505=(0.78846-0.87547)/(2.4-2.2)  ,0.40010=(0.95551-0.87547)/(2.6-2.4)

一阶差商下列数类似,二阶差商:-0.087375=(0.40010-0.43505)/(2.6-2.4-(2.4-2.2) ,-0.073875=(0.37055-0.40010)/(2.8-2.6-(2.6-2.4)),三阶差商:0.02250=(-0.073875+0.087375)/(2.8-2.6-(2.6-2.4)-(2.4-2.2)

据此大家应该能总结出规律:

代码实现,在此说明,由于本人能力有限,这段代码写的非常不好,不能自由实现数据对的更改,但是可以告诉如何修改数据对个数:

#include<stdio.h>
# define N 100
int main()
{int i,j,n=8,n1[N],n2;double x1[N],y1[N],x,y=0,w=1,k2[N],k3[N],k4[N],k5[N],k6[N],k7[N],k8[N],K9[N],k[N];//录入数据printf("本文以最多8组数据为例,已经满足问题讨论要求\n");//为了发现荣格现象printf("请输入进行牛顿插值次数n2(n2<=n):");scanf("%d",&n2);
/*  for(i=0;i<8;i++){n1[i]=i;}
*/printf("请一组组数据输入,先输一个x,再输一个y:"); for(i=0;i<n;i++){   scanf("%lf",&x1[i]);scanf("%lf",&y1[i]);}printf("输入x点:");scanf("%lf",&x);//若要换成八组以上基础数据,可将i<7换成你想要的i<?,后面需要加上k[],按照下面规律进行更改for(i=0;i<7;i++){k2[i]=1.0*(y1[i+1]-y1[i])/(x1[i+1]-x1[i]);}for(i=0;i<6;i++){k3[i]=1.0*(k2[i+1]-k2[i])/(x1[i+2]-x1[i]);}for(i=0;i<5;i++){k4[i]=1.0*(k3[i+1]-k3[i])/(x1[i+3]-x1[i]);}for(i=0;i<4;i++){k5[i]=1.0*(k4[i+1]-k4[i])/(x1[i+4]-x1[i]);}for(i=0;i<3;i++){k6[i]=1.0*(k5[i+1]-k5[i])/(x1[i+5]-x1[i]);}for(i=0;i<3;i++){k7[i]=1.0*(k6[i+1]-k6[i])/(x1[i+6]-x1[i]);}for(i=0;i<2;i++){k8[i]=1.0*(k7[i+1]-k7[i])/(x1[i+7]-x1[i]);}for(i=0;i<1;i++){k8[i]=1.0*(k5[i+1]-k5[i])/(x1[i+5]-x1[i]);}printf("\n");printf("为了方便讨论,以第一个点为起始点,开始讨论");y=y1[0];//数据录入 k[0]=k2[0];//起始点可更改,但为了方便,采取强制第一个k[1]=k3[0];k[2]=k4[0];k[3]=k5[0];k[4]=k6[0];k[5]=k7[0];k[6]=k8[0];for(i=0;i<n2;i++){w=w*(x-x1[i]);y=y+w*k[i];}printf("输出y结果为:%lf\n",y);return 0;
}

本代码进行强制默认,如需更改起始点,需注意更改后的点满足你所要进行的运算次数

C语言实现拉格朗日插值法和牛顿插值法相关推荐

  1. 插值法:拉格朗日插值、牛顿插值

    拉格朗日插值法 (*以下定义选自维基百科) 算法流程图 算法代码 [cpp] view plaincopy #include<iostream> #include<string> ...

  2. 【数值分析】插值法:拉格朗日插值、牛顿插值

    本科课程参见:<软件学院那些课> 拉格朗日插值法 (*以下定义选自维基百科) 算法流程图 算法代码 #include<iostream> #include<string& ...

  3. 数学建模之Hermite插值法和三次样条插值法(附上详细的matlab代码)

    插值算法 一般定义 若P(x)为次数不超过n的代数多项式,即 P(x)=a0+a1x+...+anxnP(x)=a_0+a_1x+...+a_nx^n P(x)=a0​+a1​x+...+an​xn ...

  4. 拉格朗日插值和牛顿插值的龙格现象

    文章目录 一.实验目的 二.实验设备信息 三.实验内容 (一)拉格朗日插值多项式 (二)牛顿插值多项式 四.实验步骤 (一)拉格朗日插值函数实现 (二)牛顿插值函数实现 (三)观察拉格朗日插值和牛顿插 ...

  5. 1月16日:拉格朗日中值定理,罗尔定理,柯西中值,拉格朗日插值,牛顿插值,重心插值,拉格朗日乘子法的证明

    拉格朗日中值定理 https://www.bilibili.com/video/BV117411E7kx?from=search&seid=17921778669593975548 拉格朗日中 ...

  6. matlab全域基函数,多项式函数插值:全域多项式插值(一)单项式基插值、拉格朗日插值、牛顿插值 [MATLAB]...

    全域多项式插值指的是在整个插值区域内形成一个多项式函数作为插值函数.关于多项式插值的基本知识,见"计算基本理论". 在单项式基插值和牛顿插值形成的表达式中,求该表达式在某一点处的值 ...

  7. 数值分析之 拉格朗日插值、牛顿插值、分段线性插值实现

    1.拉格朗日插值法 考虑全局信息的比较经典的插值方法,编程简单,计算量大. #coding=utf-8 from matplotlib import pyplot as pltdef Lg(data, ...

  8. 拉格朗日插值和牛顿插值原理及使用(代码环境:matlab)

    题目一: 1.用表1-1中的世界人口统计数值估计1980年的人口 表 1-1: 年 人口 1960 3 039 585 530 1970 3 707 475 887 1990 5 281 653 82 ...

  9. 插值问题(拉格朗日插值、牛顿插值)

    agui_lagrange.m: function f=agui_lagrange(x0,y0,x) % x0为节点向量,y0为节点上的函数值,x为插值点,f为返回插值 n=length(x0);m= ...

最新文章

  1. 类的赋值运算符的重载函数
  2. P13 最优控制系统-《Matlab/Simulink与控制系统仿真》程序指令总结
  3. 《数据中台实战》:数据中台的分层建模体系
  4. gcc/g++ 编译器出现 undefined reference to ‘这里是函数名‘,往往意味这这个函数没有定义
  5. mint-ui修改样式的小技巧
  6. Web App 前端构建(纯净版)
  7. 定时任务莫名停止,Spring 定时任务存在 Bug??
  8. 模电试题_数电试题 综合测试
  9. 江西省赣州市谷歌高清卫星地图下载
  10. SDN实验(六)——SDN流量监控
  11. 几组数据的相关性python_python数据相关性分析 (计算相关系数)
  12. hahaha终于注册了一个博客
  13. 群发邮件进入垃圾邮件的解决之道
  14. java计算机毕业设计翔隆生鲜超市进货管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  15. Matlab 中输入希腊字母
  16. 史上最全的FTP网址
  17. 你会用“お”和“ご”吗?
  18. 4 个 Python 编程游戏网站,玩嗨了~
  19. 寒假思雨姐摸底D题题解
  20. python神经网络编程 pdf下载_Python神经网络编程 PDF 高质量完整版

热门文章

  1. UE5_创建C++项目报错
  2. FlashSystem 9100系支持19TB FCM NVMe和MRAM Cache技术
  3. C#+ArcEngine加载mxt地图模板文件
  4. 肌肉骨骼康复学-习题-单选
  5. Sublime Text 2 - 性感无比的代码编辑器!程序员必备神器!跨平台支持Win/Mac/Linux
  6. 基于java的校园二手交易系统的设计与实现.rar(论文+项目源码)
  7. 6.01 遍历字符串
  8. 黑马培训 python
  9. 浅谈程序员的数学修养(转载)
  10. SAR合成孔径雷达距离多普勒(RD)算法