De entre todas las herramientas matemáticas que ofrece SageMath veremos ahora otros ejemplos de especial interés en Física: representación gráfica de funciones, resolución de ecuaciones y sistemas, y cálculo de derivadas e integrales. La idea no es únicamente que veas qué cosas se pueden hacer con Sage y cómo nos puede ayudar a hacer el “trabajo sucio” (no es muy provechoso pasar diez minutos resolviendo una ecuación o representando una gráfica, ¿verdad?), sino que se trata también de que aprendas a programar, que es una habilidad absolutamente fundamental en el trabajo científico. En consecuencia, para sacar el máximo provecho de estos ejemplos debes proceder de la siguiente manera:
Evaluar y observa cómo cambia el resultado. ¿Funcionan las cosas como esperabas? Es muy interesante que pruebes con datos “especiales” o datos que creas que pueden dar resultados “raros”.
Vamos allá con los ejemplos.
Gráfica de la función racional en el intervalo . Se excluyen de la representación gráfica los valores de que anulan el denominador. Los valores de la ordenada se restringen al intervalo .
xxxxxxxxxx# f(x)=P(x)/Q(x)P(x) = 1Q(x) = x^2-1# Gráfica de la funciónf = plot(P(x)/Q(x), exclude=(Q(x)==0), xmin=-3, xmax=3, ymin=-6, ymax=6)# Salida por pantallashow(f)Representación de las gráficas de y , . Se añade una leyenda para identificar cada gráfica. En el eje se marcan los valores , , , y , y en el eje , y .
xxxxxxxxxx# Gráficasf = plot(sin(x), xmin=-2*pi, xmax=2*pi, color='olive', legend_label='sen(x)')g = plot(cos(x), xmin=-2*pi, xmax=2*pi, color='orange', legend_label='cos(x)')# Salida por pantallashow(f + g, tick_formatter=pi, ticks=[[-2*pi, -pi, 0, pi, 2*pi], [-1, 0, 1]], fontsize=16)Gráfica de la función , , con sus asíntotas. Se rotulan los ejes. En el eje se marcan los valores cada unidades, y en el eje cada .
xxxxxxxxxx# Gráficaf = plot(tan(x), xmin=-3*pi, xmax=3*pi, detect_poles='show', ymin=-10, ymax=10)# Salida por pantallashow(f, axes_labels=['x','y=tan(x)'], axes_labels_size=1, tick_formatter=pi, ticks=[pi/2, 5])Función definida a trozos: .
xxxxxxxxxx# Intervalos: (-oo,a], (a,b) y [b,+oo)a = -1b = 2# Función en (-oo,a]f1 = x + 3# Función en (a,b)f2 = x^2 - 2*x + 2# Función en [b,+oo)f3 = 6/(x+1)# Funciónf = piecewise([((-oo,a), f1), ((a,b), f2), ((b,+oo), f3)])# Gráfica de la funcióngrafica = plot(f, exclude=[a,b], xmin=-4, xmax=4, plot_points=500)# PuntosA = point((a, f1(a)))B = point((b, f3(b)))# Salida por pantallashow(grafica + A + B)Área del recinto limitado por la curva , las rectas y , y el eje .
xxxxxxxxxx# Funciónf = 9 - x^2# Rectas x=a y x=ba = -2b = 4# Áreaarea = plot(f, xmin=a, xmax=b, fill='axis')# Salida por pantallashow(area)Lemniscata de Bernouilli, definida por la función implícita . La variable toma valores en el intervalo y la en el intervalo . Para mejorar la resolución, se aumenta a 500 el número de puntos empleados en la representación gráfica de la función.
xxxxxxxxxxvar('x y')implicit_plot((x^2 + y^2)^2 == 3*(x^2 - y^2), (x, -2, 2), (y, -1, 1), plot_points=500)Elipse de semieje mayor y semieje menor con centro en el origen de coordenadas de ecuaciones paramétricas: con .
xxxxxxxxxxvar('t')parametric_plot((5*cos(t), 3*sin(t)), (t,0,2*pi), aspect_ratio=1, ticks=[1,1])Espiral de Arquímedes, cuya ecuación en coordenadas polares es , representada para .
xxxxxxxxxxvar('zeta')polar_plot(2*zeta, (zeta, 0, 10*pi), plot_points=1000)
Hiperboloide de una hoja definido por la ecuación .
xxxxxxxxxxvar('x y z')implicit_plot3d(x^2 + y^2 - z^2 == 1, (x,-3,3), (y,-3,3), (z,-2,2))Ecuación . Se debe indicar la variable que se quiere despejar.
xxxxxxxxxxsolve(x/7 - (2 - 4*x)/3 == (-5*x - 4)/14 + 7*x/6, x)Resolución simbólica de la ecuación de tercer grado .
xxxxxxxxxxvar('a b c')ecuacion = x^3 + a*x^2 + b*x + c == 0solucion = solve(ecuacion, x)show(solucion)Sistema de ecuaciones
xxxxxxxxxxvar('x y')solve([2*x + 3*y == -1, 3*x + 4*y == 0], x, y)Sistema de ecuaciones . Almacenamos las ecuaciones en sendas variables. El sistema tiene dos soluciones, y accedemos a ellas individualmente para mostrarlas por separado.
xxxxxxxxxxvar('x y')# Ecuacionesecuacion1 = x^2 + y^2 == 2ecuacion2 = 2*x + 2*y == 3# Resolución del sistemasolucion = solve([ecuacion1, ecuacion2], x, y)# Salida por pantallashow("Solución 1:", solucion[0])show("Solución 2:", solucion[1])Sistema de tres ecuaciones .
xxxxxxxxxxvar('x y z')ecuacion1 = 9*x + 3*y + z == 32ecuacion2 = 4*x + 2*y + z == 15ecuacion3 = x + y + z == 6solve([ecuacion1, ecuacion2, ecuacion3], x, y, z)Resolución numérica de la ecuación . Primero representamos la función para ver aproximadamente dónde están los ceros del polinomio.
xxxxxxxxxxplot(x^5 + x^4 + x^3 - x^2 + x + 1)A la vista de la gráfica, buscamos la solución en el intervalo .
xxxxxxxxxxfind_root(x^5 + x^4 + x^3 - x^2 + x + 1, -1, 0)Resolución numérica de la ecuación . Se busca la solución en un intervalo lo suficientemente amplio, por ejemplo el intervalo .
xxxxxxxxxxfind_root(x^6 - 5*x^4 - 3*x^2 + 5*x - 12, -10^22, 10^22)Derivada primera, segunda y tercera de la función potencial .
xxxxxxxxxxvar ('a n')f(x) = a*x^nshow("Función:")show(f(x))show("Derivada primera:")show(derivative(f(x), x))show("Derivada segunda:")show(derivative(f(x), x, 2))show("Derivada tercera:")show(derivative(f(x), x, 3))Cálculo de la derivada de la función en el punto .
xxxxxxxxxx# Funciónf(x)=x^2+1# Puntox0 = 1# Función derivadafprima(x) = derivative(f,x)# Derivada de la función en el punto x0print("f'(x0) =", fprima(x0))Derivadas parciales de .
xxxxxxxxxxvar ('x y')# Funciónf=x^3+2*x*y-y^2# Derivada parcial con respecto a xshow("Derivada con respecto a x:")show(derivative(f(x), x))# Derivada parcial con respecto a yshow("Derivada con respecto a y:")show(derivative(f(x), y))Primitiva de la función e integral definida entre y .
xxxxxxxxxx# Funciónf(x) = x*sin(x^2)# Primitivaintegral = integrate(f(x), x)# Integral definida entre 0 y 1integral_def = integrate(f(x), x, 0, 1)# Salida por pantallashow("Función:", f(x))show("Una primitiva:", integral) show("La integral definida entre 0 y 1:", n(integral_def))Como dijimos antes, esto no es más que la punta del iceberg de todo lo que SageMath ofrece. Si te ha parecido útil dedícale tiempo a practicar y recuerda, sobre todo si tu intención es dedicarte a una carrera científica en el futuro, que programar es una habilidad fundamental en el trabajo científico.