El Poder de Sympy
December 19, 2022 | Author: Anonymous | Category: N/A
Short Description
Download El Poder de Sympy...
Description
EL PODER DE SYMPY SymPy es un poderoso y fantástico sistema de álgebra computarizada (CAS) para Python que usa el cálculo simbólico exacto en lugar del cálculo aproximado usando decimales. Es útil para aquellas situaciones en las que usaría "lápiz y papel" para resolver problemas de matemáticas y cálculo, con el beneficio de usar la sintaxis familiar de Python. En lugar de repres rep resent entar ar la raíz raíz cuadrad cuadrada a de 2 aproxi aproximan mando do 1,41421 1,414213562 35623730 3730951 951,, la conser conservar vará á exactamente como s qrt (2). Entonces, ¿por qué no usar SymPy para todo lo relacionado con las matemáticas? Si bien b ien lo usaremos a lo largo de este libro, es importante seguir sintiéndose cómodo haciendo matemáticas de Python con decimales simples, ya que scikit-learn y otras bibliotecas de ciencia de datos adoptan este enfoque. Es mucho más rápido para las computadoras usar decimales en lugar de símbolos. SymPy también tiene problemas cuando las expresiones matemát mat emática icass comien comienzan zan a hacers hacersee demasi demasiado ado grandes grandes.. Per Pero o manten mantenga ga SymPy SymPy en su bols bolsil illo lo tras traser ero o co como mo su ve vent ntaj aja, a, y no se lo cu cuen ente te a sus sus hi hijo joss de se secu cund ndar aria ia y universitarios. Literalmente pueden usarlo para hacer su tarea de matemáticas.
Derivados Volvamos Volva mos a habla hablarr de funcio funcione nes s y mirémo mirémosla slas s de desd sde e un una a pe persp rspec ectiv tiva a de cálcu cálculo, lo, comenzando con las derivadas. Una derivada indica la pendiente de una función y es útil para medir la tasa de cambio en cualquier punto de una función. ¿Por qué nos preocupamos por los derivados? A menudo se utilizan en el aprendizaje automático y otros algoritmos matemáticos, especialmente con descenso de gradiente. Cuando la pendiente es 0, eso significa que estamos en el mínimo o máximo de una variable de salida. Este concepto será útil más adelante cuando hagamos regresión lineal 5 ), ), regresión logística logística ( Capítulo 6 ) 6 ) y redes neuronales ( Capítulo 7 7 ). ). ( Capítulo 5 Comencemos con un ejemplo simple. Echemos un vistazo a la función en la Figura 1-6 1-6.. ¿Qué tan “empinada” es la curva en x = 2 ? Observe que podemos medir la "inclinación" en cualquier punto de la curva, y podemos visualizar esto con una línea tangente. Piense en una línea tangente como una línea recta que "apenas toca" la curva en un punto dado. También proporciona la pendiente en un punto dado. Puede estimar crudamente una línea tangente en un valor x dado al crear una línea que interseque ese valor x y un valor x vecino muy cercano en la función. Tome x = 2 y un valor cercano x = 2.1, que cuando se pasa a la función f(x) = x2 producirá 1-7.. La recta resultante que pasa f (2)estos = 4 ydos f (2.1) = 4.41 como muestradeen la Figura 1-7 por puntos tiene una se pendiente 4,1.
Figura 1-6. Observando la pendiente en una parte dada de la función
Figura 1-7. Una forma tosca de calcular la pendiente. Puede calcular rápidamente rápidamente la pendien pendiente te de elevación sobre carrera:
m entre dos puntos usando la fórmula fórmula simple
m = 41 Si hiciera el paso x entre los dos puntos aún más pequeño, como x = 2 y x = 2,00001, lo que daría como resultado f (2) = 4 y f (2,00001) = 4,00004, eso se acercaría mucho a la pend pendien iente te real real de 4. Enton Entonces ces,, cu cuan anto to menor menor se sea a el pa paso so al valor valor vecin vecino, o, más más no nos s acerca ace rcare remos mos al va valor lor de la pend pendien iente te en un punto punto dado de la curva curva.. Como Como tanto tantos s concepto conc eptos s importan importantes tes en matemáti matemáticas, cas, encontr encontramos amos algo significa significativo tivo cuando cuando nos acercamos a valores infinitamente grandes o infinitamente pequeños. 1-17 muestra muestra una calculadora derivada implementada en Python. El ejemplo 1-17 Ejemplo 1-17. Una calculadora de derivadas en Python def derivative_x derivative_x((f , x, step_size step_size): ): m = (f (x + step_size step_size)) - f (x)) / (( ((x x + step_size step_size)) - x) return m def my_function my_function((x): **2 2 return x** slope_at_2 = derivative_x derivative_x((my_function, my_function, 2, .00001 00001)) print(slope_at_2 slope_at_2)) # prints 4.000010000000827 Ahora, la buena noticia es que hay una forma más limpia de calcular la pendiente pendiente en cualquier parte de una función. Ya hemos estado usando SymPy para trazar gráficos, pero le mostraré cómo también puede realizar tareas como derivadas utilizando la magia de la computación simbólica. 2
Cuando encuentre encuen función exponencial f(x)=en x ,1,ladejándonos función derivada hará que el exponente sea tre un una multiplicador y luego locomo reducirá con la derivada
. El indi indica ca una una der deriv ivad ada a con con resp respec ecto to a x, lo lo que que dice dice que que est estam amos os construyendo construye ndo una derivada apuntando al valor de x para obtener su pendiente. pendiente. Entonces, si queremos encontrar la pendiente pendiente en x = 2, y tenemos la función derivada, derivada, simplemente reemplazamos ese valor de x para obtener la pendiente: f(x) = x2
Si tie tiene ne la inten intenció ción n de apren aprende derr estas estas reglas reglas pa para ra calcul calcular ar de deriv rivad adas as a mano mano,, ha hay y muchos libros de cálculo para eso. Pero hay algunas buenas herramientas para calcular derivadas simbólicamente para ti. La biblioteca de Python SymPy es gratuita y de código abierto, y se adapta muy bien al uso de la sintaxis de Python. El ejemplo 1-18 1-18 muestra muestra cómo calcular la derivada de f(x) = x2 en SymPy. Ejemplo 1-18. Cálculo de una derivada en SymPy from sympy import *
# Declare 'x' to SymPy x = symbols symbols(('x' 'x')) # Now just use Python syntax to declare function f = x** **2 2 # Calculate the derivative of the function dx_f = di (f ) print(dx_f ) # prints 2*x¡ Guau! Entonces, Entonces, al declarar variables usando la función de símbolos () en SymPy, puedo proceder a usar la sintaxis normal de Python para declarar mi función. Después de eso, puedo pue do usar diff() para calcula calcularr la función función derivada. derivada. En el ejemplo 1-19, 1-19, podemos llevar nuestra función derivada de vuelta a Python simple y simplemente declararla como otra función. Ejemplo 1-19. Una calculadora de derivadas en Python def f (x): return x** **2 2 def dx_f (x): return 2*x slope_at_2 = dx_f (2.0) 2.0) print(slope_at_2 slope_at_2)) # prints 4.0 Si quieres seguir usando SymPy, puede llamar a la función subs() para intercambiar la variable x con el valor 2 como se muestra en el ejemplo 1-20. 1-20. Ejemplo 1-20. Uso de la función de sustitución en SymPy
# Calculate the slope at x = 2 subs((x,2)) # prints 4 print(dx_f .subs
Derivadas parciales Otro conce Otro concepto pto que que encon encontra trarem remos os en este este libro libro es el de de deriv rivad adas as pa parci rciale ales, s, qu que e usaremos en los capítulos 5, 6 y 7. Estas son derivadas de funciones que tienen múltiples variables de entrada.
Pién Piénsa salo lo de es esta ta mane manera ra.. En lu luga garr de enco encont ntra rarr la pe pend ndie ient nte e en un una a fu func nció ión n unidi unidime mensi nsion onal, al, tene tenemos mos pend pendie iente ntes s con respe respecto cto a múltip múltiple les s va varia riable bles s en va varia rias s direccio dire cciones nes.. Para cada derivad derivada a variable variable dada, asumimos asumimos que las otras otras variable variables s se 1-8 y y verá que mantienen constantes. Mire el gráfico 3D de f( x, y) = 2x 3 + 3y3 en la figura 1-8 tenemos pendientes en dos direcciones para dos variables. Tomemos la función función f(x, y)= 2x 2x3 + 3y3 . Las variables x e y obtienen cada una sus propias derivadas
. Estos representan representan los valores de pendiente pendiente con respecto a cada
variable en una superficie multidimensional. Técnicamente llamamos a estos gradientes de "pendientes" "pendientes" cuando se trata de múltiples dimensiones. dimensiones. Estas son las derivadas de x e y, seguidas del código SymPy para calcular esas derivadas.:
El ejemplo 1-21 y la figura 1-8 1-8 muestran muestran cómo calculamos las derivadas parciales para x e 1-21 y la y, respectivamente, con SymPy. Ejemplo 1-21. Cálculo de derivadas parciales con SymPy from sympy import * from sympy.plotting import plot3d
# Declare x and y to SymPy x,y = symbols( symbols('x y') y') # Now just use Python syntax to declare function f = 2*x** **3 3 + 3*y** **3 3 # Calculate the partial derivatives for x and y dx_f = di (f , x) dy_f = di (f , y) print(dx_f ) # prints 6*x**2 print(dy_f ) # prints 9*y**2 # plot the function plot3d(f)
Figura 1-8. Trazar una función exponencial tridimensional
Así que para ( x, y ) valores (1,2), la pendiente con respecto a x es pendiente con respecto a y es 9 (2) 2= 36 .
6(1) =6
y la
USO DE LÍMITES PARA CALCULAR DERIVADAS ¿Quiere ver dónde entran en juego los límites al calcular derivadas? Si te sientes bien con lo que que hemos hemos apren aprendid dido o hasta hasta ahora ahora,, ¡conti ¡continú núa! a! Si tod todav avía ía es está tá digiri digirien endo do,, tal ve vez z considere volver a esta barra lateral más tarde. SymPy nos permite hacer algunas exploraciones interesantes sobre matemáticas. Tome nuestra función f (x ) = x 2; aproximamos una pendiente para x = 2 dibujando una línea a través de un punto vecino vecino cercano cercano x = 2.0001 agregando agregando un paso 0.0001. 0.0001. ¿Por ¿Por qué no usar un límite para disminuir para siempre ese paso s y ver a qué pendiente se acerca?
En nuestro nuestro ejemplo, ejemplo, estamos estamos interesa interesados dos en la pen pendien diente te dond donde e
x = 2
, así así que
sustituyamos eso:
Al acercarnos acercarnos siempre a un tamaño tamaño de paso s a 0 pero nunca a alcanzarlo lcanzarlo (recuerde (recuerde que el punto pun to vecin vecino o no puede puede toca tocarr el punto punto en en x = 2 , de lo contr contrario ario no tenem tenemos os línea línea), ), podemos usar un límite para ver que convergemos en una pendiente de 4 como se muestra en el ejemplo 1-22. 1-22. Ejemplo 1-22. Uso de límites para calcular una pendiente from sympy import * # "x" and step size "s" x, s = symbols symbols(('x s' s')) # declare funcon
f = x** **2 2 # slope between two points with gap "s"
# substute into rise-over-run formula slope_f = (f .subs subs((x, x + s) - f ) / (( ((x x+s) - x) # substute 2 for x slope_2 = slope_f .subs subs((x, 2) # calculate slope at x = 2 # innitely approach step size _s_ to 0 result = limit limit((slope_2, slope_2, s, 0) print(result result)) # 4
Ahora, ¿qué pasa si no asignamos asignamos un valor específico específico a x y lo dejamos en paz? ¿Qué sucede suce de si disminui disminuimos mos nuestro tamaño tamaño de paso s infinita infinitamen mente te hacia hacia 0? Veamos Veamos el 1-23. ejemplo 1-23. Ejemplo 1-23. Uso de límites para calcular una derivada from sympy import * # "x" and step size "s" x, s = symbols symbols(('x s' s')) # declare funcon f = x** **2 2 # slope between two points with gap "s" # substute into rise-over-run formula slope_f = (f .subs subs((x, x + s) - f ) / (( ((x x+s) - x) # calculate derivave funcon # innitely approach step size +s+ to 0 result = limit limit((slope_f , s, 0) result)) # 2x print(result
Eso nos dio nuestra función derivada 2x. SymPy fue lo suficientemente inteligente como para darse cuenta de que nunca dejaría que nuestro tamaño de paso llegara a 0 sino que siempre se acercara a 0. Esto converge converge f( x ) = x 2 para llegar a su contraparte contraparte derivada 2x.
View more...
Comments