mathematica输出中的“$”符号

时间:2011-12-07 05:47:12

标签: math wolfram-mathematica

我在使用以下代码时遇到一些小问题:

Lagrange[list_] := 
  Module[{points = list, length, k, j, m, x, g}, 
    length = Length[points]; 
    k = length - 1; 
    f = Sum[points[[j + 1,2]]*Product[If[j != m, (x - points[[m + 1,1]])/
          (points[[j + 1,1]] - points[[m + 1,1]]), 1], {m, 0, k}], {j, 0, k}]; 
    g = FullSimplify[Expand[f]]; 
    Return[f]]

我得到的输出是:

Out[101]= 0. -1.85698 (-1.5+x$26810) (-0.75+x$26810) (0. +x$26810) (0.75+x$26810)
         +0.490717 (-1.5+x$26810) (-0.75+x$26810) (0. +x$26810) (1.5 +x$26810)
         -0.490717 (-1.5+x$26810) (0. +x$26810) (0.75 +x$26810) (1.5 +x$26810)
         +1.85698 (-0.75+x$26810) (0. +x$26810) (0.75 +x$26810) (1.5 +x$26810)

我关心的是这些“$”符号。我不知道它们是什么意思,我找不到它们的文档,它们阻止了这个多项式的绘制。

2 个答案:

答案 0 :(得分:6)

输出中的$来自Module的词法作用域生成的唯一变量(请参阅mathematica/ref/Module的更多信息部分)。这就是为什么我让my LagrangePoly function接受多项式所在的符号。我使用LagrangePoly[list_, var_:x],默认为全局符号x

问题的一个简单例子是

In[1]:= Module[{x}, x]    
Out[1]= x$583

“本地”变量x$nnn中的数字来自全球$ModuleNumber

如果您不理解这一点,那么您应该阅读教程Blocks Compared with Modules

答案 1 :(得分:2)

在您的代码中,x是一个局部变量。但是,您将返回包含x的表达式。局部变量的目的是它们不应出现在它们的上下文之外,在本例中是模块。

考虑这个简单的例子:

adder[x_] := Module[{y}, Return[x + y]]

adder[2]提供:2 + y$1048

一个好的做法是认识到我们的函数加法器本身应该返回一个函数。

adder[x_] := Function[{y}, x + y]

twoAdder = adder[2];

twoAdder[3]提供:5