VS2010环境下编写C程序,提示缺少“)”、“{”等符号,是哪个地方出错了?我把代码贴出来,还望大神指导一下,多谢!
#define N 10 /Kalman滤波器追踪点数/
typedef struct Kalman_state
{
float x[2][1]; /状态矩阵/
float A[2][2]; /转移矩阵/
float H[2][2]; /测量矩阵/
float Q[2][2]; /系统噪声矩阵/
float P[2][2]; /协方差矩阵/
float K[2][2]; /Kalman增益/
float R[2][2]; /测量噪声矩阵/
};
void Kalman_init(Kalman_state *state)
{
//state->x = {900,0}
state->x[0][0] = 900;
state->x[1][0] = 0;
for(int i = 1; i < N-1; i++)
{
state->x[0][i] = 0;
state->x[1][i] = 0;
}
//state->P_last = {{30,0},{0,50}}
state->P[0][0] = 30;
state->P[0][1] = 0;
state->P[1][0] = 0;
state->P[1][1] = 50;
//state->A = {{1,0},{0,1}}
state->A[0][0] = 1;
state->A[0][1] = 0;
state->A[1][0] = 0;
state->A[1][1] = 1;
//state->H = {{1,0},{0,1}}
state->H[0][0] = 1;
state->H[0][1] = 0;
state->H[1][0] = 0;
state->H[1][1] = 1;
//state->Q = {{50,0},{0,13}}
state->Q[0][0] = 1;
state->Q[0][1] = 0;
state->Q[1][0] = 0;
state->Q[1][1] = 1;
//state->R = {{80,0},{0,0}}
state->R[0][0] = 80;
state->R[0][1] = 0;
state->R[1][0] = 0;
state->R[1][1] = 0;
}
float Kalman_filter(Kalman_state state, float s_measure)
{
float P_mid[2][2];
float temp_P[2][2];
float temp_HP[2][2];
float A_T[2][2];
float H_T[2][2];
float temp_PH_T[2][2];
float temp_RHPH_T[2][2];
float temp_RHPH_T_STAR[2][2];
float temp_RHPH_T_NI[2][2];
float temp_sHx[2][N];
float temp_KsHx[2][N];
float temp_IKH[2][2];
float s[2][N];
float m;
float v = 20;
for(int i = 0; i < N; i++)
{
s[0][i] = s_measure + v * i + rand()%100 + 1;
s[1][i] = 0;
}
for(int i = 0; i < N; i++)
{
/x(n|n-1) = Ax(k-1|k-1)/
state->x[0][i] = state->A[0][0] * state->x[0][i] + state->A[0][1] * state->x[0][i];
state->x[1][i] = state->A[1][0] * state->x[0][i] + state->A[1][1] * state->x[0][i];
/*P(n|n-1)=A*P(n-1|n-1)A^T+Q */
//***A*P(n-1|n-1)
temp_P[0][0] = state->A[0][0] * state->P[0][0] + state->A[0][1] * state->P[1][0];
temp_P[0][1] = state->A[0][0] * state->P[0][1] + state->A[0][1] * state->P[1][1];
temp_P[1][0] = state->A[1][0] * state->P[0][0] + state->A[1][1] * state->P[1][0];
temp_P[1][1] = state->A[1][0] * state->P[0][1] + state->A[1][1] * state->P[1][1];
//***A^T
A_T[0][0] = state->A[0][0];
A_T[0][1] = state->A[1][0];
A_T[1][0] = state->A[0][1];
A_T[1][1] = state->A[1][1];
//***P(n|n-1)=A*P(n-1|n-1)A^T+Q
state->P[0][0] = temp_P[0][0] * A_T[0][0] + temp_P[0][1] * A_T[1][0] + state->Q[0][0];
state->P[0][1] = temp_P[0][0] * A_T[0][1] + temp_P[0][1] * A_T[1][1] + state->Q[0][1];
state->P[1][0] = temp_P[1][0] * A_T[0][0] + temp_P[1][1] * A_T[1][0] + state->Q[1][0];
state->P[1][1] = temp_P[1][0] * A_T[0][1] + temp_P[1][1] * A_T[1][1] + state->Q[1][1];
/*K = P * H^T /[R + H * P * H^T] */
//***H*P
temp_HP[0][0] = state->H[0][0] * state->P[0][0] + state->H[0][1] * state->P[1][0];
temp_HP[0][1] = state->H[0][0] * state->P[0][1] + state->H[0][1] * state->P[1][1];
temp_HP[1][0] = state->H[1][0] * state->P[0][0] + state->H[1][1] * state->P[1][0];
temp_HP[1][1] = state->H[1][0] * state->P[0][1] + state->H[1][1] * state->P[1][1];
//***H^T
H_T[0][0] = state->H[0][0];
H_T[0][1] = state->H[1][0];
H_T[1][0] = state->H[0][1];
H_T[1][1] = state->H[1][1];
//***R + H * P * H^T
temp_RHPH_T[0][0] = state->R[0][0] + temp_HP[0][0] * H_T[0][0] + temp_HP[0][1] * H_T[1][0];
temp_RHPH_T[0][1] = state->R[0][1] + temp_HP[0][0] * H_T[0][1] + temp_HP[0][1] * H_T[1][1];
temp_RHPH_T[1][0] = state->R[1][0] + temp_HP[1][0] * H_T[0][0] + temp_HP[1][1] * H_T[1][0];
temp_RHPH_T[1][1] = state->R[1][1] + temp_HP[1][0] * H_T[0][1] + temp_HP[1][1] * H_T[1][1];
//***R + H * P * H^T的逆运算
m = temp_RHPH_T[0][0] * temp_RHPH_T[1][1] - temp_RHPH_T[0][1] * temp_RHPH_T[1][0];
temp_RHPH_T_STAR[0][0] = temp_RHPH_T[1][1];
temp_RHPH_T_STAR[0][1] = temp_RHPH_T[1][0];
temp_RHPH_T_STAR[1][0] = temp_RHPH_T[0][1];
temp_RHPH_T_STAR[1][1] = temp_RHPH_T[0][0];
temp_RHPH_T_NI[0][0] = temp_RHPH_T_STAR[0][0] / m;
temp_RHPH_T_NI[0][1] = temp_RHPH_T_STAR[0][1] / m;
temp_RHPH_T_NI[1][0] = temp_RHPH_T_STAR[1][0] / m;
temp_RHPH_T_NI[1][1] = temp_RHPH_T_STAR[1][1] / m;
//***P * H^T
temp_PH_T[0][0] = state->P[0][0] * H_T[0][0] + state->P[0][1] * H_T[1][0];
temp_PH_T[0][1] = state->P[0][0] * H_T[0][1] + state->P[0][1] * H_T[1][1];
temp_PH_T[1][0] = state->P[1][0] * H_T[0][0] + state->P[1][1] * H_T[1][0];
temp_PH_T[1][1] = state->P[1][0] * H_T[0][1] + state->P[1][1] * H_T[1][1];
//***K = P * H^T /[R + H * P * H^T]
state->K[0][0] = temp_PH_T[0][0] * temp_RHPH_T_NI[0][0] + temp_PH_T[0][1] * temp_RHPH_T_NI[1][0];
state->K[0][1] = temp_PH_T[0][0] * temp_RHPH_T_NI[0][1] + temp_PH_T[0][1] * temp_RHPH_T_NI[1][1];
state->K[1][0] = temp_PH_T[1][0] * temp_RHPH_T_NI[0][0] + temp_PH_T[1][1] * temp_RHPH_T_NI[1][0];
state->K[1][1] = temp_PH_T[1][0] * temp_RHPH_T_NI[0][1] + temp_PH_T[1][1] * temp_RHPH_T_NI[1][1];
/*x(n|n) = x(n|n-1) + K(n) * [s - H(n)*x(n|n-1)] */
//***s - H(n)*x(n|n-1)
temp_sHx[0][i] = s[0][i] - (state->H[0][0] * state->x[0][i] + state->H[0][1] * state->x[1][i]);
temp_sHx[1][i] = s[1][i] - (state->H[1][0] * state->x[0][i] + state->H[1][1] * state->x[1][i]);
//***K(n) * [s - H(n)*x(n|n-1)]
temp_KsHx[0][i] = state->K[0][0] * temp_sHx[0][i] + state->K[0][1] * temp_sHx[1][i];
temp_KsHx[1][i] = state->K[1][0] * temp_sHx[0][i] + state->K[1][1] * temp_sHx[1][i];
//***x(n|n) = x(n|n-1) + K(n) * [s - H(n)*x(n|n-1)]
state->x[0][i+1] = state->x[0][i] + temp_KsHx[0][i];
state->x[1][i+1] = state->x[1][i] + temp_KsHx[0][i];
/*P(n|n) = [I - K * H] * P(n|n-1)*/
//***I - K * H
temp_IKH[0][0] = 1 - (state->K[0][0] * state->H[0][0] + state->K[0][1] * state->H[1][0]);
temp_IKH[0][1] = 1 - (state->K[0][0] * state->H[0][1] + state->K[0][1] * state->H[1][1]);
temp_IKH[1][0] = 1 - (state->K[1][0] * state->H[0][0] + state->K[1][1] * state->H[1][0]);
temp_IKH[1][1] = 1 - (state->K[1][0] * state->H[0][1] + state->K[1][1] * state->H[1][1]);
//***P(n|n) = [I - K * H] * P(n|n-1)
state->P[0][0] = temp_IKH[0][0] * temp_P[0][0] + temp_IKH[0][1] * temp_P[1][0];
state->P[0][1] = temp_IKH[0][0] * temp_P[0][1] + temp_IKH[0][1] * temp_P[1][1];
state->P[0][0] = temp_IKH[1][0] * temp_P[0][0] + temp_IKH[1][1] * temp_P[1][0];
state->P[0][0] = temp_IKH[1][0] * temp_P[0][1] + temp_IKH[1][1] * temp_P[1][1];
}
for(int i = 0; i < N; i++)
{
printf("预测值为:%f\n",state->x[0][i]);
}
}
出现的错误提示是:
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(7): error C2143: 语法错误 : 缺少“)”(在“”的前面)
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(7): error C2143: 语法错误 : 缺少“{”(在“”的前面)
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(7): error C2059: 语法错误:“)”
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(8): error C2054: 在“state”之后应输入“(”
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(44): error C2143: 语法错误 : 缺少“)”(在“”的前面)
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(44): error C2143: 语法错误 : 缺少“{”(在“”的前面)
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(44): error C2059: 语法错误:“类型”
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(44): error C2059: 语法错误:“)”
1> KalFilterMain.c
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(7): error C2143: 语法错误 : 缺少“)”(在“”的前面)
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(7): error C2143: 语法错误 : 缺少“{”(在“”的前面)
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(7): error C2059: 语法错误:“)”
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(8): error C2054: 在“state”之后应输入“(”
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(44): error C2143: 语法错误 : 缺少“)”(在“”的前面)
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(44): error C2143: 语法错误 : 缺少“{”(在“”的前面)
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(44): error C2059: 语法错误:“类型”
1>e:\程序\kalmanfilter\progrem\kalmanfilter\kalmanfilter\kalmanfilter.c(44): error C2059: 语法错误:“)”