Mathematica输出中"tmp $ xxxx"的含义

Dro*_*ror 7 wolfram-mathematica

由于谷歌字符串包含$(美元符号)是有问题的,我无法找到以下输出的任何解释:

{Cos[tmp$132923 + \[Phi]], 
 Sin[tmp$132926 + \[Phi]], 
\[Phi]
}
Run Code Online (Sandbox Code Playgroud)

问题:

什么tmp$xxxx意思?

一些背景

在`book2.nb'中我定义了以下函数:

g[i_, j_] := {
  f1[i, t, f2[b, j], p][[1]],
  f1[i, t, f2[b, j], p][[2]],
  f3[i, t, p]
  }
Run Code Online (Sandbox Code Playgroud)

f1,f2,f3在另一个笔记本电脑都被定义book1.nb,这是初始化和工作的罚款.此外,f1返回一个列表,并且b是一个定义并激活的列表.

现在,当我调用时,g[1,1]我得到一个类似于上面引用的输出 - 用这个tmp$.然而,如果我试图绘制g它完美的工作(使用ParametricPlot3D[g[1, 1], {t, 0, 1}, {p, 0, 2 Pi}]).但是,如果我尝试定义变量

V= {
      f1[1, t, f2[b, 1], p][[1]],
      f1[1, t, f2[b, 1], p][[2]],
      f3[1, t, p]
      }
Run Code Online (Sandbox Code Playgroud)

i,j用固定值替换的地方.然后V是一个tmp$元素,但这次它没有绘制...

Mr.*_*ard 9

您很可能会看到通过范围界定产生的本地化符号,例如Module.

这是一个例子.由于本地化符号x用于定义全局符号,y因此临时符号会x$152转义Module.

In[1]:= Module[{x}, y = x]; y

Out[2]= x$152
Run Code Online (Sandbox Code Playgroud)

此过程还有其他变体.假设你设置一个唯一的上下文的电池(Evaluation> Notebook's Default Context> Unique to Each Cell Group),然后进行分配,以一个明确的全局符号:

Global`b = a
Run Code Online (Sandbox Code Playgroud)

现在在另一个笔记本:

In[1]:= b

Out[1]= Notebook$$33`a
Run Code Online (Sandbox Code Playgroud)

  • +1,用于"逃避`模块`".当变量咀嚼他们的束缚时我讨厌它...... (2认同)

Arn*_*ing 7

您的代码可能有此问题的变体:

f[x_] := Module[{t}, Cos[t]+Cos[x] ]
Run Code Online (Sandbox Code Playgroud)

在这一点评估这个:

f[y]
Run Code Online (Sandbox Code Playgroud)

给出这个:

Cos[t$685] + Cos[y]
Run Code Online (Sandbox Code Playgroud)

通常,这意味着代码存在问题.

要么't'要作为'f'的参数传入:

f[x_,t_] := Module[{}, Cos[t]+Cos[x] ]
Run Code Online (Sandbox Code Playgroud)

或't'需要以某种方式初始化:

f[x_] := Module[{t}, t=2x; Cos[t]+Cos[x] ]
Run Code Online (Sandbox Code Playgroud)

如果您打算这样做,在代码中使用这些唯一变量是完全可以的.例如,这是使用许多唯一变量编写表达式的一种方法:

Plus @@ Table[Unique[x]^i, {i, 100}]
Run Code Online (Sandbox Code Playgroud)