そうです、その発言は正しくありません。Mathematica はそれを次のように評価します
x^2[x]
あなたが電話をかけPersonalPlot
て、それが評価されたとき、まあ、あまりx to the power of 2 of x
意味をなさない言葉で。問題を回避する方法はいくつかあります。最も簡単なのは、モジュールを完全に省いて次のように定義することです。
PersonalPlot1[fun0_, var0_, min0_, max0_] := Plot[fun0, {var0, min0, max0}]
次のように呼び出します。
PersonalPlot1[x^2, x, 0, 3]
このような呼び出しはPersonalPlot1[x^2, y, 0, 3]
、渡された関数の変数が 2 番目の引数と同じ変数ではないため、空のプロットを生成することに注意してください。読む。
関数を引数として取るモジュールを定義したい場合、これはそれを行う1つの方法です:
PersonalPlot2[fun0_, var0_, min0_, max0_] :=
Module[{fun = fun0, var = var0, min = min0, max = max0},
Plot[fun[var], {var, min, max}]]
あなたはこのように呼ぶでしょう
PersonalPlot2[#^2 &, x, 0, 3]
ノート:
- 関数に渡された関数は純粋な関数です。Mathematica の純関数にまだ慣れていない場合は、この時点でドキュメントの関連部分を参照してください。
Plot
これにより、指定した範囲で評価するようにコマンドに明示的に指示されfun[var]
ます。
関数は副作用によって機能し、渡された引数を操作 (コピー) するのではなくプロットを生成するため、ローカル変数は厳密には必要ありません。これを次のように簡単に書き換えることができます。
PersonalPlot2b[fun0_, var0_, min0_, max0_] := Module[{},
Plot[fun0[var0], {var0, min0, max0}]]
PersonalPlot
別の可能性は、次のように、 に渡される関数への変数入力を表す引数を削除することです。
PersonalPlot3[fun0_, min0_, max0_] := Module[{x},
Plot[fun0[x], {x, min0, max0}]]
あなたはこのように呼ぶでしょう
PersonalPlot3[#^2 &, 0, 3]
このバージョンでは、と呼ばれるワークスペース変数との衝突を避けるためx
に、 に対してローカルにしました。これにより、関数の引数 (純粋な関数には引数名がありません) と の 2 番目の引数に異なる名前を使用することによるエラーが回避されます。それは今落とされました。Module
x
PersonalPlot
それらの関数がモジュールを使用するかどうかにかかわらず、関数に引数を渡す便利な方法がおそらく他にもいくつかあります。
編集
#^2&
しばらく Mathematica を使ってきた私たちのほとんどは,Mathematicaを避けるべきものとは考えていないと思います.気に入らない場合は、次のようなより明示的な構文を使用できます。
fun1 = Function[x,x^2]
その後、このように渡すことができます
PersonalPlot[fun1,0.0,4.0]
このアプローチを使用すると、次のように正しい型を渡す必要があるため、関数のエラーが発生しにくくなります。
PersonalPlot[fun_Function, min_Real, max_Real] := ...
しかし、それは本当にあなた次第です。
頭のてっぺんから、それがどのようにPlot
機能するのかわかりません。ドキュメントを調べる必要があります。