Dun*_*nda 18 wolfram-mathematica
如何在Mathematica中定义函数f(x),如果x在[-5,-4]或[1,3]中,则给出1,否则为0?它可能很简单,但我无法弄清楚!
Sim*_*mon 30
你想要的基本结构Piecewise,特别是你要求的功能可以写成
f[x_] := Piecewise[{{1, -5 <= x <= -3}, {1, 1 <= x <= 3}}, 0]
Run Code Online (Sandbox Code Playgroud)
要么
f[x_] := Piecewise[{{1, -5 <= x <= -3 || 1 <= x <= 3}}, 0]
Run Code Online (Sandbox Code Playgroud)
请注意,最后一个参数0定义了默认值(或"else")值,因为默认默认值为0.
还要注意的是,虽然Piecewise和Which在形式上很相似,Piecewise是构建功能,同时Which可以进行编程.Piecewise将在集成,简化等方面发挥更好......,它也有适当的左括号数学符号,请参阅文档中的示例.
既然你想要的分段函数是相当简单的,也有可能是从阶梯函数等构成Boole,UnitStep并且UnitBox,如
UnitBox[(x + 4)/2] + UnitBox[(x - 2)/2]
Run Code Online (Sandbox Code Playgroud)
这些只是特殊情况Piecewise,如图所示PiecewiseExpand
In[19]:= f[x] == UnitBox[(x+4)/2] + UnitBox[(x-2)/2]//PiecewiseExpand//Simplify
Out[19]= True
Run Code Online (Sandbox Code Playgroud)
或者,你可以像使用开关功能HeavisideTheta或HeavisidePi如
HeavisidePi[(x + 4)/2] + HeavisidePi[(x - 2)/2]
Run Code Online (Sandbox Code Playgroud)
这很好,因为如果将函数视为一个分布,那么它的导数将返回Dirac delta函数的正确组合.
有关更多讨论,请参阅教程分段函数.
Dr.*_*ius 13
虽然西蒙的答案是规范和正确的答案,但这里还有两个选择:
f[x_] := 1 /; IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
f[x_?NumericQ] := 0
Run Code Online (Sandbox Code Playgroud)
要么
f[x_] := If[-5 <= x <= -3 || 1 <= x <= 3, 1, 0]
Run Code Online (Sandbox Code Playgroud)
编辑:
请注意,第一个选项取决于输入定义的顺序(感谢Sjoerd指出这一点).一个类似的解决方案没有这个问题,并且在提供Interval输入时也能正常工作
f[x_] := 0 /; !IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
f[x_] := 1 /; IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
Run Code Online (Sandbox Code Playgroud)