您的位置:首页 > 编程语言 > MATLAB

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

2015-04-20 09:42 363 查看
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.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: