使用MATLAB调用Octave模型

3

我正在MATLAB中运行一个优化代码,需要从一个兼容Octave的模型中获取一个适应度值(我不能使用MATLAB来解决这个模型。因此使用Octave)。为了达到这个目的,我已经在MATLAB中编写了一个适应函数,它看起来像这样:

fid = fopen('parameter.txt','w');
for i=1:length(x)
%    fprintf(fid,'%e \n',x(i));
    fprintf(fid,'%12.5f \n',x(i));
end
fclose(fid);

system('./dswrap');

% get the objective fitness value:
fid = fopen('fitness.txt','r');
y=fscanf(fid,'%f',[1]);
fclose(fid);
  1. x是输入模型的向量,进入parameter.txt文件
  2. fitness.txt是从./dswrap输出的结果

dswrap是用C语言编写的代码,如下所示

int main()
    {
        FILE*fp,*fp_r;
        fp=popen("octave","w");
        fprintf(fp,"ObjFuS");
        pclose(fp);
    }

这会调用Octave,然后调用ObjFus函数,该函数从parameter.txt中获取输入并将输出写入fitness.txt。我遇到的问题是fitness.txt没有生成,经过一些尝试,我发现一个问题是

sh: octave: command not found

我可以在终端中调用Octave。所以我不确定为什么我会遇到上述错误? 是因为我做错了其他事情吗?我需要关于正确生成我的fitness.txt的帮助。谢谢。


1
你为什么要使用c-code来运行octave,而不是通过系统命令直接从matlab中运行octave? - Daniel
你可以使用 system 命令吗? - Marcin
@Marcin 是的,我能够使用系统命令。 - user3330484
@Daniel 我不太熟悉MATLAB。我尝试执行以下命令system('octave ObjFuS'),但它没有起作用。我得到了以下提示 - /bin/bash: octave: command not found。因此我使用了一个C包装器,希望可以通过C调用Octave,但这也没有起作用。 - user3330484
我必须承认,看到你使用Matlab调用C再调用Octave让我笑了。只是好奇,为什么不能直接在Matlab中解决问题呢? - Dennis Jaheruddin
1个回答

0

看起来你的系统需要更多的信息才能启动程序,仅仅调用它并不会有所帮助,但是幸运的是指定路径可以解决问题。

对我来说,以下调用失败:

!textpad % Equivalent to system('textpad')

但这个可以工作:

!"C:\Program Files (x86)\TextPad 6\TextPad.exe"

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接