⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 text1.lst

📁 最小二乘法拟合用在嵌入式系统的代码,单片机上可以测试过
💻 LST
字号:
C51 COMPILER V7.50   TEXT1                        07/13/2006 16:14:03 PAGE 1   


C51 COMPILER V7.50, COMPILATION OF MODULE TEXT1
OBJECT MODULE PLACED IN .\output\Text1.obj
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE Text1.c LARGE BROWSE DEBUG OBJECTE
                    -XTEND PAGEWIDTH(79) PAGELENGTH(66) OBJECT(.\output\Text1.obj)

line level    source

   1          /*拟合直线方程为y = ax +b*/
   2          #include <stdio.h>
   3          #include <reg51f.h>
   4          #define N_MAX  20    //拟合折线的总数据个数
   5          #define N_TOTAL 15   //实际需拟合折线的总数据个数
   6          #define N_SECTION 3  //一段拟合的数据个数
   7          #define SECTION 5//段数
   8          unsigned int x[N_MAX] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15};
   9          unsigned int y[N_MAX] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15}; //
             -拟合折线的数据
  10          unsigned int dx[N_SECTION],dy[N_SECTION]; //一段拟合的数据
  11          long k[2][3],m1,m2,m0;
  12          int i = 0,j = 0;
  13          //求∑Ai*Bi
  14          long fsum(unsigned int *a,unsigned int *b,int c)
  15          {
  16   1              long sum=0;
  17   1              for(i=0;i < c;i++)
  18   1                      sum+=a[i]*b[i];
  19   1              return sum; 
  20   1      }
  21          
  22          //求矩阵
  23          long fmatrix(unsigned char m,unsigned char n)
  24          {
  25   1              long matrix;
  26   1              matrix=k[0][m]*k[1][n]-k[0][n]*k[1][m];
  27   1              return matrix;
  28   1      }
  29          //求折线参数
  30          void get_value(float *pa,float *pb)
  31          {
  32   1              long n_section_temp;
  33   1              unsigned int mi[N_SECTION] = {1,1,1};                //大
             -小为1的数列,矩阵求和时匹配使
  34   1            for(i=0;i < N_SECTION;i++)
  35   1                      {
  36   2                     mi[i]=1;
  37   2                      }
  38   1              n_section_temp = (long) N_SECTION;
  39   1      //求线性方程系数
  40   1              k[0][0]=fsum(dx,dx,n_section_temp);
  41   1              k[0][1]=fsum(dx,mi,n_section_temp);
  42   1              k[0][2]=-fsum(dx,dy,n_section_temp);
  43   1              k[1][0]=fsum(dx,mi,n_section_temp);
  44   1              k[1][1]=n_section_temp;
  45   1              k[1][2]=-fsum(mi,dy,n_section_temp);
  46   1      //输出线性方程系数
  47   1              m0=fmatrix(0,1);
  48   1              m1=fmatrix(1,2);
  49   1              m2=fmatrix(2,0);
  50   1      
  51   1       //       if(m0==0) return ;
  52   1      //      else
  53   1      //      {        
  54   1              *pb = (float) (m2/m0);
C51 COMPILER V7.50   TEXT1                        07/13/2006 16:14:03 PAGE 2   

  55   1              *pa = (float) (m1/m0);
  56   1      //      }
  57   1      }/*
  58          void get_value(float *pa,float *pb)
  59          {
  60          *pa = 9;
  61          *pb = 8;
  62          }*/
  63          //求最大值
  64          float get_max(float * pp,int pp_size)
  65          {
  66   1              float max_temp = *pp;
  67   1              for(i = 1;i<pp_size;i++)
  68   1              {
  69   2              if(max_temp<*(pp+i))
  70   2              {
  71   3              max_temp = *(pp+i);
  72   3              }
  73   2              }
  74   1              return max_temp;
  75   1      }
  76          main()
  77          {
  78   1              float aBuffer[SECTION],bBuffer[SECTION];
  79   1              TI = 1;
  80   1              printf("HELLO");
  81   1              TI = 0;
  82   1              i = 1;
  83   1              for(i = 0;i<2;i++)
  84   1              {
  85   2                      for(j = 0;j<N_SECTION;j++)
  86   2                      {
  87   3                      dx[j] = x[i*N_SECTION+j];
  88   3                      dy[j] = y[i*N_SECTION+j];
  89   3                      }
  90   2                      get_value(aBuffer+i,bBuffer+i);
  91   2              }
  92   1              for(i = 0;i<SECTION;i++)
  93   1              {
  94   2                      TI = 1;
  95   2                      printf("a = %lf,b = %lf",*(aBuffer+i),*(bBuffer+i));
  96   2                      TI = 0;
  97   2              }
  98   1      /*      dx[0] = 1;dx[1] = 2;dx[2] = 3;
  99   1              dy[0] = 4;dy[1] = 7;dy[2] = 10;
 100   1              get_value(aBuffer,bBuffer);
 101   1              TI = 1;
 102   1              printf("a = %lf,b = %lf",*aBuffer,*bBuffer);
 103   1              TI = 0;*/
 104   1              while(1);
 105   1      }


MODULE INFORMATION:   STATIC OVERLAYABLE
   CODE SIZE        =   1346    ----
   CONSTANT SIZE    =     28    ----
   XDATA SIZE       =    132      79
   PDATA SIZE       =   ----    ----
   DATA SIZE        =   ----    ----
   IDATA SIZE       =   ----    ----
   BIT SIZE         =   ----    ----
END OF MODULE INFORMATION.


C51 COMPILATION COMPLETE.  0 WARNING(S),  0 ERROR(S)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -