用途:把使用旧式分离复数(SC)API 的 MATLAB MEX 源码升级到交错复数(IC)API,适用于仍调用 mxGetPr/mxGetPi、mxGetData/mxGetImagData、mxSetPr/mxSetPi 的 C、C++、Fortran 文件,或用 mex -R2018a 构建、以及需要提升大复数数组性能的场景。不适用于从零编写新 MEX(应直接用 mxGetDoubles、mxGetComplexDoubles 等类型化访问器)、C++ MEX API(matlab::mex::Function)、已使用类型化访问器的代码。
主要能力:按 7 步流程执行——升级前核查 SC 调用与复数处理情况;确认输出到新文件还是就地修改;选择 IC-only 或 SC/IC 守卫(#if MX_HAS_INTERLEAVED_COMPLEX);执行必需 API 替换(mxGetPi→mxGetComplexDoubles+.imag、mxSetPi→mxSetComplexDoubles、mxGetImagData/mxSetImagData→类型化复数访问器、mxGetPi!=NULL→mxIsComplex;mxGetPr/mxGetData 等建议替换为类型化访问器);给出构建命令;提供输出比对验证;补充文件头构建说明。
使用方式:构建用 mex -R2018a <filename>.c(IC)、mex -R2017b <filename>.c(SC)。守卫模式 Fortran 文件必须用 .F 大写扩展名以启用预处理器。验证时分别以 -R2017b、-R2018a 和无标志构建,用 assert(isequal(...)) 比对复数、实数、空数组、标量、大数组结果。
限制与注意:IC 模式下对复数数组用 mxGetPr/mxGetData 会静默产生错误结果;mxGetElementSize() 返回交错后的完整大小(复数 double 为 16 字节),不要再乘 2;C 文件需遵守 C89 声明前置;C++ MEX API 不在覆盖范围;具体收费与平台信息暂未提供。