天天看点

项目难题之MFC调用MATLAB失败的一些小问题

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.

继续阅读