在循环中调用matlab中的外部程序

时间:2016-06-27 07:47:19

标签: matlab loops file-io ubuntu-12.04 external

我在Ubuntu中安装了Matlab 2014。我的问题: 我在Matlab中为另一个程序Quantum Espresso构建了几个输入文件。现在我应该使用matlab命令行将这些文件传递给Quantum Espresso。现在我知道我可以使用Linux终端来做到这一点,但我解决问题的方法已经达到了我唯一的选择就是从matlab调用Quantum Espresso'。一次通话很容易:

!  installation/folder/espresso-5.3.0/bin/pw.x <  inputfile > outputfile

问题是我有几个名为1name.in 1name.in ...的输入文件。所以这个重复的调用应该在循环中完成。但是如何?

我试过了: 用于循环文件的shell脚本。我补充说额外的&#39;!&#39;到脚本的每一行但它不起作用。 我也尝试写这样的循环:

for i = 1:N

prefix = int2str(i);
fuloutname = [prefix 'name' '.' 'out'];
fulinname  = [prefix 'name' '.' 'in'];
!  adress/espresso-5.3.0/bin/pw.x <  fulinname > fuloutname ;

end

其中&#39; N&#39;在我的输入文件的数量。显然运行这意味着你传递的文件是nemaed&#39; fulinname&#39;不是1name.in,将导致名为&#39; fuloutname&#39;

的输出文件

我也尝试这样做,因为你通常在循环中加载各种文件,但它也不起作用

请帮帮我。

1 个答案:

答案 0 :(得分:1)

您应该使用unix功能:

for i = 1:N

prefix = int2str(i);
fuloutname = [prefix 'name' '.' 'out'];
fulinname  = [prefix 'name' '.' 'in'];
mycommand  = ['adress/espresso-5.3.0/bin/pw.x <  ',fulinname,' > ',fuloutname];
unix(mycommand);
%system(mycommand); %will give you the same, result and this function is cross-platform

end