gpt4 book ai didi

wolfram-mathematica - 函数作为模块的参数

转载 作者:行者123 更新时间:2023-12-02 05:17:48 27 4
gpt4 key购买 nike

如何将数学函数用作模块参数

如:

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 的 x 的 2 次方,这没有多大意义。有很多方法可以解决这个问题。最简单的方法是完全放弃模块并定义:

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]

注意:

  • 传入函数的函数是一个纯函数。如果您还不熟悉 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 设置为 Module 的本地变量,以避免与也称为 x 的任何工作区变量发生冲突。这避免了因函数的参数(纯函数没有参数名称)和 PersonalPlot 的第二个参数使用不同名称而引起的错误;现在已被删除。

无论这些函数是否使用模块,可能还有其他几种有用的方法将参数传递给函数。

编辑

我认为,我们大多数使用 Mathematica 一段时间的人都不会将 #^2& 视为需要避免的事情。如果您不喜欢它,您可以使用更明确的语法,如下所示:

fun1 = Function[x,x^2]

然后你可以像这样传递它

PersonalPlot[fun1,0.0,4.0]

通过使用这种方法,您可以通过要求传入正确的类型来使您的函数更不容易出错,就像这样

PersonalPlot[fun_Function, min_Real, max_Real] := ...

但这真的取决于你。

我不知道 Plot 是如何做到的,我必须查看文档。

关于wolfram-mathematica - 函数作为模块的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14361747/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com