通信工程原理之基于COM的MatIab的参数处理[3]

互联网技术 责任编辑:liu512 2012-03-20

摘要:(3)需要重点说明的是该方法的扩展性。通常Excel文件中保存多个工作区,有时用户可能需要打开同一Excel文件中不同工作区中的数据,常规方法实现过于复杂,但对于本文介绍的方法可以通过修改添加几条语句即可实现。首先,新建一个m文件用来处理工作区的选择,代码如下:function[sheet,col]=CSheetSelected(filePath)[typ,sheet]

 

(3) 需要重点说明的是该方法的扩展性。通常Excel文件中保存多个工作区,有时用户可能需要打开同一Excel文件中不同工作区中的数据,常规方法实现过于复杂,但对于本文介绍的方法可以通过修改添加几条语句即可实现。首先,新建一个m文件用来处理工作区的选择,代码如下:

function [sheet,col] = CSheetSelected(filePath)

[typ, sheet] = xlsfinfo(filePath);

[row,col] = size(sheet);

由于返回值是一个cell数组,所以VC平台要使用CStringArray数据结构保存返回值,并显示各工作区名称供用户选择。然后,通过人机交互将用户选择的工作区参数保存并传递至CExcelRead.m,通过在 CExcelRead.m增加一个工作区选择参数,并对代码稍作修改即可。

2 二维数组参数的传递与输出[2]

下面以主成分分析为例介绍基于COM的Matlab与VC混合编程中二维数组参数处理。

(1) 主成分分析pcamat.m代码如下:

function [eigenvector,eigenvalue] = pcamat(oriData,row,column)

//在Excel读入时已经完成了二维数组输出的关键步骤,即输出时将二维数组转换为一维数组。但在VC平台接收还原为二维时要注意,Matlab数组存储方式是按列存储,而VC平台下数组是按行存储,所以转换时0~row-1为第一列,row~2*row-1为第二列,以此类推。本文输入参数oriData是一维数组,所以要将其还原为二维数组使Matlab程序能够正常运行,即下一行代码所示。

oriData = reshape(oriData,row,column);

dataSTD=std(oriData,0,1); dataMean = mean(oriData);

dataSR = (oriData-dataMean(ones(row,1),:))。/dataSTD(ones(row,1),:);

[eigenvector,newdata,eigenvalue,Exa]=princomp(dataSR);

//第三行至此处均为主成分分析内容

eigenvector = reshape(eigenvector,column*column,1);

//与Excel文件读取时类似,将二维输出转换为一维数组进行输出

(2) 保存后,封装打包为COM组件,并完成注册等相关操作。在PCA工程对话框上添加一个名为PCATest的按钮控件,核心代码如下:

VARIANT oriData,row,column,eigVector,eigValue;

VariantInit(&oriData);                             //参数初始化

oriData.vt = VT_R8|VT_ARRAY;

//定义SAFEARRAY类型的一维数组

SAFEARRAYBOUND rgsadound[1];

rgsadound[0].lLbound = 0;

rgsadound[0].cElements = m_row*m_col;

oriData.parray = SafeArrayCreate(VT_R8,1,rgsadound);

oriData.parray->pvData = m_originData;

//完成相关设置后,将第一步读入的数据录入到oriData中,即赋给pcamat的oriData.到此完成了二维数组的传递

row.vt = VT_I4; col.vt = VT_I4;

row.lVal = m_row; col.lVal = m_col;

pca->pcamat(2,&eigVector,&eigValue,oriData,row,col);

memcpy(result, eigVector.parray->pvData,m_col*m_col*

sizeof(double));

综上,二维数组参数处理就是使用reshape()函数对输入输出数据维数进行变换来完成操作。

[1]  [2]  [3]  [4]  [5]  

更多资料
更多课程
更多真题
温馨提示:因考试政策、内容不断变化与调整,本网站提供的以上信息仅供参考,如有异议,请考生以权威部门公布的内容为准!

通信工程师备考资料免费领取

去领取

距离2025 通信工程师考试

还有
  • 0
  • 3
  • 7
专注在线职业教育24年

信息系统项目管理师

信息系统项目管理师

!
咨询在线老师!