如何在单片机上做插值算法?

电子说

1.3w人已加入

描述

第一步:学你所学,不懂也得懂,最枯燥的数学公式来了

在数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。   如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。   数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数。拉格朗日插值法最早被英国数学家爱德华·华林于1779年发现,不久后(1783年)由莱昂哈德·欧拉再次发现。1795年,拉格朗日在其著作《师范学校数学基础教程》中发表了这个插值方法,从此他的名字就和这个方法联系在一起。
 

插值算法



第二步:构造拉格朗日插值算法函数,并使用C/C++ 语言实现 

插值算法

 

//预先定义插值节点的个数为1000个,根据控制台输入的个数num从而确定插值节点的个数const int N=1000;// 拉格朗日插值算法float lglr(float x[], float y[],int n,float t){float yResult=0.0;//LValue[N]存放的是每次求解的插值基函数的通项float LValue[N];//循环变量k,mint k,m;//插值基函数中的上下累乘temp1,temp2float temp1,temp2;for(k=0;k

插值算法


2.同样是给写入的算法送入正弦曲线3个点,来预测此区间的其它点,发现预测出的正弦曲线不太理想,相关度很差。
 

插值算法

  3.增加给写入的算法送入正弦曲线的点数到10个点,来预测此区间的其它点,发现预测出的正弦曲线已达到要求,相关度很好。  

插值算法


  4.下面是使用matlab在绘制的图像,分别是线性3点、正弦3、5、10的和原始值对比的图像。  

插值算法



第四步:移植到单片机使用串口输出测试插值效果,效果还可以哦!

插值算法



第四步:进阶完善,有点不甘心,使用Qt 搭了一个界面,做了一下可视化。  你别说效果还可以,Qt界面代码 放到了 gitee有兴趣的来一起完善 https://gitee.com/lumengcode/my-qt/tree/master/MathTool/MathTool



        插值题外话:
       
      关于插值算法:可以继续完善  牛顿插值、三次样条插值等,都很好玩! 

 

原文标题:教你在单片机上做插值算法

文章出处:【微信公众号:嵌入式ARM】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分