【问题标题】:Matlab binary file does not accept its input values in shellMatlab 二进制文件在 shell 中不接受其输入值
【发布时间】:2019-11-07 20:13:05
【问题描述】:

我已经编译了我的 Matlab 函数并尝试在 shell 脚本中运行生成的二进制可执行文件(我确信我的转换)。在 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);

但是,当我在 shell 脚本中使用以下命令运行编译后的二进制文件时,会出现错误。

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

有人知道怎么回事吗?

【问题讨论】:

    标签: linux matlab shell binaryfiles


    【解决方案1】:

    你的函数只接受三个参数,而你给了它五个。 您能否避免使用元胞数组并为每个元素创建一个单独的变量。 例如:

    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);
    

    【讨论】:

    • 不,我不能这样做,因为输入的数量是可变的。这就是我使用细胞的原因。我可以成功运行 Matlab 脚本,但无法运行二进制版本!
    • 我对编译方面不太了解,但您可以使用 'varargin' 语法来获得参数数量变量。例如:我的函数(可变参数)
    【解决方案2】:

    每个命令行参数都作为字符串传递给您的函数。您不能传递元胞数组、数值数组或其他任何东西。您需要编写函数来接受字符串输入参数。

    如果您需要可变数量的输入参数,请声明您的函数

    function name(varargin)
    

    (见the docs

    然后,在您的函数中,varargin 是一个包含每个输入字符串的元胞数组。 nargin 等于 numel(varargin),并给出输入参数的数量。

    如果需要,您可以进一步使用inputParser 来简化解析输入参数,例如一种分离您似乎需要的两种不同类型的输入参数的方法。

    【讨论】:

      猜你喜欢
      • 2013-08-18
      • 1970-01-01
      • 2013-06-22
      • 1970-01-01
      • 1970-01-01
      • 2010-09-17
      • 1970-01-01
      • 2017-12-01
      • 1970-01-01
      相关资源
      最近更新 更多