4

我的问题是:为什么以下工作不起作用,我该如何解决?

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]
4

3 回答 3

7

作为彼得Hold/ReleaseHold策略的替代方案,您可以做

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

读起来更干净一些。这确保在评估f之前被替换。Plot

于 2010-03-22T05:01:39.863 回答
7

这个更短:

Plot[#[t], {t, 0, 2*Pi}] & /@ {Sin, Cos}
于 2010-03-22T07:23:48.390 回答
4

Mathematica 试图在替换之前评估 Plot。您可以使用 Hold 和 ReleaseHold 功能防止这种情况发生:

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

Hold[] 将强制整个 Plot 子表达式在执行替换时保持未简化,然后 ReleaseHold[] 将让它继续实际绘图。

于 2010-03-22T02:44:36.473 回答