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

📄 agvfct.c

📁 KALMTOOL工具箱2.0版
💻 C
字号:
#define PMN_PI 3.141592653589793108624468950438
int agvobs(matrix *ybar, matrix *xbar, matrix *wmean, int flag);
int agvtu(matrix *xbar, matrix *xhat, matrix *u, matrix *vmean, int flag);

int agvobs(matrix *ybar, matrix *xbar, matrix *w, int flag)
{
   int i, j;
   double dum;
   double *ptm1, *ptm2;
   static int nx, ny;
   static matrix *C;
   
   /* Initializations */
   if (flag == -1){
      nx = 6;
      ny = 3;
      C = mmake(ny,nx); minit(C);
      put_val(C,0,0,1.0); put_val(C,1,1,1.0); put_val(C,2,2,1.0);   
      return 0;
   }
   
   /* Clean up */
   else if (flag == -2){
      mfree(C);
      return 0;
   }
   
   /* Normal call of function */
   else{
      ptm1 = C->mat[0];
      for(i=0; i<ny; i++){
         dum  = cvget(w,i);
         for(j=0, ptm2=xbar->mat[0];j<nx;j++)
	    dum += *(ptm1++)* *(ptm2++);
	 cvput(ybar,i,dum);
      }
      return 0;
   }
}



int agvtu(matrix *xbar, matrix *x, matrix *u, matrix *v, int flag)
{
   int N;
   double kenc, u0, u1, s, t;
   static int nx, ny;
   static double k1;
   
   /* Initializations */
   if (flag == -1){
      kenc = 800/2/PMN_PI;
      N  = 36;
      k1 = 1/(kenc*N);
      return 0;
   }
   
   /* Clean up */
   else if (flag == -2){
      return 0;
   }
   
   /* Normal call of function */
   else{
      u0 = cvget(u,0) + cvget(v,0);   /* Add process noise */
      u1 = cvget(u,1) + cvget(v,1);
      
      s  = 0.5*k1*(cvget(x,3)*u0+cvget(x,4)*u1);
      t  = 0.5*k1*(cvget(x,3)*u0-cvget(x,4)*u1)/cvget(x,5);

      cvput(xbar,0,cvget(x,0)+s*cos(cvget(x,2)+t));
      cvput(xbar,1,cvget(x,1)+s*sin(cvget(x,2)+t));
      cvput(xbar,2,cvget(x,2)+2*t);

      cvput(xbar,3,cvget(x,3));
      cvput(xbar,4,cvget(x,4));
      cvput(xbar,5,cvget(x,5));

      return 0;
   }
}

⌨️ 快捷键说明

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