我的问题是:为什么以下工作没有,我该如何解决?
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]
答案 0 :(得分:7)
作为彼得Hold
/ ReleaseHold
策略的替代方案,你可以做到
Plot[Evaluate[ f[t]/. {{f -> Sin}, {f -> Cos}} ], {t, 0, 2*Pi}]
阅读起来有点干净。这可确保在评估f
之前替换Plot
。
答案 1 :(得分:7)
这个更短:
Plot[#[t], {t, 0, 2*Pi}] & /@ {Sin, Cos}
答案 2 :(得分:4)
Mathematica试图在替换之前评估Plot。您可以使用Hold和ReleaseHold函数来阻止它:
ReleaseHold[Hold[Plot[f[t],{t,0,2*Pi}]] /. {{f -> Sin},{f -> Cos}}]
Hold []将强制整个Plot子表达式在执行替换时保持未简化状态,然后ReleaseHold []将继续进行实际绘图。