Значение tmp$xxxx в выводе Mathematica

Поскольку это проблематично для строк Google, содержащих $ (знак доллара), я не смог найти никакого объяснения следующему выводу:

{Cos[tmp$132923 + \[Phi]], 
 Sin[tmp$132926 + \[Phi]], 
\[Phi]
}

Вопрос:

Что означает 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]
  }

Где 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]
      }

где я заменяю i,j фиксированными значениями. Затем V снова с элементом tmp$, но на этот раз НЕ строится...


person Dror    schedule 10.11.2011    source источник


Ответы (2)


Ваш код, вероятно, имеет вариант этой проблемы:

f[x_] := Module[{t}, Cos[t]+Cos[x] ]

в этот момент оценивая это:

f[y]

дает это:

Cos[t$685] + Cos[y]

Часто это означает, что есть проблема с кодом.

Либо 't' должен был быть передан в качестве параметра 'f':

f[x_,t_] := Module[{}, Cos[t]+Cos[x] ]

или 't' нужно было каким-то образом инициализировать:

f[x_] := Module[{t}, t=2x; Cos[t]+Cos[x] ]

Совершенно нормально использовать эти уникальные переменные в своем коде, если вы собираетесь это делать. Например, это один из способов написать выражение с множеством уникальных переменных:

Plus @@ Table[Unique[x]^i, {i, 100}]
person Arnoud Buzing    schedule 10.11.2011

Скорее всего, вы видите локализованные символы, полученные в результате области видимости, например Module.

Вот один пример. Поскольку локализованный символ x используется для определения глобального символа y, временный символ x$152 экранирует Module.

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

Out[2]= x$152

Существуют и другие варианты этого процесса. Предположим, вы установили уникальный контекст для ячейки (Evaluation > Notebook's Default Context > Unique to Each Cell Group), а затем сделали присвоение явно глобальному символу:

Global`b = a

Теперь в другом блокноте:

In[1]:= b

Out[1]= Notebook$$33`a
person Mr.Wizard    schedule 10.11.2011
comment
+1, для побегов Module. Я ненавижу, когда переменные разрушают свои ограничения... - person rcollyer; 10.11.2011