我有一个代码,我们首先需要用给定的步骤生成一个范围内的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]
我的问题是:
- 访问x元素时是否自动生成?在x[0]=a之前没有提到x
- 索引访问不应该像x[[i]]那样吗
- Array在这里到底做什么?它没有分配给任何让我困惑的东西
以2、等为步长,尝试从2到10的数字范围的Range[2,10,2]
。
除此之外,您的代码中也存在一些错误,或者您对Mathematica的理解中可能存在一些错误。。。
x[0] = a
定义了一个名为x
的函数,当带有参数0
时,该函数返回a
(或a
的值,因为它是以前定义的(Mathematica特别注意用[
和]
包围函数参数列表的方括号字符。由于函数x
没有其他定义(至少我们在这里看不到(,因此它将返回除0
之外的任何参数的未赋值值。
你是对的,双方括号,ie[[
和]]
,用来括索引值。CCD_ 13实际上指的是称为CCD_ 14的列表的第二元素。请注意,Mathematica从1
索引,因此如果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}