#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}]