matlab 7.01,VC++中使用MATLAB7.01引擎

使用的函数有:命令在 "engine.h"  具体在 /MATLAB701/extern/include

Engine *  engOpen(const  char *startcmd); // startcmd在windows中一般是NULL, 或者/0; 启动matlab命令窗口

int  engClose(Engine *ep);  //关闭matlab服务

int  engSetVisible(Engine *ep, bool newVal); //设置命令窗口可见与否, 可以修改默认设置

int  engGetVisible(Engine * ep, bool * bVal); //获取

mxArray *  engGetVariable(Engine *ep, const char * name); //name要获得的变量名称, ep 指针引擎

int  engPutVariable(Engine *ep, const char *var_name, const mxArray *ap); 把一个变量ap用特定名称var_name放入matlab工作空间中

int  engOutputBuffer(Engine *ep, char * Buffer, int buflen); buffer保存输出的字符串数组,buflen缓冲数组长度

Engine * engOpenSingleUse(const char * startcmd, void * reserved, int * retstatus); //startcmd启动字符串的可执行命令,resered 为NULL 保留以后使用. retstatus 返回状态 . 为单用户使用命令

int engEvalString(Engine *ep, const char *string); //string matlab可执行的命令

参考命令: (加载类库: libeng.lib libmx.lib )

头文件是 #include "engine.h"

Engine *ep;

mxArray *T=NULL, *result = NULL, *mFs = NULL, *mnfft = NULL;

double datax[1024];

char buffer[1024];

for (int j=0; j< 1024; j++)

{

double samt = (double)(1.0/1024);

datax[j] = sin(2.0 * 63.0 * samt * 3.1415926 + 1.15 *3.14159265);

}

double *pPxx , *pFxx;

if (!(ep = engOpen("/0")))

{

fprintf(stderr, "/n Can't start MATLAB engine/n ");

exit(-1);

}

engSetVisible(ep, TRUE);

double Fs[1] = {1024};

double nfft[1] = {1024};

T = mxCreateDoubleMatrix(1, 1024, mxREAL);

mnfft = mxCreateDoubleMatrix(1, 1, mxREAL);

mFs = mxCreateDoubleMatrix(1, 1,mxREAL);

//mxSetName(T, "T");

memcpy((char*)mxGetPr(T), (char*)datax, 1024 *sizeof(double) );

memcpy((char*)mxGetPr(mnfft), (char*)nfft, sizeof(double));

memcpy((char*)mxGetPr(mFs), (char*)Fs, 1*sizeof(double));

engPutVariable(ep,"T", T);

engPutVariable(ep, "mnfft",mnfft);

engPutVariable(ep,"mFs",mFs);

engEvalString(ep, "[pxx,fo] = psd(T, mnfft, mFs);");

engOutputBuffer(ep,buffer, 512);

//result = engGetVariable(ep,"pxx");

//pPxx = mxGetPr(result);

//result = engGetVariable(ep, "fo");

//pFxx =mxGetPr(result);

engEvalString(ep, "plot(fo, 10*log10(pxx))");

engEvalString(ep, "title('功率普分析');");

engEvalString(ep,"xlabel('Hz');");

engEvalString(ep,"ylabel('db');");

//mxDestroyArray(T); //释放内存

//mxDestroyArray(mFs);

//mxDestroyArray(mnfft);

//mxDestroyArray(result);

//engEvalString(ep,"close;");

//engClose(ep);

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值