1、报错:cannot access the imaginnary part of a pure-real array
原因是MFC调用完matlab后返回了一个全实数的矩阵,我使用mwArray的复数对象存放,然后提取其中的虚部。个人认为:无法提取全实数矩阵的虚数部分。
解决方法:在提取虚部时先判断这个矩阵对象是否为复数,代码如下:
if(ArrayoutP. IsComplex ())
{
ArrayoutP.Real().GetData(pp_real,degree0+1);
ArrayoutP.Imag().GetData(pp_imag,degree0+1);
}else
{
ArrayoutP.Real().GetData(pp_real,degree0+1);
int jj;
for(jj=0;jj<degree0+1;jj++)
*(pp_imag+jj)=0;
}
// ArrayoutP是声明存放复数的 mwArray对象,pp_real和pp_imag分别是指针变量,degree0+1是矩阵长度
2、MATALB计算得到的系统零极点矩阵是列向量。
传函转零极点形式的函数:tf2zpk(num,den)的输入 矩阵den(传函分母系数阵)的第一个元素不能为零。如果是零必须删除,并且保证den和num长度一致(即num的首零也要删除),不然MATLAB默认添加一个为0的极点。如果den的首零不删除,则报错:
??? Error using ==> tf2zp at 42
Denominator must have non-zero leading coefficient.