如何从Linux命令行调用MATLAB函数?

基本上我有一个m文件,看起来像

 function Z=myfunc() % Do some calculations dlmwrite('result.out',Z,','); end 

我只是想从命令行执行而不进入MATLAB。 我尝试了几个选项( -nodisplay-nodesktop-nojvm-r等),他们都没有工作。 我最终进入MATLAB,并input“退出”退出。

解决办法是什么?

Solutions Collecting From Web of "如何从Linux命令行调用MATLAB函数?"

MATLAB可以运行脚本,但不能从命令行运行。 这就是我所做的:

文件matlab_batcher.sh

 #!/bin/sh matlab_exec=matlab X="${1}(${2})" echo ${X} > matlab_command_${2}.m cat matlab_command_${2}.m ${matlab_exec} -nojvm -nodisplay -nosplash < matlab_command_${2}.m rm matlab_command_${2}.m 

通过输入以下内容呼叫

 ./matlab_batcher.sh myfunction myinput 

使用:

 matlab -nosplash -nodesktop -logfile remoteAutocode.log -r matlabCommand 

确保matlabCommand有最后一行的出口。

你可以调用这样的函数:

matlab -r“yourFunction(0)”

这是我找到的一个简单的解决方案。

我有一个函数func(var) ,我想从一个shell脚本运行并将它的第一个参数传递给var。 我把它放在我的shell脚本中:

 matlab -nodesktop -nosplash -r "func('$1')" 

这对我来说就像是一种享受。 诀窍是,你必须使用双引号与MATLAB的“-r”命令,并使用单引号为了传递到MATLAB的bash参数。

只要确保您的MATLAB脚本的最后一行是“退出”或您运行

 matlab -nodesktop -nosplash -r "func('$1'); exit" 

你可以通过向Matlab传递一个命令来从命令行运行一个任意函数,如下所示:

 matlab -nodisplay -r "funcname arg1 arg2 arg3 argN" 

这将执行Matlab命令funcname('arg1', 'arg2', 'arg3', 'argN') 。 因此,所有的参数将作为字符串传递,你的函数需要处理这个,但是再一次,这也适用于任何其他语言的命令行选项。

 nohup matlab -nodisplay -nodesktop -nojvm -nosplash -r script.m > output & 

你可以编译myfile到一个独立的程序,然后运行它。 使用Matlab的编译器mcc (如果有的话),这个问题提供了更多的信息。

这个答案是从我的答案复制到另一个问题 。

我已经修改了Alex Cohen的回答,以满足我自己的需要,所以在这里。

我的要求是批处理脚本可以处理字符串和整数/双输入,Matlab应该从调度器脚本的目录中运行。

 #!/bin/bash matlab_exec=matlab #Remove the first two arguments i=0 for var in "$@" do args[$i]=$var let i=$i+1 done unset args[0] #Construct the Matlab function call X="${1}(" for arg in ${args[*]} ; do #If the variable is not a number, enclose in quotes if ! [[ "$arg" =~ ^[0-9]+([.][0-9]+)?$ ]] ; then X="${X}'"$arg"'," else X="${X}"$arg"," fi done X="${X%?}" X="${X})" echo The MATLAB function call is ${X} #Call Matlab echo "cd('`pwd`');${X}" > matlab_command.m ${matlab_exec} -nojvm -nodisplay -nosplash < matlab_command.m #Remove the matlab function call rm matlab_command.m 

这个脚本可以这样调用(如果它在你的路径上): matlab_batcher.sh functionName stringArg1 stringArg2 1 2.0

其中,最后两个参数将作为数字传递,前两个作为字符串传递。