C语言全程线性分段插值算法

来源:本站
导读:目前正在解读《C语言全程线性分段插值算法》的相关信息,《C语言全程线性分段插值算法》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《C语言全程线性分段插值算法》的详细说明。
简介:本文给出一个用C语言实现全程线性分段插值算法的程序。

解决传感器数据线性不好或非线性问题,实现低次多项插值算法,其曲线逼近程度即插值函数与原函数误差基本满足一般的工业控制场合需要。此算法占用系统资源少,在数据采集和数据处理等工业控制领域,往往使用单片机或嵌入式系统等资源受限处理器,通过分段线性插值算法简化原函数,很多乘除法运算优化成加减法,减少计算量,在没有乘法器的单片机上也能有很好的表现。

int linear_x8_y8(uint8_t xn,uint8_t x1,uint8_t x2,uint8_t y1,uint8_t y2)

{

int yn;

uint8_t tmp;

if(xn<x1)

{

yn=y1;

}

else if(xn>x2)

{

yn=y2;

}

else

{

if(y1<y2)

{

yn=y2-y1;

tmp=xn-x1;

yn=yn*tmp;

tmp=x2-x1;

yn=yn+(tmp/2);

yn=yn/tmp;

yn=y1+yn;

}

else

{

yn=y1-y2;

tmp=xn-x1;

yn=yn*tmp;

tmp=x2-x1;

yn=yn+(tmp/2);

yn=yn/tmp;

yn=y1-yn;

}

}

return(yn);

}

int lin_clac_x8_y8(uint8_t xn,uint8_t *queue_x,uint8_t *queue_y,uint8_t n)

{

uint8_t i;

int yn;

for(i=1;i<(n-1);i++){

if(xn<=queue_x)break;}

yn=linear_x8_y8(xn,queue_x[i-1],queue_x,queue_y[i-1],queue_y);

return (yn);

}

调用示例: uint8_t x[15]={0,52,58,66,72,80,87,92,99,115,139,150,168,186,214,248},y[15]={0,68,73,81,87,94,101,108,114,131,153,166,183,202,229,263};

resul=lin_clac_x8_y8(resul,(uint8_t*)x,(uint8_t*)y,15);

提醒:《C语言全程线性分段插值算法》最后刷新时间 2024-03-14 01:01:22,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《C语言全程线性分段插值算法》该内容的真实性请自行鉴别。