动态变量声明函数matlab

时间:2014-03-23 04:07:33

标签: matlab function variables dynamic

如何在 Matlab 中声明动态变量名,该函数是否返回这些变量? 我希望函数返回带有动态变量名的字符串,并仅在给出迭代次数n时返回。

我尝试了以下代码:

    function [var] = myFunc(n)

    for ii=1:n
              var= ['var' num2str(ii)];
              var{ii} = strcat('(some srting', var,')');
              eval(['var' num2str(ii) ' = var']);
    end
    end

1 个答案:

答案 0 :(得分:0)

案例1:这将为您提供以后可以使用的eval字符串,以实际获取var1var2var3等值来自一些名为some_string_1some_string_2some_string_3的变量。

function varargout = myFunc1(n)

for ii=1:n
    eval_string = strcat('var',num2str(ii),'=','some_string_',num2str(ii));
    varargout(ii) = {eval_string};
end
return;

样品运行:

  • 5个可能的两个输出

    [v1,v2] = myFunc1(5)

    v1 =

    VAR1 = some_string_1

    v2 =

    VAR2 = some_string_2

  • 5个可能的4个输出

    [v1,v2,v3,v4] = myFunc1(5)

    v1 =

    VAR1 = some_string_1

    v2 =

    VAR2 = some_string_2

    v3 =

    VAR3 = some_string_3

    v4 =

    VAR4 = some_string_4

对于这种情况的另一种解决方案可能是在单元格数组中获取字符串 -

function eval_strings_cell = myFunc1_1(n)

for ii=1:n
    eval_strings_cell(ii) = {strcat('var',num2str(ii),'=','some_string_',num2str(ii))};
end
return;

示例运行:

  • 三个输出

    [var] = myFunc1_1(3)

    var =

    'var1=some_string_1'    'var2=some_string_2'    'var3=some_string_3'
    

案例2 :如果您希望评估var1var2var3等的值,则需要传递要分配给它的值通过函数的输入参数,因为函数不能只从工作空间中选择变量。

因此,对于这种情况,您可以使用此 -

function varargout = myFunc2(n,some_string_1,some_string_2,some_string_3)

for ii=1:n
    eval_string = strcat('varargout(',num2str(ii),')=','{some_string_',num2str(ii),'}');
    evalc(eval_string);
end
return;

样品运行:

  • 仅从前两个输入中选择值 -

    [v1,v2] = myFunc2(2,10,12,13)

    v1 =

    10
    

    v2 =

    12
    
  • 从所有三个输入中选择值 -

    [v1,v2,v3] = myFunc2(3,10,12,13)

    v1 =

    10
    

    v2 =

    12
    

    v3 =

    13
    

案例3:如果您正在寻找类似上述情况的内容,则不需要eval。您可以直接将值输入varargout,如下所示 -

function varargout = myFunc3(n,varargin)

for ii=1:n
    varargout(ii) = varargin(ii);
end
return;

样品运行:

  • 三个输入,两个输出 -

    [v1,v2] = myFunc3(2,10,12,13)

    v1 =

    10
    

    v2 =

    12
    
  • 三个输入,三个输出

    [v1,v2,v3] = myFunc3(3,10,12,13)

    v1 =

    10
    

    v2 =

    12
    

    v3 =

    13