【问题标题】:dynamic variable declaration function matlab动态变量声明函数matlab
【发布时间】:2014-04-30 11:38:14
【问题描述】:

如何在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

【问题讨论】:

    标签: matlab function variables dynamic


    【解决方案1】:

    案例 1: 这将为您提供 eval 字符串,您可以稍后使用这些字符串从一些名为 @ 的变量中实际获取 var1、var2、var3 等的值分别为 987654324@、some_string_2、some_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: 如果您希望评估 var1、var2、var3 等的值,您需要通过函数,因为函数不能只从工作区中挑选变量。

    所以,对于这种情况,你可以使用这个 -

    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
      

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-08
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2017-01-31
      相关资源
      最近更新 更多