2014-05-22 103 views
1

我不是一个非常核心的MATLAB编码器,我已经从YouTube和书中学到了一切。这可能是一个非常简单的问题,但我不知道要寻找答案。输出参数太多

在MATLAB中,我正在尝试做这样的事情。

>>[a,b,c] = [1,2,3] 

我想要这样的输出。

>> a = 1 
b = 2 
c = 3 

所以Bsically问题是: - 用户将在代码盯着和代码类似矩阵的过程中,将显示与作为输入的矩阵定义的变量的矩阵([A,B,C])会被询问([1,2,3])。我不知道如何编写一个循环代码,我将从变量矩阵中获取每个变量,并通过eval函数将值保存在该变量中。

远远高于书面代码是错误的,我知道,我可以用“for”循环和“eval”函数做到这一点。

但问题是没有。的变量(a,b,c)永远不会是常量,我想知道是否存在任何在MATLAB中构建的函数或方法,它将比for循环更好地工作。

正如我以前告诉过的,我不知道该怎么搜索这样的问题,或者这是一个非常常见的问题。 无论哪种方式,我会很高兴,如果你至少可以告诉我要搜索什么或将我重定向到相关问题。

如果您想了解更多信息或进行更正,请填写。

谢谢。

回答

1

的交易功能可以为固定数量的输入做到这一点:

[A,B,C]=deal(1,2,3) 

如果你不知道有多少投入你会事先得到,你必须做一些鬼混。这是我想出来的:

V=[1,2,3,4,5,6,7] 
if length(V)>1 
    for i=1:length(V) 
     S{i}=['A' num2str(i)]; 
     G{i}=['V(' num2str(i) ')']; 
    end 
    T=[S{1} ',']; 
    R=[G{1} ',']; 
    for i=2:length(V)-1 
     T=[T S{i} ',']; 
     R=[R G{i} ',']; 
    end 
    T=[T S{length(V)}]; 
    R=[R G{length(V)}]; 
    eval(['[' T ']=deal(' R ')']) 
else 
    A1=V 
end 

但随后A1处理,...,An当你不知道有多少人会是一个痛苦!

1

这在某种程度上被称为“元组拆包”(至少这是我在python中搜索的!)。我可以找到this thread,它解释了你可以在Octave中做到这一点(我检查过,它也适用于Matlab)。你之前的矢量变换成一个单元阵列:

values = num2cell([1,2,3]) 
[a,b,c] = values{:} 
+0

感谢budy它也适用于我的代码。你救了我很多麻烦。 – user3414324