使用 engGetVariable 在 MATLAB R2014a 中检索结构时出错

Posted

技术标签:

【中文标题】使用 engGetVariable 在 MATLAB R2014a 中检索结构时出错【英文标题】:Error retrieving a struct in MATLAB R2014a with engGetVariable 【发布时间】:2014-09-27 03:11:10 【问题描述】:
#include <iostream>
#include "engine.h"
using namespace std;

int main()
    cout << "Start" << endl;
    Engine *ep;
    //Loading Matlab Version R2014a
    if (!(ep = engOpen("/usr/local/MATLAB/R2014a/bin/matlab"))) 
        cout << "\nCan't start MATLAB engine\n";
        return 1;
     
    engEvalString( ep, "load('error.mat')" );
    // PHOTOSS_TEMP3 is a struct
    mxArray *K = engGetVariable(ep, "PHOTOSS_TEMP3");
    if(K !=NULL)
        cout << "Loading variable was successful" << endl;
    cout << "End";
    return 0;

通过这个示例 C++ 程序,我试图从 MATLAB 中读取一个结构。但是程序在mxArray *K = engGetVariable(ep, "PHOTOSS_TEMP3"); 行冻结,我收到错误消息:

Error using save
Can't write file stdio.

这里也是makefile:

g++ -I/usr/local/MATLAB/R2014a/extern/include -O0 -g3 -Wall -c -fmessage-length=0 -MMD -MP -MF"matlab_error.d" -MT"matlab_error.d" -o "matlab_error.o" "matlab_error.cpp"
g++ -Wl,-rpath,/usr/local/MATLAB/R2014a/bin/glnxa64 -L/usr/local/MATLAB/R2014a/bin/glnxa64 -Xlinker -rpath-link -Xlinker /usr/local/MATLAB/R2014a/bin/glnx64 -o "matlab_error"  matlab_error.o   -leng -lmx

以及 MATLAB 文件的“谁”:

Name                       Size            Bytes  Class     Attributes

Custom_Parameters          0x0                 0  double    global    
MultiSignal                1x1             83110  struct              
PHOTOSS_TEMP1              1x1                 8  double              
PHOTOSS_TEMP3              1x1              8210  struct              
Results                    0x0                 0  double    global    
alpha                      1x1                 8  double    global    
beta2                      1x1                 8  double    global    
current_block_no           1x1                 8  double              
fiber_length               1x1                 8  double    global    
main_parameters            1x1              4644  struct    global    
message                    0x0                 0  char      global    
simulation_parameters      1x1              4644  struct     

此错误仅在我使用 MATLAB 版本 R2014a Linux 时出现。我已经尝试了 2013a/b 版本,它运行良好。当我尝试读取示例文件的另一个结构(如 main_parameters 或 MultiSignal)时,也会发生这种情况。 那么我的错误在哪里?

sample program and matlab file

【问题讨论】:

你找到答案了吗?我用标量逻辑得到这种行为。它发生在两个单独的程序中,而之前它工作得很好。代码的其他部分已更改,但此部分没有。它似乎已经自发地停止了工作。我也在 R2014a Linux 上。 【参考方案1】:

您可能遇到与this user had 相同的问题,在这种情况下,您应该使用 MATLAB 命令cell2mat 将数据保存在您的 .m 文件中。否则无法读取 cell 数据类型。

【讨论】:

以上是关于使用 engGetVariable 在 MATLAB R2014a 中检索结构时出错的主要内容,如果未能解决你的问题,请参考以下文章

智能优化算法——模拟退火法(Python&Matla实现)

序列的离散傅里叶变换(DFT)的来龙去脉并附利用MATLA的函数FFT()求序列的DFT的示例

matlab基本语法

将 MATLAB 代码转换为库

在带有 Excel 数据的 Matlab 中使用 lbsvm

定点 MATLAB DSP 算法