c++调用matlab引擎solve()函数时,无法从matlab中读取正确结果

coco_tree 2016-12-04 05:59:41
64位Windows10系统,用vs2010调用matlab R2015a引擎(调试用的是Release下Win32模式),可以正确读取fsolve()函数的计算结果,但是不能正确读取solve()函数的计算结果。
代码见下文,其中注释掉的部分是调用fsolve()函数的过程,可以正确运行;但是替换成调用solve()函数时,结果不正确。附的图片是调用solve()函数的计算结果:
#include <iostream>
#include <math.h>
#include <mex.h>
#include <engine.h>
#include <matrix.h>
#include <vector>
#pragma comment(lib, "libmx.lib")
#pragma comment (lib, "libmat.lib")
#pragma comment(lib,"libeng.lib")
#pragma comment(lib,"libmex.lib")

using namespace std;

int main()
{
Engine* eng;
if (!(eng=engOpen(NULL)))
{
cout<<endl<<"Error"<<endl;
exit(1);
}
int num=2;
mxArray* p_result_matlab=mxCreateDoubleMatrix(1*num,1,mxREAL);
double *pc;

/*engEvalString(eng,"fs=@(x)([2*x(1)-x(2)-exp(-x(1));x(1)+2*x(2)-exp(-x(2))]);");
engEvalString(eng,"x0=[1;1];");
engEvalString(eng,"x=fsolve(fs,x0)");*/
engEvalString(eng,"fs=@(x)(x.^2-2*x.+1);");
engEvalString(eng,"x=solve(fs)");
p_result_matlab=engGetVariable(eng,"x");
pc=mxGetPr(p_result_matlab);
for (int i=0;i<1*num;i++)
{
cout<<pc[i]<<endl;
}
mxDestroyArray(p_result_matlab);
engClose(eng);
return 0;
}

...全文
590 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
God4 2019-12-19
  • 打赏
  • 举报
回复
引用 4 楼 coco_tree 的回复:
[quote=引用 3 楼 paschen 的回复:]

以前研究过,现在不太记得了,而且现在没MATLAB环境进行调试,你自己研究一下


谢谢回复,在其他论坛得到解决方案了。[/quote]

能不能把答案说一下?
God4 2019-12-19
  • 打赏
  • 举报
回复
mxArray* p_result_matlab=mxCreateDoubleMatrix(1*num,1,mxREAL);
p_result_matlab=engGetVariable(eng,"x"); (p_result_matlab被覆盖)
mxDestroyArray(p_result_matlab);
程序有错误
bushen16 2018-11-13
  • 打赏
  • 举报
回复
复现了下楼主的程序,1.没用匿名函数 2将结果转换为double型 最终用C++读取成功
engEvalString(eng,"x=sym('x');");
engEvalString(eng,"fs=x.^2-3*x+2;");
engEvalString(eng,"x=solve(fs)");
engEvalString(eng,"x=double(x)");
p_result_matlab = engGetVariable(eng,"x");
pc = mxGetPr(p_result_matlab);
coco_tree 2016-12-05
  • 打赏
  • 举报
回复
引用 3 楼 paschen 的回复:
以前研究过,现在不太记得了,而且现在没MATLAB环境进行调试,你自己研究一下
谢谢回复,在其他论坛得到解决方案了。
PatrickZhu2021 2021-06-25
  • 举报
回复
@coco_tree 不懂就上来问,懂了半只字也不透露,就不能分享一下吗
paschen 2016-12-04
  • 打赏
  • 举报
回复
引用 2 楼 qq_32353953 的回复:
[quote=引用 1 楼 paschen 的回复:] 参看:《matlab与c/c++混合编程》第4版
你好,因为现在急需解决该问题,手头上没有这本书,学校图书馆也没有第4版,所以能不能请你直接帮我解答下呢?麻烦了~(PS:用输出matlab缓冲区的方法可以输出正确答案,但是我需要的是将结果存入c++的数组供后续计算使用)[/quote] 以前研究过,现在不太记得了,而且现在没MATLAB环境进行调试,你自己研究一下
coco_tree 2016-12-04
  • 打赏
  • 举报
回复
引用 1 楼 paschen 的回复:
参看:《matlab与c/c++混合编程》第4版
你好,因为现在急需解决该问题,手头上没有这本书,学校图书馆也没有第4版,所以能不能请你直接帮我解答下呢?麻烦了~(PS:用输出matlab缓冲区的方法可以输出正确答案,但是我需要的是将结果存入c++的数组供后续计算使用)
paschen 2016-12-04
  • 打赏
  • 举报
回复
参看:《matlab与c/c++混合编程》第4版

3,881

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 其它技术问题
社区管理员
  • 其它技术问题社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧