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

#wolfram-mathematica

#wolfram-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$ элемент, но на этот раз он НЕ отображается…

Ответ №1:

Скорее всего, вы видите локализованные символы, которые получаются в результате определения области видимости, такие как 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
  

Комментарии:

1. 1, для «экранирования Module «. Я ненавижу, когда переменные перегрызают свои ограничения…

Ответ №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}]