El objetivo de éste cuaderno es que se realice una pequeña función en la cual se introduzca únicamente la función a optimizar y se realice el proceso en el cual se hallen los puntos críticos y se defina el tipo de éstos (máximos o mínimos).
1. Instalar el paquete sympy.
2. Importar el paquete sympy.
3. Definir la variable.
1. Definir la función que se desea optimizar.
2. Hallar la derivada de la función.
3. Halle los puntos críticos de la función.
4. Calcule la segunda derivad de la función.
5. Evalúe los puntos críticos en la segunda derivada.
6. Determine la naturaleza del punto crítico
Siguiendo los pasos mencionados anteriormente:
!pip install sympy
Requirement already satisfied: sympy in /home/isaac/anaconda3/lib/python3.7/site-packages (1.5.1) Requirement already satisfied: mpmath>=0.19 in /home/isaac/anaconda3/lib/python3.7/site-packages (from sympy) (1.1.0)
from sympy import *
init_printing() #Con este comando se habilita una mejor opción de visualización de los resultados obtenidos
x=symbols("x") #Definimos la variable
Para que el trabajo futuro sea mucho más sencillo aprenderemos a utilizar de mejor manera los ciclos, y para ello es fundamental la creación de listas de elementos.
Cuando se emplea el comando range(a,b) se crea una lista que desde a hasta b -1 avanzando de uno en uno. Si la lista que se desea crear no es de números enteros se le puede dar el tamaño del salto con una tercera entrada, es decir, range(a,b,salto). Todas las entradas deben ser números enteros
lista1=range(1,5)
lista2=range(1,20,2)
Para determinar la cantidad de elementos que tiene una lista existe un comando, len. La forma de utilizarlo es la siguiente: len(cadena)
Ejemplos
len(lista1)
len(lista2)
l=[1,5,10,-8,4]
l
agregar el valor $0$ a la lista
l.append(0)
l
for i in range(len(lista1)-1):
print("En la posición ", i ,"el valor es",lista1[i])
En la posición 0 el valor es 1 En la posición 1 el valor es 2 En la posición 2 el valor es 3
for i in range(len(lista2)-1):
print("En la posición ", i ,"el valor es",lista2[i])
En la posición 0 el valor es 1 En la posición 1 el valor es 3 En la posición 2 el valor es 5 En la posición 3 el valor es 7 En la posición 4 el valor es 9 En la posición 5 el valor es 11 En la posición 6 el valor es 13 En la posición 7 el valor es 15 En la posición 8 el valor es 17
Las funciones resultan ser muy útiles cuando deseamos repetir procesos sobre valores distintos.
La definición de las funciones lleva la siguiente estructura
def nombre_de_la_función(variables,que,se,requieran):
órdenes
return [Expresión]
El nombre de la función debe ser sin espacios y se sugiere no usar nombres de funciones definidas previamente para evitar conflictos.
Las variables deben ser separadas por comas.
Definiremos una función que imprima los números pares menores al número introducido.
def pares(n):#nótese que hay una única variable ya que nuestro argumento
#será únicamente el número en el cual vamos a parar
if int(n)%2==0: #la función int(n) define a la variable n como un número entero.
#La función % es el módulo (residuo de un número al ser dividido entre el otro)
for i in range(0,int(n/2)): #Range crea una lista de números enteros en este caso desde el
#0 hasta la mitad de n
print(i*2)
else: #si no se cumple la condición
for i in range(0,int((n+1)/2)):
print(i*2)
return
pares(5)
0 2 4
pares(6)
0 2 4
Definiremos una función que halle los ceros de una función arbitraria
def ceros(func):
return solve(func)
ceros(x**3-x)
Ahora definiremos una función $f$ que evalúe una función dada en una lista de valores ingresados en una lista $V$.
def derivadaenlista(f,V):
f1=diff(f) #Calcula la derivada de la función
print("La derivada de la función es ", f1) # Muestra la derivada de la función
R=[]
for i in range(len(V)):
R.append(f1.subs(x,V[i]))
return R
v=[1,2,40,8,6]
derivadaenlista(x**4-3*x**2,[0,1,2,3])
La derivada de la función es 4*x**3 - 6*x
El comando solve sirve para resolver ecuaciones las cuales deberán estar igualadas a cero, como por ejemplo $$x^2-4=0$$ mediante el comando
solve(x**2-4,x).
Si se desea solicionar la ecuación $$x^3=x$$ primero debe igualarse a cero y se introduce en el comando la parte que contiene las variables $$x^3-x=0$$ introducimos
solve(x**3-x,x)
Sigue los pasos para realizar el procedimiento descrito al inicio, se dará una función de prueba la cual después será cambiada por una arbitraria.
(ayuda: for i in range(0,len(puntoscriticos)-1):)
def optimizar(f):
df=diff(f,x)
print("La primera derivada es:\n",df)
puntoscriticos=solve(df,x)
l=len(puntoscriticos)
print("Los puntos críticos de la función son:\n",puntoscriticos)
ddf=diff(df,x)
print("La segunda derivada es:\n",ddf)
for i in range(0,len(puntoscriticos)):
if ddf.subs(x,puntoscriticos[i])<0:
print("En x=",puntoscriticos[i],"se alcanza un máximo y f(x)=")
return plot(f,(x,puntoscriticos[0]-2,puntoscriticos[l-1]+2))