通过Wolfram语言中的数组生成列表



我有一个代码,我们首先需要用给定的步骤生成一个范围内的n+1个数字。然而,我不明白它是如何以及为什么工作的:

a = 2;
b = 7;
h = (b-a)/n;
x[0] = a;
Array[x, n+1, 0];
For[i = 0, i < n + 1, i++, x[i] = a + h*i]

我的问题是:

  1. 访问x元素时是否自动生成?在x[0]=a之前没有提到x
  2. 索引访问不应该像x[[i]]那样吗
  3. Array在这里到底做什么?它没有分配给任何让我困惑的东西

以2、为步长,尝试从2到10的数字范围的Range[2,10,2]

除此之外,您的代码中也存在一些错误,或者您对Mathematica的理解中可能存在一些错误。。。

x[0] = a定义了一个名为x的函数,当带有参数0时,该函数返回a(或a的值,因为它是以前定义的(Mathematica特别注意用[]包围函数参数列表的方括号字符。由于函数x没有其他定义(至少我们在这里看不到(,因此它将返回除0之外的任何参数的未赋值值。

你是对的,双方括号,ie[[]],用来括索引值。CCD_ 13实际上指的是称为CCD_ 14的列表的第二元素。请注意,Mathematica1索引,因此如果x存在并且是列表,则x[[0]]将产生错误。

表达式Array[x, n+1, 0]确实返回一个值,但它没有分配给任何符号,因此丢失。该行后面的;会抑制Mathematica的默认行为,以打印您执行的任何表达式的返回值。

最后,关于使用For制作值列表的问题,请参阅https://mathematica.stackexchange.com/questions/7924/alternatives-to-procedural-loops-and-iterating-over-lists-in-mathematica.也许在该网站上进一步询问Mathematica问题,该系统的真正专家更有可能在那里找到。

我想我可以补充一下。。。如果您出于某种原因致力于使用Array,请专门询问另一个问题。正如你可能(没有(意识到的那样,我建议不要使用该函数来创建数字列表。

从文档中,Array[f,n,r]使用索引原点r生成一个列表。

Array[x, n + 1, 0]本身只生成x函数的列表,例如

n = 4;
Array[x, n + 1, 0]

{x[0],x[1],x[2],x[3],x[4]}

如果定义了x,则应用它,例如

x[arg_] := arg^2
Array[x, 4 + 1, 0]

{0,1,4,9,16}

或者,要使用x作为函数变量,可以像那样设置Array

Clear[x]
With[{z = Array[x, n + 1, 0]}, z = {m, n, o, p, q}]
{x[0], x[1], x[2], x[3], x[4]}

{m,n,o,p,q}

OP的代码设置For循环中x的函数变量,例如

仍然使用n = 4

a = 2;
b = 7;
h = (b - a)/n;
For[i = 0, i < n + 1, i++, x[i] = a + h*i]

可由Array[x, n + 1, 0]显示

{2,13/4,9/2,23/4,7}

还有x[0] == 2

真实

也可以这样完成

Clear[x]
With[{z = Array[x, n + 1, 0]}, z = Table[a + h*i, {i, 0, 4}]]

{2,13/4,9/2,23/4,7}

注意DownValues[x]还显示了函数定义

{HoldPattern[x[0]:>2,HoldPattern[x[1]]:>13/4,HoldPattern[x[2]]:>9/2,HoldPattern[x[3]]:>23/4,HoldPattern[x[4]:>7}

相关内容

  • 没有找到相关文章

最新更新