4

私の質問は次のとおりです。なぜ次のことが機能しないのですか?どうすれば修正できますか?

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

結果は 2 つの空白のグラフです。比較すると、

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 に答える