在Matlab中将公式存储为数组元素

时间:2015-10-14 14:49:10

标签: arrays matlab functional-programming

(*我不熟悉Matlab中的编程。这只是关于Matlab语言的一般性问题。*)

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

我的问题是,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

1 个答案:

答案 0 :(得分: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 x 2矩阵。之后,我们访问每个公式的单元格,然后将输入A输入到函数中,我们得到您所看到的内容。

然而,当你开始时,首先在函数脚本中实际声明函数....不要在实际应用中使用这种编程风格。它使您的代码可读性降低。例如,执行sin(A)formula{2}(A)更具可读性。阅读代码的人必须记住数组中的哪个位置对应于您应用于输入中每个元素的公式。