Вопрос

Мой вопрос заключается в следующем:почему следующее не работает, и как мне это исправить?

Plot[f[t], {t, 0, 2*Pi}] /. {{f -> Sin}, {f -> Cos}}

В результате получаются два пустых графика.По сравнению,

DummyFunction[f[t], {t, 0, 2*Pi}] /. {{f -> Sin}, {f -> Cos}}

дает

{DummyFunction[Sin[t], {t, 0, 2 *Pi}],  DummyFunction[Cos[t], {t, 0, 2 * Pi}]}

по желанию.

Это упрощенная версия того, что я на самом деле делал.Я был очень раздражен тем, что даже после выяснения раздражающего "правильного способа" помещения фигурных скобок ничего не работает.

В конце концов, я сделал следующее, которое работает:

p[f_] := Plot[f[t], {t, 0, 2*Pi}]
p[Sin]
p[Cos]
Это было полезно?

Решение

Mathematica пытается оценить график перед подстановкой.Вы можете предотвратить это с помощью функций Hold и ReleaseHold:

ReleaseHold[Hold[Plot[f[t],{t,0,2*Pi}]] /. {{f -> Sin},{f -> Cos}}]

Hold[] заставит все подвыражение Plot оставаться неупрощенным во время выполнения замены, затем ReleaseHold[] позволит ему продолжить фактическое построение графика.

Другие советы

В качестве альтернативы Питеру Hold/ReleaseHold стратегия, которую вы могли бы сделать

Plot[Evaluate[ f[t]/. {{f -> Sin}, {f -> Cos}} ], {t, 0, 2*Pi}]

который немного чище для чтения.Это гарантирует, что f заменяется перед Plot оценивается.

Этот еще короче:

Plot[#[t], {t, 0, 2*Pi}] & /@ {Sin, Cos}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top