0

我开始学习 Mathematica 9。我需要用数字范围的排列制作一个 nx4 矩阵“m”,其中第一列是矩阵“A”,第二、第三、第四列是矩阵“B”。此外,我需要排除第一行。有谁能够帮我?

`t = 2; a = Range[0, t]; b = Range[0, t]; c = Range[0, t];
{A = MatrixForm[
   1/Sqrt[Flatten[
      Table[a^2 + b^2 + c^2, {a, 0, t, 1}, {b, 0, t, 1}, {c, 0, t, 
        1}]]]],
 B = MatrixForm[Tuples[{a, b, c}]]}`

我需要这样的东西:

List[List[0, 0, 1, 1], List[0, 0, 2, Rational[1, 4]], 
 List[0, 1, 0, 1], List[0, 1, 1, Rational[1, 2]], 
 List[0, 1, 2, Rational[1, 5]], List[0, 2, 0, Rational[1, 4]], 
 List[0, 2, 1, Rational[1, 5]], List[0, 2, 2, \[Placeholder]], 
 List[1, 0, 0, \[Placeholder]], List[1, 0, 1, \[Placeholder]], 
 List[1, 0, 2, \[Placeholder]], List[1, 1, 0, \[Placeholder]], 
 List[1, 1, 1, \[Placeholder]], List[1, 1, 2, \[Placeholder]], 
 List[1, 2, 0, \[Placeholder]], List[1, 2, 1, \[Placeholder]], 
 List[1, 2, 2, \[Placeholder]], List[2, 0, 0, \[Placeholder]], 
 List[2, 0, 1, \[Placeholder]], List[2, 0, 2, \[Placeholder]], 
 List[2, 1, 0, \[Placeholder]], List[2, 1, 1, \[Placeholder]], 
 List[2, 1, 2, \[Placeholder]], List[2, 2, 0, \[Placeholder]], 
 List[2, 2, 1, \[Placeholder]], List[2, 2, 2, \[Placeholder]]]

这就是我想在 MathCad 中制作的 Mathematica 中做的事情

4

1 回答 1

1

在转向解决您的问题之前,我可以看到您的代码存在一些问题,作为初学者,您应该了解并在未来避免:

  • 您已将评估包装在一对中,A =因此结果将是一个列表,其中包含评估产生的两个表达式。这不会创建一个矩阵,它会创建一个包含两个s 的列表。B ={}MatrixForm

  • 将表达式包装在MatrixForm[]其中并将其分配给变量通常是一个坏主意。 MatrixForm[]确实是为了使输出看起来不错,大多数适用于 Mathematica 列表的操作(数组和矩阵只是列表的列表)不适用于带有 head 的对象MatrixForm[]

  • 评估开始的表达式会1/Sqrt[Flatten[生成错误消息:Power::infy: "Infinite expression 1/0 encountered."when a==0,b==0,c==0

最后,一些您没有要求的建议:使用仅在字母大小写上有所不同的变量名称,就像您使用Aanda和使用Band一样b,是通往痛苦和绝望世界的必经之路。仅仅因为你可以并不意味着你应该。

编辑

您可以使用以下命令轻松生成结果的前 3 列:

Tuples[Range[0, 2], 3]

现在这包括元素{0,0,0},所以我们将删除它,就像这样

Drop[Tuples[Range[0, 2], 3],1]

现在用替换规则计算第 4 列,如下所示:

Drop[Tuples[Range[0, 2], 3], 1] /. {x_, y_, z_} -> {x, y, z, 1/(x^2 + y^2 + z^2)}

请注意,我没有将此表达式的结果指定为任何变量的值,您可能想要。另请注意,我没有创建任何中间变量,这使您的工作区(在 Mathematica-speak 中Context)保持整洁。

于 2013-03-05T09:51:31.790 回答