欢迎来到天天文库
浏览记录
ID:8190412
大小:579.75 KB
页数:4页
时间:2018-03-09
《matlab与visual c 溷合编程》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、Matlab与Visualc++接口编程以广义特征值为例1,Matlab程序function[v,d]=qrfact(a,b)[v,d]=eig(a,b);end2,Matlab程序编译>>deploytool创建一个工程qrfact.prj,将qrfat.m加入qrfact.prj编译编译完成后在该项目目录的qrfactsrc下会出现qrfact.dll,qrfact.h和qrfact.lib等文件。3,Vc设置首先在Visualc++下建立一个MFC项目cmatlab(笔者利用VisualStudio2008)将qrfact.dll拷贝至c:win
2、dowssystem32下,将qrfact.h和qrfact.lib拷贝至cmatlab项目目录下。在打开VisualStudio2008,在“项目->选项->项目和解决方案”中,选择“包含文件”中加入matlab的include路径,笔者为“C:ProgramFilesMATLABR2009aexterninclude”;在“项目->选项->项目和解决方案”中,选择“库文件”中加入matlab静态库的路径“C:ProgramFilesMATLABR2009aexternlibwin32lcc”。可根据自己系统的实际情况选择,笔者
3、为32位系统,故选择win32,如果为64位系统则选win64.在“项目->属性”按下图设置,在附加依赖项中加入mclmcrrt.lib,mclmcr.lib和qrfact.lib三个静态库。4,源代码实现4.1打开项目文件夹中的targetver.h头文件,把其中的0X0600修改为0X0501,即:#defineWINVER0x0600===>>#defineWINVER0x0501#define_WIN32_WINNT0x0600===>>#define_WIN32_WINNT0x05014.2在*.cpp文件中加入头文件#include“qrfac
4、t.h”voidCcmatlabDoc::OnQrfactorization(){//TODO:在此添加命令处理程序代码if(pmesh.VertexNumber<=0)return;if(!qrfactInitialize())return;//计算图的临接矩阵,可根据实际情况,自己编写,也可以指定广义特征值的两个矩阵a,b;intvtxnumber=pmesh.VertexNumber;double*pneighbor;pneighbor=newdouble[vtxnumber*vtxnumber];memset(pneighbor,0,sizeof(
5、double)*vtxnumber*vtxnumber);inti,j,vid0,vid1;for(i=0;i6、++){sum+=pneighbor[i*vtxnumber+j];}pneighbor[i*vtxnumber+i]=-sum;}double*parea;parea=newdouble[vtxnumber*vtxnumber];memset(parea,0,sizeof(double)*vtxnumber*vtxnumber);for(i=0;i7、AL);memcpy((void*)mxGetPr(a),(void*)pneighbor,_msize(pneighbor));mxArray*b;b=mxCreateDoubleMatrix(vtxnumber,vtxnumber,mxREAL);memcpy((void*)mxGetPr(b),(void*)parea,_msize(parea));mxArray*v;v=mxCreateDoubleMatrix(vtxnumber,vtxnumber,mxREAL);mxArray*d;d=mxCreateDoubleMatrix(vtxnumbe8、r,vtxnumber,mxREAL);//执行广义特征值和特征向
6、++){sum+=pneighbor[i*vtxnumber+j];}pneighbor[i*vtxnumber+i]=-sum;}double*parea;parea=newdouble[vtxnumber*vtxnumber];memset(parea,0,sizeof(double)*vtxnumber*vtxnumber);for(i=0;i7、AL);memcpy((void*)mxGetPr(a),(void*)pneighbor,_msize(pneighbor));mxArray*b;b=mxCreateDoubleMatrix(vtxnumber,vtxnumber,mxREAL);memcpy((void*)mxGetPr(b),(void*)parea,_msize(parea));mxArray*v;v=mxCreateDoubleMatrix(vtxnumber,vtxnumber,mxREAL);mxArray*d;d=mxCreateDoubleMatrix(vtxnumbe8、r,vtxnumber,mxREAL);//执行广义特征值和特征向
7、AL);memcpy((void*)mxGetPr(a),(void*)pneighbor,_msize(pneighbor));mxArray*b;b=mxCreateDoubleMatrix(vtxnumber,vtxnumber,mxREAL);memcpy((void*)mxGetPr(b),(void*)parea,_msize(parea));mxArray*v;v=mxCreateDoubleMatrix(vtxnumber,vtxnumber,mxREAL);mxArray*d;d=mxCreateDoubleMatrix(vtxnumbe
8、r,vtxnumber,mxREAL);//执行广义特征值和特征向
此文档下载收益归作者所有