在Mathematica中平移一个数字列表

时间:2014-10-09 07:30:19

标签: wolfram-mathematica

因此,对于我的离散数学建模课中的作业问题,我们被要求在Mathematica中创建一个函数,该函数输入一个列表并对该列表的每个元素进行平方。这是一项简单的任务,我已经完成了以下工作:

sqList[list_] = (list)^2;

但我想用“for循环”来做这件事。这是我的代码:

sqList2[list2_] :=
  (
    For[j = 1, j <= Length[list2], j++,
    (
     list2[j]^2;
     )];
   list2
  );

我更习惯于Matlab,并试图提升学习曲线。这段代码对我来说很有意义,并且非常感谢我应该采取的任何方向。我已经尝试过调试这段代码,但就像我说的那样,我不习惯这个程序,也不习惯它的堆栈轨道。我找不到任何问题,但它输出我输入的确切列表。

1 个答案:

答案 0 :(得分:2)

使用示例列表

list = {1, 2, 3};

sqList[list_] := list^2

sqList[list]
  

{1,4,9}

这是有效的,因为Power ^ )是可列出的:

Attributes[Power]
  

{Listable,NumericFunction,OneIdentity,Protected}

按元素处理列表元素

sqList2[list2_] := Module[{squaredlist = {}, j},
  For[j = 1, j <= Length[list2], j++,
   AppendTo[squaredlist, list2[[j]]^2]];
  squaredlist]

sqList2[list]
  

{1,4,9}

或者可以使用Map

sqList3[list3_List] := Map[#^2 &, list3]

sqList3[list]
  

{1,4,9}

注意

这种形式的功能,与您尝试过的功能相近,不会起作用,因为list2是一个输入变量,无法修改。

sqList2[list2_] := (
  For[j = 1, j <= Length[list2], j++,
   list2[[j]] = list2[[j]]^2];
  list2)

使其工作的最小修改是: -

sqList2[list2input_] := (
  list2 = list2input;
  For[j = 1, j <= Length[list2], j++,
   list2[[j]] = list2[[j]]^2];
  list2)

此外,For循环不输出运行结果;这就是为什么需要在循环内收集输出。