web-dev-qa-db-ja.com

LinuxコマンドラインからMATLAB関数を呼び出す方法

基本的に、次のようなmファイルがあります

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

MATLABに入らずにコマンドラインから実行したいだけです。いくつかのオプションを試しました(-nodisplay-nodesktop-nojvm-rなど)、どれも機能しませんでした。最終的にMATLABに入り、終了するには「quit」と入力する必要があります。

解決策は何ですか?

30
ablimit

[〜#〜] 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
25
Alex Cohen

使用する:

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

matlabCommandの最後の行に出口があることを確認してください。

20
Douglas Forman

次のような関数を呼び出すことができます。

matlab -r "yourFunction(0)"

12
David Doria

ここに私が見つけた簡単な解決策があります。

関数func(var)があり、シェルスクリプトから実行して、varの最初の引数を渡したいと思っています。これをシェルスクリプトに追加します。

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

それは私にとって御treat走のように働いた。秘Theは、MATLABの "-r"コマンドで二重引用符を使用し、bash引数をMATLABに渡すために単一引用符を使用する必要があることです。

MATLABスクリプトの最後の行が「終了」であること、または実行することを確認してください。

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

次のようにコマンドをMatlabに渡すことにより、コマンドラインから任意の関数を実行できます。

_matlab -nodisplay -r "funcname arg1 arg2 arg3 argN"
_

これにより、Matlabコマンドfuncname('arg1', 'arg2', 'arg3', 'argN')が実行されます。エルゴ、すべての引数は文字列として渡され、関数はこれを処理する必要がありますが、これは他の言語のコマンドラインオプションにも当てはまります。

3
gerrit
Nohup matlab -nodisplay -nodesktop -nojvm -nosplash -r script.m > output &
1
Max

myfileをスタンドアロンプ​​ログラムにコンパイルし、代わりに実行できます。 Matlabのコンパイラmccを使用します(お持ちの場合)。詳細については、この 質問 をご覧ください。

この回答は、私の回答から 別の質問にコピーされました

0
quazgar

アレックス・コーエンの答えを自分のニーズに合わせて修正しましたので、ここにあります。

私の要件は、バッチャースクリプトが文字列および整数/ダブル入力を処理でき、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

ここで、最後の2つの引数は数値として渡され、最初の2つの引数は文字列として渡されます。

0
Steven