登录论坛

查看完整版本 : [MATLAB混合编程] 如何从matlab工作空间中获取方程组的解


huangyinghua
2009-05-21, 20:22
如果让matlab的计算结果输出到指定的buffer中,然后从这个buffer中获得方程组的解,这个可以实现;
但是从matlab工作空间中获取方程组的解就出问题了。大家运行我下面的原代码看看结果就知道了。
原代码如下:
#include <iostream>
#include <math.h>
#include "engine.h"
using namespace std;
void main()
{
mxArray *pResult;
char buffer[1001],*pStrCmond;
double dx1[6][1];
Engine *ep; //定义Matlab引擎指针。
if (!(ep=engOpen(NULL))) //测试是否启动Matlab引擎成功。
{
cout < <"Can't start Matlab engine!" < <endl;
exit(1);
}

//解方程组
cout < <"(1)解方程组 " < <endl;
engOutputBuffer(ep, buffer, 1000); //让计算引擎的计算结果同时输出到这个buffer

pStrCmond=" a=1.5;b=1.6;c=1.2;d=1.3";
engEvalString(ep, pStrCmond);
cout < <pStrCmond < <endl;
pStrCmond="f1='2*cos(x1)+2*cos(x1)*cos(x2)=1.5+1.6'";
engEvalString(ep, pStrCmond);
cout < <" " < <pStrCmond < <endl;
pStrCmond="f2='2*sin(x1)*sin(x2)=1.2+1.3'";
engEvalString(ep, pStrCmond);
cout < <" " < <pStrCmond < <endl;
pStrCmond="[x1,x2]=solve(f1,f2,'x1,x2')";
engEvalString(ep, pStrCmond);
cout < <" " < <pStrCmond < <endl;
//获取方程的解
//从buffer中获取解
cout < <"(2)打印buffer中存放的解x1、x2" < <endl;
cout < <buffer < <endl;

//直接从matlab工作空间中获取解x1
cout < <"(3)直接从matlab工作空间中获取解x1 " < <endl;
pResult=engGetVariable(ep,"x1");
//打印解x1的实部
cout < <" x1实部数据 " < <endl;//
memcpy( dx1,mxGetPr(pResult), 60*sizeof(double));
for (int i=0; i <6; i++)
{
cout < <dx1[i] < <endl;//打印的数据并不是解本身的数据??
}
//打印解x1的虚部
cout < <" x1虚部数据 " < <endl;//
memcpy( dx1,mxGetPi(pResult), 60*sizeof(double));
for ( i=0; i <6; i++)
{
cout < <dx1[i] < <endl;//打印的数据并不是解本身的数据??
}


//关闭Matlab引擎。
engClose(ep);


}