如何在Mathematica中将一个表的值添加到另一个表?

时间:2011-09-21 17:12:22

标签: list wolfram-mathematica nested-lists

我创建了一个名为“value1”的值表。 “value1”只不过是一个z坐标值,可以称为“区域”。这些值取决于分别以“x”和“y”给出的x坐标和y坐标。

代码如下:

value1 = Table[{(10*(Cos[((x - 75)*2*3.14159)/
      200]^2)*(Cos[((y - 75)*2*3.14159)/200]^2)) + 
20}, {y, 0, 20, 5}, {x, 0, 20, 5}]

“value1”或“zone”的输出为

{{22.5}, {21.7274}, {21.0305}, {20.4775}, {20.1224}}, {{21.7274}, and so on

我有另一个名为“值2”的值表。这个表也给了我一个不同的z坐标值,它可以被称为“ztwo”。该值还取决于分别由“x”和“y”定义的x和y坐标。

注意z值是由下面给出的表达式定义生成的

(((70 - ((10*(Cos[((x - 75)*2*3.14159)/
             200]^2)*(Cos[((y - 75)*2*3.14159)/200]^2)) + 
       20))*0.3333))

我已使用下表中的上述表达式生成“ztwo”值

value2 = Table[{x,y, (((70 - ((10*(Cos[((x - 75)*2*3.14159)/
             200]^2)*(Cos[((y - 75)*2*3.14159)/200]^2)) + 
       20))*0.3333))}, {y, 0, 20, 5}, {x, 0, 20, 5}]

输出“value2”

{{{0, 0, 15.8318}, {5, 0, 16.0892}, {10, 0, 16.3215}, {15, 0, 16.5059}, {20, 0, 16.6242}}, {{0, 5, 16.0892}, {5, 5,16.2672}, {10, 5, 16.4277}, {15, 5, 16.555},and so on

从上面可以看出,“value2”是

的形式
{x1,y1,ztwo1},{x2,y2,ztwo2},{x3,y3,ztwo3}..and so on

我想创建一个值为“value3”的值表,它基本上是从我们称为“区域”的“值1”中添加z值到仅将“value2”的z值称为“z2” “得到表”value3“。在表“value3”中,只有z值发生变化,但它应该以下面的形式表示

{0,0,38.3317},{5,0,37.5592},{10,0,36.8623} and so on

Explanation: How do I get the above??
this is the "zone" values:
{{22.5}, {21.7274}, {21.0305}, {20.4775}, {20.1224}}, {{21.7274}, and so on

Below is "ztwo" values but expressed in{x,y,z} format

{{{0, 0, 15.8318}, {5, 0, 16.0892}, {10, 0, 16.3215}, {15, 0, 16.5059},    
{20,0,16.6242}}, {{0, 5, 16.0892} and so on

Now I want a table of "value 3" whose z values change since it is the addition of     
corresponding z co-ordinate values from table "value1" and table "value2"

 {0,0,15.8318+22.5},{5,0,16.0892+21.7274},{10,0,16.3215+36.8623} and so on

Which will lead to the desired, ideal output like this:

{0,0,38.3317},{5,0,37.5592},{10,0,36.8623} and so on

问题 如何创建表“Value3”,通过将表“value1”中的相应z值添加到表“value2”来为我提供所需的输出

1 个答案:

答案 0 :(得分:2)

您的代码中有一个小错误...在y的定义中(((70 - ...value2之间应该有一个逗号,以便获得您在下面发布的结果。

解决这个问题,您可以执行以下操作来获得结果:

value3 = value2;
value3[[All, All, 3]] += value1[[All, All, 1]];

编辑:

上面的代码按您希望的方式添加。我认为混淆是因为你想要三个坐标中的每一个作为列表而不是矩阵。为此,您只需要在Flatten 1 Level列表Flatten[value3, 1] Out[1]= {{0, 0, 38.3317}, {5, 0, 37.8167}, {10, 0, 37.3521}, {15, 0, 36.9833}, {20, 0, 36.7466}, {0, 5, 37.8167}, {5, 5, 37.4608}, {10, 5, 37.1397}, {15, 5, 36.885}, {20, 5, 36.7214}, {0, 10, 37.3521}, {5, 10, 37.1397}, {10, 10, 36.9482}, {15, 10, 36.7962}, {20, 10, 36.6986}, {0, 15, 36.9833}, {5, 15, 36.885}, {10, 15, 36.7962}, {15, 15, 36.7258}, {20, 15, 36.6806}, {0, 20, 36.7466}, {5, 20, 36.7214}, {10, 20, 36.6986}, {15, 20, 36.6806}, {20, 20, 36.669}} 。{/ p>

{{1}}