如题,matlab版本R2011b。M函数里可以直接调用inv()函数求矩阵的逆,但是用在S函数里就会报错,错误信息如下:
正在创建库 C:\DOCUME~1\140508~1\LOCALS~1\TEMP\MEX_YP~1\templib.x 和对象 C:\DOCUME~1\140508~1\LOCALS~1\TEMP\MEX_YP~1\templib.exp
kalmanfilter.obj : error LNK2019: 无法解析的外部符号 _inv,该符号在函数 _mdlOutputs 中被引用
kalmanfilter.mexw32 : fatal error LNK1120: 1 个无法解析的外部命令
代码如下:
static void mdlOutputs(SimStruct *S, int_T tid)
{
int_T i;
InputRealPtrsType uPtrs0 = ssGetInputPortRealSignalPtrs(S,0); //上次SOC
InputRealPtrsType uPtrs1 = ssGetInputPortRealSignalPtrs(S,1); //电流值
InputRealPtrsType uPtrs2 = ssGetInputPortRealSignalPtrs(S,2); //电压值
InputRealPtrsType uPtrs3 = ssGetInputPortRealSignalPtrs(S,3); //上次均方误差P+
real_T *y0 = ssGetOutputPortRealSignal(S,0); //本次电流积分值
real_T *y1 = ssGetOutputPortRealSignal(S,1); //本次由电流和SOC计算得到的模型电压值
real_T *y2 = ssGetOutputPortRealSignal(S,2); //本次均方误差中间值P-
real_T *y3 = ssGetOutputPortRealSignal(S,3); //本次滤波系数CK
real_T *y4 = ssGetOutputPortRealSignal(S,4); //本次增益系统LK
real_T *y5 = ssGetOutputPortRealSignal(S,5); //本次滤波后的SOC
real_T *y6 = ssGetOutputPortRealSignal(S,6); //本次均方误差P+
*y0 = (*uPtrs0[0]) - (*uPtrs1[0])/3600000;
*y1 = (3.6155)-(0.0162/(*y0))-(0.1284*(*y0))+(0.0205*(log(*y0)))+((-0.0982)*(log(1-(*y0))));
*y2 = (*uPtrs0[0]) + 0.001;
*y3 = ((0.0162/((*y0)*(*y0))) - 0.1284+ (0.0205/(*y0)) -((-0.0982)/(1 - (*y0))));
*y4 = ((*y2)*(*y3))/(inv(((*y3) * (*y2) * (*y3)) + 0.01));
*y5 = (*y0) + (*y4)*((*uPtrs2[0]) - (*y1));
*y6 = (1 - (*y4)*(*y3))*(*y2);
}