如何在Mathematica中按间隔定义函数?

时间:2011-10-03 04:54:39

标签: wolfram-mathematica

如何在Mathematica中定义函数f(x),如果x在[-5,-4]或[1,3]中,则给出1,否则为0?它可能很简单,但我无法理解它!

3 个答案:

答案 0 :(得分:30)

你想要的基本结构是Piecewise,特别是你要求的功能可以写成

f[x_] := Piecewise[{{1, -5 <= x <= -3}, {1, 1 <= x <= 3}}, 0]

f[x_] := Piecewise[{{1, -5 <= x <= -3 || 1 <= x <= 3}}, 0]

请注意,最后一个参数0定义了不需要的默认值(或“else”)值,因为默认值为0。

另请注意,虽然PiecewiseWhich在形式上非常相似,但Piecewise用于构建函数,而Which用于编程。 Piecewise在集成,简化等方面会更好......,它也有正确的左括号数学符号,请参阅documentation中的示例。


由于您想要的分段函数非常简单,因此也可以使用BooleUnitStepUnitBox等步进函数构建它。

UnitBox[(x + 4)/2] + UnitBox[(x - 2)/2]

这些只是Piecewise的特殊情况,如PiecewiseExpand

所示
In[19]:= f[x] == UnitBox[(x+4)/2] + UnitBox[(x-2)/2]//PiecewiseExpand//Simplify
Out[19]= True

或者,您可以使用HeavisideThetaHeavisidePi等切换功能,例如

HeavisidePi[(x + 4)/2] + HeavisidePi[(x - 2)/2]

这很好,因为如果将函数视为分布,那么它的导数将返回Dirac delta函数的正确组合。


有关详细讨论,请参阅教程Piecewise Functions

答案 1 :(得分:13)

虽然西蒙的答案是规范和正确的答案,但这里还有两个选择:

f[x_] := 1 /; IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
f[x_?NumericQ] := 0

f[x_] := If[-5 <= x <= -3 || 1 <= x <= 3, 1, 0]

编辑:
请注意,第一个选项取决于输入定义的顺序(感谢Sjoerd指出这一点)。一个类似的解决方案,没有这个问题,并且在提供Interval作为输入时也能正常工作

f[x_] := 0 /; !IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
f[x_] := 1 /;  IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]

答案 2 :(得分:0)

一切都很好,但作为拇指的一般规则,应该始终采用最简单的方法,尽可能远离复杂的高级编程。在这种特殊情况下,我的意思是:

f [x_ /; -5&lt; = x&lt; = -3] = 0等...等等