[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,eig插件电感Vector,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,&ei扼流电感gVector,&eigValue,oriData,row,col);
memcpy(result, eigVector.parray->pvData,m_col*m_col*
sizeof(double));
综上,二维数组参数处理就是使用reshape()函数对输入输出数据维数进行变换来完成操作。
3 M一体成型电感器atlab图像嵌入VC界面[3]
3.1 基于CWnd类的图像嵌入
在Windows操作系统下,所有应用程序的窗口都是基于MFC中的CWnd类。所以可以通过调用该类或其派生类中的方法实现图像嵌入。基本思想:在Matlab平台下用COM封装产生图形窗口的程序;在VC平台获取Figure窗口的句柄,将Figure窗口设为VC程序的子窗口;(3)将Figure窗口移动到指定显示位置。
程序实现如下:
(1)将原pcamat.m进行修改工字电感,添加生成图像的相关代码
function [eigenvector,eigenvalue] = pcamat(oriData,row,column,picName)
//增加picName参数,VC平台下hFig将通过该名称获取生成图像的句柄
figure("NumberTitle","Off","MenuBar","None","ToolBar","Figure","Name",picName,"Units","Points");
//图像参数预设,保留工具栏。使用Matlab提供的工具栏的所有功能是使用该方法的最大优点
percent = 100*eigenvalue /sum(eigenvalue);
//计算贡献率
pareto(percent); //画图
xlabel("主成分");
ylabel("方差占的比重(%)");
(2)封装打包成名为figure的COM组件,并完成注册等相关操作。因为修改后的m文件运行结果包含输出结果和图像两部分,所以下面有关图像处理的代码依然在PCATest控件的响应函数中。
CString WNDName = "Demo";电感厂家 //自定义窗口名称
Ifigureclass *pic;
VARIANT oriData, row, col, picName,eigVector, eigValue; VariantInit(&picName);
……
picName.vt = VT_BSTR; //将自定义窗口名称赋予
Matlab生成图像
picName.bstrVal = WNDName.AllocSysString();
HWND hFig; int timer = 50;
//用死循环确保可以获取到图像句柄,注意此处必须使用sleep(),给予系统足够的响应时间
while(1){
pic->pcamat(2,&eigVector,&eigValue,oriData,row,col,
picName);
Sleep(timer);
hFig = ::FindWindow(NULL,FigName);
if(hFig != NULL){
break;
}
timer += 10;
pic->Release();
[DCDC]5v转3.3有没有5v转3.3的开关稳压ic推荐下,电流1A以上,封装sot求大神回复w要求不明型可以自已搭一射极跟随器,无需任何转换芯片为什么一定要开关稳压?线性稳压不是很好forgot发表于2015-
关于LDO的VOUT旁路电容的ESR看了ApplicationReport
slva115.pdf(Ti网站上的,我发表不了带URL的文章)
是要看LDO的手册来判断要选用什么样ESR的电容,并不是越低越好。
选择得不好,输出就会振荡(不稳定)。
对于
基于Proteus的定位系统仿真设计引 言 随着单片机技术在工控领域及社会生活的各个方面得到广泛应用,对单片机开发成本及速度的要求也越来越高。按照传统的模式,在整个项目开发过程中,先根据控制系统要求设计原理图,制作硬件电路;然后进行软件