我在使用以下代码时遇到一些小问题:
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)
我关心的是这些“$”符号。我不知道它们是什么意思,我找不到它们的文档,它们阻止了这个多项式的绘制。
答案 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