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) = 1
Q(x) = x^2-1
# Gráfica de la función
f = plot(P(x)/Q(x), exclude=(Q(x)==0), xmin=-3, xmax=3, ymin=-6, ymax=6)
# Salida por pantalla
show(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áficas
f = 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 pantalla
show(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áfica
f = plot(tan(x), xmin=-3*pi, xmax=3*pi, detect_poles='show', ymin=-10, ymax=10)
# Salida por pantalla
show(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 = -1
b = 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ón
f = piecewise([((-oo,a), f1), ((a,b), f2), ((b,+oo), f3)])
# Gráfica de la función
grafica = plot(f, exclude=[a,b], xmin=-4, xmax=4, plot_points=500)
# Puntos
A = point((a, f1(a)))
B = point((b, f3(b)))
# Salida por pantalla
show(grafica + A + B)
Área del recinto limitado por la curva , las rectas y , y el eje .
xxxxxxxxxx
# Función
f = 9 - x^2
# Rectas x=a y x=b
a = -2
b = 4
# Área
area = plot(f, xmin=a, xmax=b, fill='axis')
# Salida por pantalla
show(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.
xxxxxxxxxx
var('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 .
xxxxxxxxxx
var('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 .
xxxxxxxxxx
var('zeta')
polar_plot(2*zeta, (zeta, 0, 10*pi), plot_points=1000)
Hiperboloide de una hoja definido por la ecuación .
xxxxxxxxxx
var('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.
xxxxxxxxxx
solve(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 .
xxxxxxxxxx
var('a b c')
ecuacion = x^3 + a*x^2 + b*x + c == 0
solucion = solve(ecuacion, x)
show(solucion)
Sistema de ecuaciones
xxxxxxxxxx
var('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.
xxxxxxxxxx
var('x y')
# Ecuaciones
ecuacion1 = x^2 + y^2 == 2
ecuacion2 = 2*x + 2*y == 3
# Resolución del sistema
solucion = solve([ecuacion1, ecuacion2], x, y)
# Salida por pantalla
show("Solución 1:", solucion[0])
show("Solución 2:", solucion[1])
Sistema de tres ecuaciones .
xxxxxxxxxx
var('x y z')
ecuacion1 = 9*x + 3*y + z == 32
ecuacion2 = 4*x + 2*y + z == 15
ecuacion3 = x + y + z == 6
solve([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.
xxxxxxxxxx
plot(x^5 + x^4 + x^3 - x^2 + x + 1)
A la vista de la gráfica, buscamos la solución en el intervalo .
xxxxxxxxxx
find_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 .
xxxxxxxxxx
find_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 .
xxxxxxxxxx
var ('a n')
f(x) = a*x^n
show("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ón
f(x)=x^2+1
# Punto
x0 = 1
# Función derivada
fprima(x) = derivative(f,x)
# Derivada de la función en el punto x0
print("f'(x0) =", fprima(x0))
Derivadas parciales de .
xxxxxxxxxx
var ('x y')
# Función
f=x^3+2*x*y-y^2
# Derivada parcial con respecto a x
show("Derivada con respecto a x:")
show(derivative(f(x), x))
# Derivada parcial con respecto a y
show("Derivada con respecto a y:")
show(derivative(f(x), y))
Primitiva de la función e integral definida entre y .
xxxxxxxxxx
# Función
f(x) = x*sin(x^2)
# Primitiva
integral = integrate(f(x), x)
# Integral definida entre 0 y 1
integral_def = integrate(f(x), x, 0, 1)
# Salida por pantalla
show("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.