如何在Mathematica中定义函数f(x),如果x在[-5,-4]或[1,3]中,则给出1,否则为0?它可能很简单,但我无法理解它!
答案 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。
另请注意,虽然Piecewise
和Which
在形式上非常相似,但Piecewise
用于构建函数,而Which
用于编程。 Piecewise
在集成,简化等方面会更好......,它也有正确的左括号数学符号,请参阅documentation中的示例。
由于您想要的分段函数非常简单,因此也可以使用Boole
,UnitStep
和UnitBox
等步进函数构建它。
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
或者,您可以使用HeavisideTheta
或HeavisidePi
等切换功能,例如
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等...等等