Подтвердить что ты не робот

Как вызвать функции MATLAB из командной строки Linux?

В основном у меня есть файл m, который выглядит как

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

Я просто хочу выполнить его из командной строки, не входя в MATLAB. Я попробовал несколько опций (-nodisplay, -nodesktop, -nojvm, -r и т.д.), Ни одна из них не работала. Я вхожу в MATLAB и должен набирать "quit" для выхода.

Какое решение?

4b9b3361

Ответ 1

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

Ответ 2

Использование:

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

Убедитесь, что matlabCommand имеет выход в качестве последней строки.

Ответ 3

Вы можете вызывать такие функции:

matlab -r "yourFunction (0)"

Ответ 4

Вот простое решение, которое я нашел.

У меня есть функция func (var), которую я хотел запустить из оболочки script и передать ей первый аргумент для var. Я положил это в свою оболочку script:

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

Это помогло мне. Фокус в том, что вам нужно использовать двойные кавычки с командой -r для MATLAB и использовать одинарные кавычки, чтобы передать аргумент bash в MATLAB.

Просто убедитесь, что последняя строка вашего MATLAB script - это "exit" или вы запускаете

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

Ответ 5

Вы можете запустить произвольную функцию из командной строки, передав команду Matlab, например:

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

Это выполнит команду Matlab funcname('arg1', 'arg2', 'arg3', 'argN'). Ergo, все аргументы будут переданы как строки, и ваша функция должна справиться с этим, но опять же это относится к параметрам командной строки на любом другом языке.

Ответ 6

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

Ответ 7

Вы можете скомпилировать myfile в автономную программу и запустить ее. Для этого используйте компилятор Matlab mcc (если он у вас есть), в этой question содержится дополнительная информация.

Этот ответ был скопирован из моего ответа на еще один вопрос.

Ответ 8

Я изменил ответ Алекса Коэна для своих собственных нужд, так что вот оно.

Мои требования заключались в том, что дозатор script мог обрабатывать строковые и целочисленные/двойные входы и что Matlab должен запускаться из каталога, из которого вызывается дозатор script.

#!/bin/bash

matlab_exec=matlab

#Remove the first two arguments
i=0
for var in "[email protected]"
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

Этот script можно вызвать как (если он на вашем пути):   matlab_batcher.sh functionName stringArg1 stringArg2 1 2.0

Где, последние два аргумента будут переданы как числа, а первые два - как строки.