Ejercicio que permite representar una función cuadrática

Usando las posibilidades gráficas y de cálculo de sympy, voy a mostrar un fichero LyX que permite representar una función cuadrática obteniendo sus elementos principales y construyendo una tabla de valores. Al final del artículo hay un enlace que permite descargar el fichero fuente.

Las tablas que se obtienen de solución se pueden realizar con pandas de forma más fácil (de forma similar a como se hace en Tabla de derivadas e integrales usando LyX y pythontex) y de nuevo he optado por hacerlas de forma constructiva. De esa forma se pueden tener varios ejemplos de cómo mezclar LateX con funciones de python para obtener tablas tras compilar nuestro fichero con pdflatex. A partir de ellas se pueden coger ideas para realizar otro tipo de tablas con pythontex. Es interesante ver en la solución la forma de <<escapar>> caracteres especiales de LaTeX dentro de las cadenas usadas.

En la solución propuesta se ha trabajado con el módulo plotting de sympy, no es muy potente pero permite realizar gráficas no muy complejas sin demasiada complicación. Para gráficos más elaborados es mejor usar matploblib directamente o la librería Sympy Plotting Backends’s.

Importante

Para poder trabajar de forma adecuada con los ficheros svg con LyX es necesario tener instalado inkscape,

# apt install inkscape

Para poder escribir la ecuación de segundo grado se usan unos comandos de LaTeX

%%esto es de LaTeX para la ecuación de 2º grado
%%para la fórmula de la ecuación de 2º grado
\newcommand*{\qf}{x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}}
%%para escribir la ecuación de segundo grado para unos valores concretos
\def\qfs#1#2#3{\frac{-(#2) \pm \sqrt{ (#2)^2-4 \cdot (#1) \cdot(#3) }} {2 \cdot (#1)}}

que permiten escribir la ecuación de segundo grado con solo poner en dentro de un entorno ecuación \qfy se obtiene de resultado \(x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}\). Para que lo haga para unos valores concretos escribiremos (también dentro de una ecuación) $\qfs{1}{-5}{6}$ y se obtiene \(\frac{-(-5) \pm \sqrt{ (-5)^2-4 \cdot (1) \cdot(6) }} {2 \cdot (1)}\) . No son imprescindibles y se podrían escribir las ecuaciones de forma directa con ecuaciones, pero los pongo por si son útiles.

De nuevo, la solución de este ejercicio está parametrizada y en él solo hay que establecer tres variables en el inicio del código, se trata de los tres coeficientes de la ecuación de 2º grado. Tal cual están escritos se deja preparada la plantilla por si se desean usar fracciones. Tened en cuenta que \({\textstyle Rational(n,d)}=\dfrac{n}{d}\)

#coeficientes de la ecuación de 2º grado
#Los preparo como números racionales por si uso fracciones
a=Rational(1,1)
b=Rational(-5,1)
c=Rational(6,1)

A partir de esos datos de entrada podemos resolver todo tipo de problemas con un enunciado similar a:

Ejercicio

Dada la función cuadrática: \(f(x)=x^{2}-5x+6\)

  1. Calcula su vértice.
  2. Indica su dominio y recorrido.
  3. Obtén los puntos de corte con los ejes.
  4. Represéntala.

y obtendríamos:

Solución

  1. \(x_{v}=\dfrac{-b}{2a}=\dfrac{5}{2}=\frac{5}{2}\Rightarrow y_{v}=f\left(\frac{5}{2}\right)=6-5\cdot\frac{5}{2}+\left(\frac{5}{2}\right)^{2}=-\frac{1}{4}\Rightarrow\) es el punto \(\left(\frac{5}{2},-\frac{1}{4}\right)\)

  2. \(a=1\,\) \(>0\) \(\Rightarrow\)  cóncava hacia arriba

    \(Dom(f)=\mathbb{R}\), \(Img(f)=\)\(\left[-\frac{1}{4},+\infty\right[\)

  3. Puntos de corte con los ejes.

    • Eje X: \(x^{2}-5x+6=0\Leftrightarrow x=\frac{-b\pm\sqrt{b^2-4ac}}{2a}=\) \(\frac{-(-5) \pm \sqrt{ (-5)^2-4 \cdot (1) \cdot(6) }} {2 \cdot (1)}\)\(=\dfrac{5\pm\sqrt{1}}{2}=\dfrac{5\pm1}{2}\)   \(=\left\{ \begin{array}{c} 2\\ 3 \end{array}\right.\) corta el eje X en los puntos \(\left(2,0\right)\) y \(\left(3,0\right)\)
    • Eje Y:   \((0,f(0))=\left(0,6\right)\)
  4. Tabla de valores:

    \(x\) \(y=x^{2}-5x+6\)
    -1 12.00
    0 6.00
    1 2.00
    2 0.00
    3 0.00
    4 2.00
    5 6.00

    image

La solución anterior se ha obtenido con los datos del ejemplo.

En las soluciones que se pueden obtener, el valor de la imagen así como el texto para escribir las soluciones, se adecúan de forma dinámica al ir cambiando los coeficientes de la función cuadrática a partir del valor del coeficiente principal y discriminante.

El código python usado es:

\begin{sympycode}
x=symbols('x')
#coeficientes de la ecuación de 2º grado
#Los preparo como números racionales por si uso fracciones
a=Rational(1,1)
b=Rational(-5,1)
c=Rational(6,1)

#ecuación de 2º grado
f=a*x**2+b*x+c

#hallo el vértice
xv=nsimplify(-b/(2*a))
yv=f.subs(x,xv)

#corte con el eje y
pcy=c

#para controlar el tipo de curvatura y que escriba la imagen
if a>0:
    cad='$>0$'
    con=r' cóncava hacia arriba'
    imagen='$\\left['+latex(yv)+',+\infty \\right[$'
else:
    cad='$<0$'
    con=r' cóncava hacia abajo'
    imagen='$\\left]-\infty, '+latex(yv)+'\\right]$'

#discriminante de la ecuación de 2º grado
disc= b**2-4*a*c
rdisc=sqrt(disc)
#para controlar las soluciones de la ecuación y el texto a mostrar en la salida del pdf
if disc==0:
    pcx="$=$"+latex(xv)
    texpc="tiene un solo punto de corte en el punto $\\left("+latex(xv)+", 0 \\right)$"
elif disc > 0:
    #resuelvo la ecuación de 2º grado y la paso a lista
    pcx=list(solveset(f,x))
    texpc='$ = \\left\\{ \\begin{array}{c}'+latex(pcx[0])+'\\\\'+latex(pcx[1])+'\\end{array}\\right.$ corta el eje X en los puntos $ \\left( '+latex(pcx[0])+' ,0 \\right) $ y $ \\left( '+latex(pcx[1])+',0 \\right)$'
else:
    pcx=""
    texpc=" no corta al eje X"

#paso a entero el xv
xvi=int(xv)
#número de números alrededor del vértice para hacer la tabla de valores
val=3
#Función que crea la tabla de valores
def creaTabla(f):
    print(r"\begin{tabular}{|r|r|} \hline")
    print(r"$x$ & $y=%s$ \\ \hline \hline" % (latex(f.expand())))
    for i in range(xvi-val,xvi+val+1):
        print(r'%d & %.2f \\ \hline' % (i,f.subs(x,i)))
    print(r'\end{tabular}')

#REALIZAMOS LA GRÁFICA
#Esta parte no es imprescindible se puede ver qué se obtendría
#eliminando o ajustando a mano (x,xm,xm) e ylim=(ym,yM)
#Para que medio ajuste bien el eje X y el eje Y
#y ponga el centro de los ejes en el (0,0)
#dominio para representar en el eje X [xm,xM]
xm=xv-val-1
xM=xv+val+1
#si con el intervalo [xm,xM] no esta el cero,
#obligo a que el extremo adecuado si lo incluya
if xm>0:
    xm=0
elif xM<0:
    xM=0

#ajusto los valores del eje Y en los que representar la función [ym,YM]
if a>0:
    if yv>=0:
        ym=0
        yM=f.subs(x,xv+val)
    else:
        ym=yv-1
        yM=max(0,f.subs(x,xv+val))
else:
    if yv<0:
        yM=0
        ym=f.subs(x,xv+val)
    else:
        yM=yv+1
        ym=min(0,f.subs(x,xv+val))


#título del gráfico
titulo="$y="+latex(f.expand())+"$"
#dibujamos la parábola y la almacenamos
par=plot((f, (x, xm, xM)), axis_center=(0,0), ylim=(ym,yM), show = False, line_color="red", size=(3,3), title=titulo)
#guardamos el gráfico en formato svg
par.save('parabola.svg')

\end{sympycode}
  • Puedes descargar el fichero fuente en formato LyX en el enlace.
  • El resultado de compilarlo con pdflatex se puede ver desde este enlace.