如何使用数学函数作为模块参数
如:
PersonalPlot[fun0_, var0_, min0_, max0_] :=
Module[{fun = fun0, var = var0 , min = min0, max = max0},
(*this is incorrect*)
fun = fun[var_];
Plot[fun, {var, min, max}]
]
PersonalPlot[x^2,x,0,3];
如何使用数学函数作为模块参数
如:
PersonalPlot[fun0_, var0_, min0_, max0_] :=
Module[{fun = fun0, var = var0 , min = min0, max = max0},
(*this is incorrect*)
fun = fun[var_];
Plot[fun, {var, min, max}]
]
PersonalPlot[x^2,x,0,3];
你是对的,这种说法是不正确的。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]
会产生一个空图,因为传入的函数中的变量与第二个参数不是同一个变量。继续阅读。
如果您想定义一个将函数作为参数的模块,那么这是一种方法:
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]
笔记:
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
将. 这避免了由于函数的参数使用不同的名称(纯函数没有参数名称)和 ; 的第二个参数而导致的错误。现在已经放弃了。Module
x
PersonalPlot
可能还有其他几种有用的方法可以将参数传递给函数,无论这些函数是否使用模块。
编辑
我认为,我们大多数使用 Mathematica 一段时间的人都不认为#^2&
这是要避免的事情。如果你不喜欢它,你可以使用更明确的语法,像这样:
fun1 = Function[x,x^2]
然后你可以像这样传递
PersonalPlot[fun1,0.0,4.0]
通过使用这种方法,您可以通过要求传入正确的类型来使您的函数更不容易出错,就像这样
PersonalPlot[fun_Function, min_Real, max_Real] := ...
但这真的取决于你。
我不知道Plot
它是怎么做的,我必须查看文档。