2015-10-14 34 views
0
的数组元素

(*我不知道在Matlab进行编程。这是差不多Matlab语言的一般问题。*)商店公式为在Matlab

在Excel中,我们可以存储一个公式中细胞。例如,如果A2包含公式= A1+10,当A1的值为20时,A2的重新评估返回30

我的问题是,在matlab中是否有类似的机制?也就是说,我们可以在Matlab中的数组元素中指定formula,以便我们可以在以后重新评估数组吗?

编辑1: 继@rayryeng的我尽量让一个例子来说明这个概念的评论......其实,这正是电子表格的语言,如Excel可以做。

所以我的问题是,有没有一种机制,允许在Matlab中以下内容? (请注意,下面的语法只是象征性的)

>> B = [1 2; B{1,1}+2 4] // store some values and a formula in the array 

B = 

    1  2 
    3  4 

>> B{1,1} = 10 // change the value of one cell 

B = 

    10  2 
    3  4 

>> EVAL(B) // there is a re-evaluation command to re-calculate all the cells 

ans = 

    10  2 
    13  4 
+0

不,这不是真的如何编程语言的作品。在MATLAB中你有[功能](http://www.mathworks.com/help/matlab/function-basics.html)和[脚本](http://www.mathworks.com/help/matlab/scripts.html )。 – excaza

回答

4

希望我明白你想要什么,但答案的确是肯定的。您可以将“公式”存储在单元格数组中,其中每个元素都是句柄或匿名函数。

也许你的意思是这样:

formulae = {@(x) x+10, @sin, @cos, @(x) x/3}; 

语法@表示功能手柄和(x)表示,这是与输入变量x匿名函数。第一个单元格元素提供了一个函数,可以将每个值加上10,第二个和第三个参数是sincos的句柄,所以这些函数就像那些三角函数一样。最后手柄分为每一个进入它由3

为了演示,让我们创建一个小阵,然后通过每个公式和他们每个人都适用于小数组值:

>> formulae = {@(x) x+10, @sin, @cos, @(x) x/3}; 
>> A = [1 2; 3 4] 

A = 

    1  2 
    3  4 

>> formulae{1}(A) 

ans = 

    11 12 
    13 14 

>> formulae{2}(A) 

ans = 

    0.8415 0.9093 
    0.1411 -0.7568 

>> formulae{3}(A) 

ans = 

    0.5403 -0.4161 
    -0.9900 -0.6536 

>> formulae{4}(A) 

ans = 

    0.3333 0.6667 
    1.0000 1.3333 

我们先创建公式,然后创建一个[1 2; 3 4]的小2×2矩阵。之后,我们访问每个公式的单元格,然后将输入A放入函数中,我们得到您所看到的内容。


但是,当你开始,开始用功能的脚本实际上声明函数....不要使用这种编程风格的实际应用。它使你的代码不易读。例如,做sin(A)formula{2}(A)更可读。阅读代码的人必须记住阵列中的哪个位置与您要应用于输入中每个元素的公式相对应。

+0

感谢您的详细评论...我更新了我的OP。你表明我们可以在数组中存储公式(即'formulae'),以便回答我的问题(回答“是”)。但我只是意识到,它仍然不同于我们在Excel中可以做的事情:似乎我们无法在公式中指定单元格。例如,每一个公式都必须与常数或变量“x”相关,它不能与另一个公式(我们不能在公式中写'= B {1,1} + 2')相关。我对么? – SoftTimur

+0

@SoftTimur你不能那样做,所以你是对的。 – rayryeng

+0

@rayryeng你其实可以做到这一点我认为,看到我的答案的底部在这里:http://stackoverflow.com/a/33144578/1011724。然而,这可能不是在Matlab中最常用的做法,OP最喜欢将代码重构为更简单的等效解决方案 – Dan