24小时热门版块排行榜    

查看: 1361  |  回复: 9
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

one包

金虫 (小有名气)

[求助] vc++ 调用MATLAB 引擎 已有1人参与

vc++ 中的指针 数组的数据怎么写入到MATLAB中去啊,写入后输出的结果老不对,是为什么呢?是按着网上double[][]这样的矩阵弄得,谢谢
int  j = 0,w = 0;//其中(xNG = new double[NG];是个指针数组)
// 状态变量
int nStatus = 0;  
// 定义MATLAB引擎指针
Engine *ep;
// 定义mxArray变量指针
mxArray *A, *B;
// 定义矩阵数组
double arResData[3];
       
// 打开MATLAB引擎
ep = engOpen(NULL);
        if(ep == NULL)
        {
                cout<<"无法打开MATLAB引擎。"<<endl;
                exit(EXIT_FAILURE);
        }
        // 是否显示MATLAB窗口:true-显示;false-隐藏。
        nStatus = engSetVisible(ep, true);
        if (nStatus != 0)
        {
                cout << "设置MATLAB显示属性失败。" << endl;
                exit(EXIT_FAILURE);
        }
        // 为mxArray变量分配空间
        A = mxCreateDoubleMatrix(3,1,mxREAL);
        B = mxCreateDoubleMatrix(3,1,mxREAL);
        if(A == NULL || B == NULL)
        {
                cout<<"为mxArray变量分配空间失败。"<<endl;
        exit(EXIT_FAILURE);
}
// 将数组中的数据写入到mxArray空间中
memcpy((void*)mxGetPr(A), (void*)xNG, sizeof(xNG));//
// 将矩阵变量A写入到MATLAB引擎空间
nStatus = engPutVariable(ep, "A", A);

// 执行引擎命令求矩阵A的逆矩阵
nStatus = engEvalString(ep, "B=1*(A)";

// 从MATLAB引擎空间中读取执行结果
B = engGetVariable(ep, "B";
// 将矩阵变量B复制到数组arResData中
memcpy((void*)arResData, (void*)mxGetPr(B), sizeof(arResData));
// 释放矩阵变量空间
mxDestroyArray(A);
mxDestroyArray(B);
// 关闭MATLAB引擎
engClose(ep);

char pFileName[ 50 ];
        char Buffer[ 5 ];
        //double m;
        sprintf( pFileName, "%s", "baobao" );
    strcat( pFileName, ".dat" );
        CStdioFile f1;
        f1.Open( pFileName, CFile::modeCreate|CFile::modeWrite|CFile::typeText );
        char szBuffer[ 500 ];
        for( w = 0; w < 3; w++)
              {
                        sprintf( szBuffer, "%16.8f", arResData[w]);
                    f1.Write( szBuffer, strlen( szBuffer ) );       
                }
    f1.Close();


为啥输出的结果不对呢?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

nowordtosay
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

one包

金虫 (小有名气)

引用回帖:
4楼: Originally posted by wake_up at 2015-11-11 23:32:45
这样看上去没有什么问题.
是不是从内存空间取数的时候出问题了?

memcpy((void*)arResData, (void*)mxGetPr(B), sizeof(arResData));
// 释放矩阵变量空间
mxDestroyArray(A);
mxDestroyArray(B);

你把ma ...

关闭了engine,单独测试了一下写文件,可以写进去。   

取数据的地方,看不出有什么错误呢。。。

出现的问题是,取出来写到文件里的数据只有第一个值正确,其他都是0.0000,这是为什么?是一直都在对第一个数操作吗?
nowordtosay
5楼2015-11-12 08:39:46
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 10 个回答

wake_up

木虫 (著名写手)

【答案】应助回帖

感谢参与,应助指数 +1
一般是matlab调用c语言编写的mex,  你为什么弄得那么难 用C调用matlab啊? 你这个写文件的直接用matlab做更简单啊.
扫地扫地扫心地,心地不扫空扫地,人人都把心地扫,世上无处不净地.
2楼2015-11-11 22:44:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

one包

金虫 (小有名气)

引用回帖:
2楼: Originally posted by wake_up at 2015-11-11 22:44:28
一般是matlab调用c语言编写的mex,  你为什么弄得那么难 用C调用matlab啊? 你这个写文件的直接用matlab做更简单啊.

我想的是调用MATLAB解个方程组,然后把结果返回到vc,
nowordtosay
3楼2015-11-11 23:00:22
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

wake_up

木虫 (著名写手)

【答案】应助回帖

★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★ ★
one包: 金币+20, ★★★★★最佳答案 2015-11-12 09:04:17
引用回帖:
3楼: Originally posted by one包 at 2015-11-11 23:00:22
我想的是调用MATLAB解个方程组,然后把结果返回到vc,...

这样看上去没有什么问题.
是不是从内存空间取数的时候出问题了?

memcpy((void*)arResData, (void*)mxGetPr(B), sizeof(arResData));
// 释放矩阵变量空间
mxDestroyArray(A);
mxDestroyArray(B);

你把matlab engine那个屏蔽掉. 单独测一下你C语言IO写文件看看能不能写进去.如果能写进去,就是取matlab那里出问题了.
扫地扫地扫心地,心地不扫空扫地,人人都把心地扫,世上无处不净地.
4楼2015-11-11 23:32:45
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 328求调剂,英语六级551,有科研经历 +5 生物工程调剂 2026-03-17 9/450 2026-03-21 23:32 by zhujy1982
[考研] 286分人工智能专业请求调剂愿意跨考! +4 lemonzzn 2026-03-17 8/400 2026-03-21 22:49 by lemonzzn
[考研] 0805 316求调剂 +3 大雪深藏 2026-03-18 3/150 2026-03-21 18:55 by 学员8dgXkO
[考研] 材料学硕333求调剂 +3 北道巷 2026-03-18 3/150 2026-03-21 18:17 by 学员8dgXkO
[考研] 279求调剂 +5 红衣隐官 2026-03-21 5/250 2026-03-21 14:59 by lature00
[考研] 265求调剂 +12 梁梁校校 2026-03-19 14/700 2026-03-21 13:38 by lature00
[考研] 279分求调剂 一志愿211 +14 chaojifeixia 2026-03-19 15/750 2026-03-21 13:24 by zhukairuo
[考研] 求调剂 +3 白QF 2026-03-21 3/150 2026-03-21 13:12 by zhukairuo
[考研] 346求调剂[0856] +4 WayneLim327 2026-03-16 7/350 2026-03-21 04:02 by JourneyLucky
[考研] 一志愿天津大学化学工艺专业(081702)315分求调剂 +12 yangfz 2026-03-17 12/600 2026-03-21 03:30 by JourneyLucky
[考研] 299求调剂 +6 △小透明* 2026-03-17 6/300 2026-03-21 02:42 by JourneyLucky
[考研] 083200学硕321分一志愿暨南大学求调剂 +3 innocenceF 2026-03-17 3/150 2026-03-21 02:35 by JourneyLucky
[考研] 化学求调剂 +4 临泽境llllll 2026-03-17 5/250 2026-03-21 02:23 by JourneyLucky
[考研] 一志愿 西北大学 ,070300化学学硕,总分287,双非一本,求调剂。 +3 晨昏线与星海 2026-03-18 3/150 2026-03-21 00:46 by JourneyLucky
[考研] 22408 344分 求调剂 一志愿 华电计算机技术 +4 solanXXX 2026-03-20 4/200 2026-03-20 23:49 by alg094825
[考研] 广西大学家禽遗传育种课题组2026年硕士招生(接收计算机专业调剂) +3 123阿标 2026-03-17 3/150 2026-03-20 15:58 by 飞行琦
[考博] 招收博士1-2人 +3 QGZDSYS 2026-03-18 3/150 2026-03-20 11:58 by 呱呱呱呱叫
[考研] 本科郑州大学物理学院,一志愿华科070200学硕,346求调剂 +4 我不是一根葱 2026-03-18 4/200 2026-03-19 09:11 by 浮云166
[考研] 327求调剂 +6 拾光任染 2026-03-15 11/550 2026-03-15 22:47 by 拾光任染
[考研] 085601材料工程315分求调剂 +3 yang_0104 2026-03-15 3/150 2026-03-15 10:58 by peike
信息提示
请填处理意见