拉格朗日插值原理:

拉格朗日插值的具体介绍网址:https://zh.wikipedia.org/wiki/%E6%8B%89%E6%A0%BC%E6%9C%97%E6%97%A5%E6%8F%92%E5%80%BC%E6%B3%95

翻译成人话就是,该曲线是由多个n次多项式的和构成的,n是参与插值的点的个数。每个n次多项式的计算方法如上图所示。转化成程序的话,就是要保存每个多项式中(x-xi)中的每一项xi。然后就是系数yi/(xj-x0)(xj-x1)...(xj-xk)

程序实现:

#include <iostream>
#include <opencv2/opencv.hpp>using namespace cv;template<class T>
struct Point
{T x;T y;Point(){x=0;y=0;}Point(T a,T b){x=a;y=b;}Point operator+(Point p){return Point(x+p.x,y+p.y);}
};
/*拉格朗日曲线,包含多个拉格朗日多项式和曲线的x坐标最大最小值*/
struct LagrangeCurve
{vector<double>factor;vector<double>minuend;int minX;int maxX;
};void calLagrangePolynomial(LagrangeCurve&curve,Point<int>*curvePoints,int pointNum)
{int i,j;curve.maxX=curvePoints[0].x;curve.minX=curvePoints[0].x;for(i=0;i<pointNum;++i){curve.minuend.push_back(curvePoints[i].x);curve.factor.push_back(curvePoints[i].y);//获取曲线两端的x值if(curvePoints[i].x<curve.minX)curve.minX=curvePoints[i].x;if(curvePoints[i].x>curve.maxX)curve.maxX=curvePoints[i].x;//计算(xi-x0)*...(xi-x5),并且把x0...x5保存for(j=0;j<pointNum;++j){if(j!=i){curve.factor[i]/=(curvePoints[i].x-curvePoints[j].x+1e-8);}}}
}double getInterpolation(int x,LagrangeCurve& lagrangeCurve)
{int i,j;double y=0;for(i=0;i<lagrangeCurve.minuend.size();++i){double temp=lagrangeCurve.factor[i];for(j=0;j<lagrangeCurve.minuend.size();++j){if(j!=i){temp*=(x-lagrangeCurve.minuend[j]);}}y+=temp;}return y;
}int main(int argc, const char * argv[])
{Mat img(256,256,CV_8UC3);img=Scalar::all(255);Point<int>*points=new Point<int>[3];points[0].x=10;points[0].y=30;points[1].x=100;points[1].y=70;;points[2].x=250;points[2].y=210;circle(img, cvPoint(points[0].x,points[0].y),5,Scalar::all(0),-1);circle(img, cvPoint(points[1].x,points[1].y),5,Scalar::all(0),-1);circle(img, cvPoint(points[2].x,points[2].y),5,Scalar::all(0),-1);LagrangeCurve lagrangeCurve;calLagrangePolynomial(lagrangeCurve,points,3);for(int i=lagrangeCurve.minX;i<lagrangeCurve.maxX;++i){double y=getInterpolation(i,lagrangeCurve);img.at<Vec3b>(static_cast<int>(y+0.5),i)=Vec3b(0,0,0);}imshow("img", img);waitKey(-1);return 0;
}

上述代码使用到了opencv画图,运行结果图如下:

转载于:https://www.cnblogs.com/hrlnw/p/5016700.html

拉格朗日插值编程实现相关推荐

  1. matlab有限域多项式除法_有限域GF(2^8)的四则运算及拉格朗日插值

    域的性质: 群和域在数学上的概念就不解释,可以参考维基百科.当然也可以参考<密码编码学与网络安全>这书的有限域一章.形象地说,域有这样一个性质:在加法和乘法上具有封闭性.也就是说对域中的元 ...

  2. matlab自带拉格朗日插值,MATLAB实现拉格朗日插值

    <MATLAB实现拉格朗日插值>由会员分享,可在线阅读,更多相关<MATLAB实现拉格朗日插值(14页珍藏版)>请在人人文库网上搜索. 1.实用标准文档文案大全数值分析上机报告 ...

  3. BZOJ 2137 submultiple(约数,拉格朗日插值求自然数k次幂和)【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 题目链接 https://hydro.ac/d/bzoj/p/2137 是 hydro 的 BZOJ ...

  4. P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演,拉格朗日插值)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 P6271 [湖北省队互测2014]一个人的数论(莫比乌斯反演,拉格朗日插值) Problem Sol ...

  5. 解题报告(三)多项式求值与插值(拉格朗日插值)(ACM / OI)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 繁凡出品的全新系列:解题报告系列 -- 超高质量算法题单,配套我写的超高质量的题解和代码,题目难度不一 ...

  6. 牛客挑战赛36 D. 排名估算( “概率论全家桶”,好题,拉格朗日插值求自然数 k 次幂之和)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://ac.nowcoder.com/acm/contest/3782/D ...

  7. P5667 拉格朗日插值2(拉格朗日插值,NTT, 倒推求逆元)

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 Weblink https://www.luogu.com.cn/problem/P5667 Prob ...

  8. 【学习笔记】拉格朗日插值

    整理的算法模板合集: ACM模板 目录 P4781 [模板]拉格朗日插值 重心拉格朗日插值法 拉格朗日插值法求系数 自然数k次幂的和 点我看多项式全家桶(●'◡'●) P4781 [模板]拉格朗日插值 ...

  9. 机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值

    机器学习数据预处理之缺失值:插值法填充+ lagrange插值+拉格朗日插值 garbage in, garbage out. 没有高质量的数据,就没有高质量的数据挖掘结果,数据值缺失是数据分析中经常 ...

最新文章

  1. 打开AD组策略编辑器提示“strings区段项目太长被截断”的解决
  2. 说实话,你工作5年,不知道什么是Java agent技术,让我很吃惊...
  3. Php7实现文件下载,PHP7 SFTP下载文件并重命名该下载文件
  4. intelli idea新建无scala class选项解决方案
  5. mysql合并表快速去重_MySQL数据表合并去重的简单实现方法
  6. 一文带你了解华为云DevCloud为何能全面领跑中国DevOps云服务市场
  7. 在使用 python 封装的进程池 from concurrent.futures import ProcessPoolExecutor 遇到的问题
  8. 冒泡排序--Java
  9. SCI EI 期刊等讨论站点
  10. (九)java多线程之CyclicBarrier
  11. paip.SOCKET抓包工具总结
  12. 交叉火力dsp手机调音软件_汽车音响DSP调音软件哪个好?8音度优美声喜力士常见车载DSP调音软件下载...
  13. UDP用户态协议栈详细实现
  14. GJB 5000B-2021下载-见文章结尾
  15. 软件工程毕设(五)·外文翻译
  16. vs2010开发activex(MFC)控件/ie插件(一)
  17. Android事件分发机制详解:史上最全面、最易懂
  18. 计算机界的传奇人物:高纳德
  19. mysql数据库启动_MySQL数据库之Mysql启动的方式(四种)
  20. 【二层网络和三层网络是什么?有什么区别?】

热门文章

  1. 使用zabbix监控MongoDB
  2. Google Web Brower
  3. 董淳光SQLITE3使用总结-转
  4. ajax成功后没有执行函数,ajax不执行回调函数
  5. python数据驱动登录_python之数据驱动ddt操作(方法三)
  6. [PHP]Yii rules常用规则
  7. 五大步完成JBOSS 5 多数据库的多数据源配置
  8. Ubuntu 16.04 PXE+kickstart部署系统
  9. Linux的用户和组管理
  10. spring配置 quartz-config.xml