Бинарный файл Matlab не принимает свои входные значения в оболочке - PullRequest
0 голосов
/ 26 июня 2019

Я скомпилировал свою функцию Matlab и пытаюсь запустить полученный двоичный исполняемый файл в сценарии оболочки (я уверен в своем преобразовании).В Matlab я запускаю сценарий My_function по:

names_ct{1}  = './file_ct_1';
names_ct{2}  = './file_ct_2';
names_mk{1}  = './file_mk_1';
names_mk{2}  = './file_mk_2';

My_function(names_ct, names_mk, 0);

Однако, когда я запускаю скомпилированный двоичный файл, используя следующую команду в сценарии оболочки, я получаю сообщение об ошибке.

My_function ./file_ct_1 ./file_ct_2 ./file_mk_1 ./file_mk_2 0

Ошибка:

Error using My_function
Too many input arguments.
MATLAB:TooManyInputs
Error: Too many input arguments.
ERROR My_function ./file_ct_1 ./file_ct_2 ./file_mk_1 ./file_mk_2 0

Кто-нибудь знает, что происходит?

Ответы [ 2 ]

0 голосов
/ 26 июня 2019

Каждый из аргументов командной строки передается в качестве строк вашей функции. Вы не можете передать массив ячеек, ни числовые массивы, ни что-либо еще. Вам нужно написать свою функцию для ввода строковых аргументов.

Если вам нужно переменное количество входных аргументов, объявите вашу функцию с помощью

function name(varargin)

(см. документы )

Тогда в вашей функции varargin - это массив ячеек, который содержит каждую из входных строк. nargin равно numel(varargin) и дает количество входных аргументов.

Вы можете также использовать inputParser для упрощения анализа входных аргументов, если вам нужно, например, например. способ разделить два разных типа входных аргументов, которые вам нужны.

0 голосов
/ 26 июня 2019

Ваша функция принимает только три аргумента, а вы задаете пять. Можете ли вы избежать использования массива ячеек и создать отдельную переменную для каждого элемента. Например:

names_ct1  = './file_ct_1';
names_ct2  = './file_ct_2';
names_mk1  = './file_mk_1';
names_mk2  = './file_mk_2';
My_function(names_ct1 ,names_ct2, names_mk1, names_mk2, 0);
...