请教用C++在430单片机里编程实现以下功能

来源:百度知道 编辑:UC知道 时间:2024/06/01 13:34:36
曲线:y =0.5300627506e-7*x^4+0.1594763905e-5*x^3+0.3041215043e-4*x^2-0.5048487173e-1*x-0.3211870392e-2

其反函数为:x =0.2062018285*(y)^4-0.2834297719*(y)^3+0.2187653396*(y)^2-19.79770112*(y)-0.6212123751e-1

拟合直线:y=0.0501x(这是用MATLAB拟合的,但是C++编程好像用不着,而只要函数与反函数就可以,在这也一起给出吧)

X为输入电压,Y为传感器和放大器出来后的电压,由于输出对输入的线性不理想,想通过单片机对其处理,现已拟合出X,Y的曲线关系及该曲线的反函数,需用C++编程,实现输入x时,对应的从单片机能输出通过曲线及其反函数拟合出的直线上的y值,即用单片机进行线性化处理。
谢谢高手的指点,请给出程序,及程序关键部分的文字说明,可以是单纯的c++程序,不考虑430的管脚,
觉得好我会再追加50分,先谢谢啊
应该是用C语言编
拟合直线:y=0.0501x+0.0033
就是想编个程序把输出值y拟合到一条直线上,如果不加单片机,由输入x和输出y的值构成的是一条曲线,我想用单片机编程把这条曲线映射到直线上(曲线是由最小二乘法得到的拟合直线),这样在输入原来的X值时,输出来的y值是落在这条直线上的,就是用软件的方式做线性处理

直接用单片机做直线拟合。
假定输入N 对 y[i] 和 x[i],i=0,1,2...N-1。
配 直线方程 y=kx+b

#include <stdio.h>
#include <stdlib.h>

void main()
{
double x[]={1,2,3,4,5,6,7,8,9,10};
double y[]={0.9,2.1,3.0,4.0,5.1,5.9,7.0,8.1,8.9,10.0};
int N=10;
double A=0.0,B=0.0,C=0.0,D=0.0;
int i,j;
double k,b;

// 这里插入
// 给出个数据个数,动态分配x,y单元
// 读入 x,y数据输入
// 当然控制A/D转换,取得数据也可以
// 直线拟合如下

for (i=0;i<N;i++) A = A+ y[i];
for (i=0;i<N;i++) B = B+ x[i];
for (i=0;i<N;i++) C=C + x[i]*y[i];
for (i=0;i<N;i++) D=D + x[i]*x[i];

// y=kx + b;
k = (A * B - C * N)/(B * B - D * N);
b = (B*C - A * D) / (B * B - D * N);
printf("y=%lf * x + %lf\n",k,b);
}

楼主英明,分别浪费了,给我吧。