我正在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);
- x是输入模型的向量,进入parameter.txt文件
- 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的帮助。谢谢。
system('octave ObjFuS')
,但它没有起作用。我得到了以下提示 -/bin/bash: octave: command not found
。因此我使用了一个C包装器,希望可以通过C调用Octave,但这也没有起作用。 - user3330484