wolfram-mathematica - una - leyenda en mathematica
¿Cómo definir una función por intervalos en Mathematica? (3)
¿Cómo puedo definir una función f (x) en Mathematica que da 1 si x está en [-5, -4] o [1, 3] y 0 en caso contrario? Probablemente sea algo simple, ¡pero no puedo entenderlo!
Aunque la respuesta de Simon es canónica y correcta, aquí hay otras dos opciones:
f[x_] := 1 /; IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
f[x_?NumericQ] := 0
o
f[x_] := If[-5 <= x <= -3 || 1 <= x <= 3, 1, 0]
Editar:
Tenga en cuenta que la primera opción depende del orden en que se ingresaron las definiciones (gracias Sjoerd por señalarlo). Una solución similar que no tiene este problema y también funcionará correctamente cuando se suministre un Interval
como entrada es
f[x_] := 0 /; !IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
f[x_] := 1 /; IntervalMemberQ[Interval[{-5, -3}, {1, 3}], x]
Todo está bien y bien, pero como regla general, uno siempre debe intentar el enfoque más simple y mantenerse alejado de la programación sofisticada de alto nivel. En esta situación particular me refiero a lo siguiente:
f [x_ /; -5 <= x <= -3] = 0 etc ... etc
La construcción básica que desea es Piecewise
, en particular, la función que estaba solicitando se puede escribir como
f[x_] := Piecewise[{{1, -5 <= x <= -3}, {1, 1 <= x <= 3}}, 0]
o
f[x_] := Piecewise[{{1, -5 <= x <= -3 || 1 <= x <= 3}}, 0]
Tenga en cuenta que el argumento final, 0
define el valor predeterminado (o "else") no es necesario porque el valor predeterminado predeterminado es 0.
También tenga en cuenta que, aunque Piecewise
y Which
son muy similares en su forma, Piecewise
es para la construcción de funciones, mientras que Which
para la programación. Piecewise
jugará mejor con la integración, la simplificación, etc ..., también tiene la notación matemática correcta, vea los ejemplos en la Piecewise .
Dado que la función por partes que desea es bastante simple, también podría construirse a partir de funciones de pasos como Boole
, UnitStep
y UnitBox
, por ejemplo
UnitBox[(x + 4)/2] + UnitBox[(x - 2)/2]
Estos son solo casos especiales de Piecewise
, como se muestra en PiecewiseExpand
In[19]:= f[x] == UnitBox[(x+4)/2] + UnitBox[(x-2)/2]//PiecewiseExpand//Simplify
Out[19]= True
Alternativamente, puedes usar funciones de cambio como HeavisideTheta
o HeavisidePi
, por ejemplo
HeavisidePi[(x + 4)/2] + HeavisidePi[(x - 2)/2]
que son agradables, porque si se trata la función como una distribución, entonces su derivado devolverá la combinación correcta de funciones delta de Dirac .
Para más discusión vea el tutorial de Funciones por Tiempos .