
Lo que el gráfico muestra es una función
$$f(x)=\left\{\begin{array}{ll}16\,\mathrm{e}^{-x^2/3},&x<0\\[0.1in]\lfloor{x}\rfloor,&0\leq{x}<8\\[0.1in]25-x,&8\leq{x}<14\\[0.1in]5\sin{x},&x\geq14\end{array}\right.$$ lograda no con
Piecewise, sino con un vulgar y silvestre
If (anidado):
Plot[If[x > 0, If[x < 8, Floor[x], If[x < 14, -x + 22, 5 Sin[x]]],
16 Exp[-1/3 x^2]], {x, -5, 7 Pi}, PlotStyle -> {Red, Thick},
Exclusions -> {x == 0, x == 8, x == 14}, AxesLabel -> {x, f[x]}]
Esto surge por una pregunta que me encontré en
Mathematica SE (por la que decidí por fin registrarme). Se pregunta cómo evaluar sumatorios con condiciones, por ejemplo
$$\sum_{\substack{i=-\infty\\i\neq0}}^{\infty}\,\sum_{\substack{j=2\\j|i\\j\neq{i}}}^{n}f(i,j)$$ puede lograrse con una instrucción del tipo
Sum[If[Divisible[i, j] && i != 0 && i != j, f[i, j], 0],
{i, -Infinity, Infinity}, {j, 2, n}]
Lo que hace
If[cond, V, F] es regresar
V si
cond es cierta o
F si
cond es falsa. Ésta, y en general los condicionales, son funciones bien conocidas por quienes gustan programar, y en Mathematica a veces puede no ser obvio el cómo implementarlas.
Acá se muestran los condicionales comunes en Mathematica, y como se dice, algunos resultan más económicos que un
If anidado. Curiosamente en SE la mejor respuesta no fue la mía, sino una que proponía utilizar
Boole. Y pues en efecto,
Boole[A] regresa 1 si
A es cierta o 0 si
A es falsa. La suma anterior entonces se escribiría como
Sum[f[i, j] Boole[i != 0] Boole[Divisible[i, j]] Boole[i != j],
{i, -Infinity, Infinity}, {j, 2, n}]
La salida, por ejemplo, para ${-10\leq{i}\leq10,\,2\leq{j}\leq10}$ de esta suma, es
f[-10, 2] + f[-10, 5] + f[-10, 10] + f[-9, 3] + f[-9, 9] + f[-8, 2] +
f[-8, 4] + f[-8, 8] + f[-7, 7] + f[-6, 2] + f[-6, 3] + f[-6, 6] +
f[-5, 5] + f[-4, 2] + f[-4, 4] + f[-3, 3] + f[-2, 2] + f[4, 2] +
f[6, 2] + f[6, 3] + f[8, 2] + f[8, 4] + f[9, 3] + f[10, 2] + f[10, 5]
Tal vez es sólo cuestión de gustos, pero en general ésta me parece la forma más sencilla de usar los condicionales en Mathematica, simplemente incorporarlos al argumento de la función en cuestión.
No comments:
Post a Comment