单片机c语言拟合二次曲线y=a0+a1x+a2x^2

本文介绍了如何使用C语言在单片机上进行抛物线拟合,以显示AD值与距离的关系。通过最小二乘法,将x和x^2视为变量,构建正则方程并求解逆矩阵,最终实现抛物线的数学模型。代码简化了伴随矩阵的计算,减少了运算量,并与Excel结果进行了比较。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作业需要,需要在单片机上显示距离与ad值大小的关系,理论推倒得到这两个的关系是抛物线,因此查书写了这段c语言程序。
具体的证明过程我也不会,书上提到了对于抛物线采用多项式拟合的方法,好像是将x,x^2,看成了两个变量。
但核心公式只有一个,下面这个正则方程组
在这里插入图片描述
把上面这个方程简写成 xa=y(x、a、y分别对应一个矩阵)可以得到a=x^(-1)y
其中x^(-1)表示x的逆矩阵
具体的算法步骤是
1.求x的伴随矩阵
2.对矩阵x进行行列式操作
3.x的逆矩阵=x的伴随矩阵/x的行列式的值
4计算x^(-1)y
在下面的代码中对求伴随矩阵进行了简化,减少了一点运算量。

#include "stdio.h"
#ifndef uint8
 #define uint8 unsigned short int
#endif
char Least_Squarel_Linear_Fit_y_2a0_4a1x_4a2xx(float *x,float *y,uint8 n,float *a0,float *a1,float *a2)
{
  float temp=0;
  float x0=n,x1=0,x2=0,x3=0,x4=0,x0y1=0,x1y1=0,x2y1=0;//表示各项的求和
  float x0x2,x0x3,x0x4,x1x1,x1x2,x1x3,x1x4,x2x2,x2x3,x2x4,x3x3;
  float a_banshui[3][3],a_ni[3][3];//这个是伴随矩阵和逆矩阵
  float a_abs;//矩阵a的行列式
  for(uint8 i=0;i<n;i++)
  {
    x0y1+=*(y+i);
    temp=*(x+i);
    x1+=temp;
    x1y1+=temp*(*(y+i));
    temp*=*(x+i);
    x2+=temp;
    x2y1+=te
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值