在Linux机器上执行从MATLAB使用intel-fortran编译的程序

时间:2013-08-07 14:07:28

标签: linux matlab fortran genetic-algorithm

我有一个fortran代码的可执行文件,我想从MATLAB运行。

我尝试使用以下两个选项但出错:

!/home/atrac/code case172.jcl
error:- ls: cannot access ./id: No such file or directory
ls: cannot access ./id: No such file or directory

!gnome-terminal --command "./home/myhome/code case12.jcl"
error: There was an error creating child process for this terminal

有没有办法可以编写shell脚本来执行程序并暂停Matlab直到执行外部程序然后将控制权传递给Matlab?

我正在尝试在Matlab中运行遗传算法,该算法称之为外部软件。 非常感谢任何想法或帮助。

谢谢, 佳日

3 个答案:

答案 0 :(得分:1)

理想情况下,这应该作为评论,但我没有足够的声誉。

但是,创建子进程的错误与MATLAB无关。 shell出错了。你能从终端运行程序吗?

其次,您正在使用:

!/home/atrac/code case172.jcl 

但你应该使用     !./ home / atrac / code case172.jcl

答案 1 :(得分:1)

好吧,看起来这里发生了两件不同的事情。两者都可能与Matlab的当前目录有关。

!/home/atrac/code case172.jcl
error:- ls: cannot access ./id: No such file or directory
ls: cannot access ./id: No such file or directory

此处,您似乎正在设法运行code程序,但code或JCL脚本正在当前工作目录中查找名为id的文件。当你从Matlab中解脱出来时,它将成为Matlab的当前目录。从Matlab命令提示符运行pwd以找出您的位置。您可以通过在Matlab中使用cd移动到id文件实际存在的目录(我在/ home / atrac中猜测它)来解决这个问题,然后使用相同的命令行运行code。更好的解决方法是重写code和/或JCL脚本在从任何路径运行时(可能使用绝对路径),因此你的cwd并不重要。

!gnome-terminal --command "./home/myhome/code case12.jcl"
error: There was an error creating child process for this terminal

这里,领先"。"可能搞砸了,因为它现在正在当前工作目录下寻找home/myhome,而不是在根目录下。请尝试执行!gnome-terminal --command "/home/myhome/code case12.jcl"(不使用"。")。

答案 2 :(得分:0)

当包含该文件的文件夹不在MATLAB可见的UNIX系统路径上时,您可以从MATLAB运行UNIX程序。要确定MATLAB可见的系统路径,请在命令窗口中键入以下内容:

GETENV( 'PATH')

您可以修改当前MATLAB会话或后续MATLAB会话持久存在的系统路径,如以下各节所述。

修改当前MATLAB会话的系统路径。执行以下操作之一:

Change the current folder in MATLAB to the folder that contains the program you want to run.

Issue these commands using the Command Window:

path1 = getenv('PATH')
path1 = [path1 ':/usr/local/bin']
setenv('PATH', path1)
!echo $PATH 

如果重新启动MATLAB,该文件夹将不再位于MATLAB可见的系统路径上。

http://www.mathworks.com/help/matlab/matlab_env/creating-opening-changing-and-deleting-files-and-folders.html#f0-38522