动态变量声明函数matlab [英] dynamic variable declaration function matlab

查看:219
本文介绍了动态变量声明函数matlab的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何在Matlab 中声明动态变量名,函数返回这些变量?
我想要使用动态变量名返回字符串的函数,只有当迭代次数 n 被给出时才返回。



我尝试过以下代码:

  function [var] = myFunc(n)

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


解决方案

strong> CASE 1:这将为您提供以后可以使用的eval字符串,实际获取值为 var1 var2 var3 等等,从一些变量名为 some_string_1 some_string_2 some_string_3

  function varargout = myFunc1(n)

为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个可能的四个输出



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



    v1 =



    var1 = some_string_1



    v2 =



    var2 = some_string_2



    v3 = p>

    var3 = some_string_3



    v4 =



    var4 = some_string_4




另一种解决方案可能是获取单元格数组中的字符串 -

 函数eval_strings_cell = myFunc1_1(n)

为ii = 1:n
eval_strings_cell(ii)= {strcat('var',num2str(ii),'=','some_string _',num2str(ii))};
end
return;

运行样本:




  • 三个输出



    [var] = myFunc1_1(3)



    var = / p>

     'var1 = some_string_1''var2 = some_string_2''var3 = some_string_3'
    / pre>



CASE 2:如果您希望评估 var1 var2 var3 等等,你需要传递值通过函数的输入参数分配给它,因为函数不能从工作区中选择变量。



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

  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 
    / pre>

    v2 =

      12 


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



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



    v1 =

      10 

    v2 =

      12 

    v3 =

      13 




CASE 3:如果您正在寻找类似上述情况,则不需要 eval 。您可以直接获取值到 varargout ,如下所示 -

 函数varargout = myFunc3(n,varargin)

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

运行示例:



    $ b $



    [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 



How to declare dynamic variable names in Matlab, and the function returns those variables? I want the function that returns the string with dynamic variable name and returns only when number of iterations n is given.

I have tried the my following code:

    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

解决方案

CASE 1: This will get you the eval strings that you can use later on to actually get values into var1, var2, var3, etc. from some variables named some_string_1, some_string_2, some_string_3 respectively.

function varargout = myFunc1(n)

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

Sample runs:

  • Two outputs from 5 possible ones

    [v1,v2] = myFunc1(5)

    v1 =

    var1=some_string_1

    v2 =

    var2=some_string_2

  • Four outputs from 5 possible ones

    [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

Another solution to this case could be to get the strings in a cell array -

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;

Sample run:

  • Three outputs

    [var] = myFunc1_1(3)

    var =

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

CASE 2: If you wish to evaluate values for var1, var2, var3, etc. you need to pass values to be assigned to it through the input arguments of the function, because functions can't just pick variables from the workspace.

So, for that case, you may use this -

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;

Sample runs:

  • Pick values from first two inputs only -

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

    v1 =

    10
    

    v2 =

    12
    

  • Pick values from all three inputs -

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

    v1 =

    10
    

    v2 =

    12
    

    v3 =

    13
    

CASE 3: If you were looking for something like the above case, you don't need eval. You can just directly get the values into varargout, as shown here -

function varargout = myFunc3(n,varargin)

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

Sample runs:

  • Three inputs, two outputs -

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

    v1 =

    10
    

    v2 =

    12
    

  • Three inputs, three outputs

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

    v1 =

    10
    

    v2 =

    12
    

    v3 =

    13
    

这篇关于动态变量声明函数matlab的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆