发新帖本帖赏金 10.00元(功能说明)我要提问
返回列表
打印
[STM32]

在 单片机上做插值算法——拉格朗日插值

[复制链接]
7715|17
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
本帖最后由 一路向北lm 于 2021-1-21 18:39 编辑

#申请原创# 第一步,学你所学,不懂也得懂,最枯燥的数学公式来了     

数值分析中,拉格朗日插值法是以法国十八世纪数学家约瑟夫·拉格朗日命名的一种多项式插值方法。许多实际问题中都用函数来表示某种内在联系或规律,而不少函数都只能通过实验和观测来了解。如对实践中的某个物理量进行观测,在若干个不同的地方得到相应的观测值,拉格朗日插值法可以找到一个多项式,其恰好在各个观测的点取到观测到的值。这样的多项式称为拉格朗日(插值)多项式。数学上来说,拉格朗日插值法可以给出一个恰好穿过二维平面上若干个已知点的多项式函数。拉格朗日插值法最早被英国数学家爱德华·华林于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,m
     int k,m;
     //插值基函数中的上下累乘temp1,temp2
     float temp1,temp2;
     for(k=0;k<n;k++)
     {
         temp1=1.0;
         temp2=1.0;
         for(m=0;m<n;m++)
         {
             if(m==k)
             {
                 continue;
             }
             temp1 *= (t-x[m]);
             temp2 *= (x[k]-x[m]);
         }
         LValue[k]=temp1/temp2;
     }
     for(int i=0;i<n;i++)
     {
         yResult += y[i]*LValue[i];
     }
     return yResult;
}
第三步,测试线性插值效果
1.给写入的算法送入斜线的3个点,来预测此区间的其它点,发现预测出的线性值很好,线性度很饱满。

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


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

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


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



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



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


使用特权

评论回复

打赏榜单

21小跑堂 打赏了 10.00 元 2021-01-22
理由:恭喜通过原创文章审核!请多多加油哦!

相关帖子

沙发
雪山飞狐D| | 2021-1-21 23:45 | 只看该作者
可以,MARK,关注

使用特权

评论回复
板凳
一路向北lm|  楼主 | 2021-1-22 09:45 | 只看该作者

感谢支持

使用特权

评论回复
地板
xjl85| | 2021-1-22 10:04 | 只看该作者
学习了,这个做运动控制算法的时候会用到吧

使用特权

评论回复
5
一路向北lm|  楼主 | 2021-1-22 10:20 | 只看该作者
xjl85 发表于 2021-1-22 10:04
学习了,这个做运动控制算法的时候会用到吧

很多地方会用  路径算法经常用

使用特权

评论回复
6
coody| | 2021-1-22 17:23 | 只看该作者
我DIY示波器,用的抛物线插值。

使用特权

评论回复
7
一路向北lm|  楼主 | 2021-1-22 20:30 | 只看该作者
coody 发表于 2021-1-22 17:23
我DIY示波器,用的抛物线插值。

可以分享一下哈

使用特权

评论回复
8
crazyren| | 2021-1-26 18:00 | 只看该作者
楼主试试, 采样点加上一定噪声后会咋样

使用特权

评论回复
9
William1994| | 2021-2-1 12:28 | 只看该作者
crazyren 发表于 2021-1-26 18:00
楼主试试, 采样点加上一定噪声后会咋样

插值点数越多,抗噪性越差。

使用特权

评论回复
10
dw772| | 2021-8-24 23:11 | 只看该作者
不错,谢谢分享

使用特权

评论回复
11
xad74| | 2021-9-2 08:05 | 只看该作者
很好,仔细研究一下

使用特权

评论回复
12
linred| | 2021-9-27 01:06 | 只看该作者
学习i了,谢谢分享

使用特权

评论回复
13
52mcu| | 2021-9-27 20:54 | 只看该作者
Qt是用 QChart 绘制的曲线吗?

使用特权

评论回复
14
ifxz0123| | 2021-9-29 10:16 | 只看该作者
coody 发表于 2021-1-22 17:23
我DIY示波器,用的抛物线插值。

可怜的我,DIY的示波器都没插值,简单粗暴的把相邻的两个点直线连接起来

使用特权

评论回复
15
arima| | 2021-10-24 23:01 | 只看该作者
期待牛顿插值、三次样条插值续集。。。



使用特权

评论回复
16
qin552011373| | 2021-11-3 15:44 | 只看该作者
不错不错

使用特权

评论回复
17
ewfrg| | 2023-9-5 10:12 | 只看该作者
厉害学习了

使用特权

评论回复
18
zwsam| | 2024-1-27 09:23 | 只看该作者

使用特权

评论回复
发新帖 本帖赏金 10.00元(功能说明)我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

277

主题

3815

帖子

76

粉丝