Все еще первые дни с Mathematica, поэтому, пожалуйста, простите за, вероятно, очень очевидный вопрос. Я пытаюсь создать некоторые параметрические графики. У меня есть:
ParametricPlot[{
(a + b) Cos[t] - h Cos[(a + b)/b t],
(a + b) Sin[t] - h Sin[(a + b)/b t]},
{t, 0, 2 \[Pi]}, PlotRange -> All] /. {a -> 2, b -> 1, h -> 1}
Без радости: правила замены не применяются и a
, b
и h
остаются неопределенными.
Если я вместо этого сделаю:
Hold@ParametricPlot[{
(a + b) Cos[t] - h Cos[(a + b)/b t],
(a + b) Sin[t] - h Sin[(a + b)/b t]},
{t, 0, 2 \[Pi]}, PlotRange -> All] /. {a -> 2, b -> 1, h -> 1}
похоже, что правила работают, что подтверждается выводом:
Hold[ParametricPlot[{(2 + 1) Cos[t] -
1 Cos[(2 + 1) t], (2 + 1) Sin[t] - 1 Sin[(2 + 1) t]}, {t, 0,
2 \[Pi]}, PlotRange -> All]]
Чего я и ожидал. Уберите Hold
, а ParametricPlot
не работает. Тем не менее, нет ничего плохого в уравнениях или самом ParametricPlot
, потому что я попытался установить значения для a, b и h в отдельном выражении (a=2; b=1; h=1
), и я получил свой симпатичный двойной кардоид, как и ожидалось.
Итак, что я делаю не так с ReplaceAll
и почему не работают правила трансформации? Это еще один фундаментально важный аспект ММА, который мой изуродованный ООП мозг не понимает.
Я попытался прочитать ReplaceAll
и ParametricPlot
, и самая близкая подсказка, которую я нашел, заключалась в том, что «ParametricPlot
имеет атрибут HoldAll
и оценивает f
только после присвоения конкретных числовых значений переменным», что не очень помогло, иначе меня бы здесь не было.
Спасибо.