| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
- #include "my_math.h"
- #include "stdint.h"
- #include "stdarg.h"
- void Least_Squares(uint8_t n, float x[], uint32_t y[], float* slope, float* intercept)
- {
- float sumX = 0.0, sumY = 0.0, sumXY = 0.0, sumX2 = 0.0;
- // 计算各个累加和
- for (int i = 0; i < n; i++) {
- sumX += x[i];
- sumY += y[i];
- sumXY += x[i] * y[i];
- sumX2 += x[i] * x[i];
- }
- // 计算斜率和截距
- float denominator = n * sumX2 - sumX * sumX;
- *slope = (n * sumXY - sumX * sumY) / denominator;
- *intercept = (sumY - *slope * sumX) / n;
- }
- void buf2int(int *tint, unsigned char *buf)
- {
- int i;
- unsigned char * p1 = (unsigned char *)tint;
- unsigned char * p3 = buf;
- for (i = 0; i < 4; i++)
- {
- *p1 = *p3;
- p1++;
- p3++;
- }
- }
- float average(int n_values, ...)
- {
- va_list var_arg;
- int count;
- float sum = 0;
- /*** 准备访问可变参数 ***/
- va_start(var_arg, n_values);
- /*** 添加取自可变参数列表的值 ***/
- for (count = 0; count < n_values; count++)
- {
- sum += va_arg(var_arg, int);
- }
- /*** 完成处理可变参数 ***/
- va_end(var_arg);
- return sum / n_values;
- }
- #if 0
- /*位倒序*/
- uint8_t Bit_Reversed(uint8_t data)
- {
- uint8_t result = 0;
- for(uint8_t i = 0; i < 8; i++)
- {
- result = ((data >> i) & 0x01) | result;
- if(i < 7)
- {
- result = result << 1;
- }
- }
- return result;
- }
- void least_squares(uint8_t n, float x[], float y[], float* slope, float* intercept)
- {
- float sumX = 0.0, sumY = 0.0, sumXY = 0.0, sumX2 = 0.0;
- // 计算各个累加和
- for (int i = 0; i < n; i++) {
- sumX += x[i];
- sumY += y[i];
- sumXY += x[i] * y[i];
- sumX2 += x[i] * x[i];
- }
- // 计算斜率和截距
- float denominator = n * sumX2 - sumX * sumX;
- *slope = (n * sumXY - sumX * sumY) / denominator;
- *intercept = (sumY - *slope * sumX) / n;
- }
- #endif
|