Obligatorio 1 opción 2 y resumen de clases

Obligatorio 1 opción 2 y resumen de clases

de Claudio Qureshi -
Número de respuestas: 1

Buenas tardes.

En la penúltima parte del Obligatorio 1 opción 2 (el ejercicio de formas cuadráticas) por error les pedí que listen todos los pares (x,lambda) que verifiquen la condición de optimalidad pero en realidad solo deben listar los respectivos valores de lambda (que son finitos, pues resultan valores propios de cierta matriz). Les pido por favor que abran nuevamente el notebook a través del link Colab que les dejé en el eva para tener la versión corregida (solo para quienes hayan optado por esa opción de obligatorio).

Algunos comandos útiles para esta opción se encuentran en: https://numpy.org/doc/stable/reference/generated/numpy.linalg.eig.html#numpy.linalg.eig

Obs. Como al comienzo del notebook hemos usando importado el módulo numpy.linalg como la entonces para hallar los autovalores de una matriz cuadrada M deberíamos usar el comando la.eig(M)  (por ejemplo, si ponen autoval, autovec = la.eig(M) entonces los autovalores serán guardados en autoval mientras que sus respectivos autovectores serán guardados en autovec).

Aprovecho para dejarles en adjunto un resumen de las dos primeras clases. Para quienes estén cursando en forma virtual les recomiendo talvez elegir la opción 1 (para el cual alcanza con lo visto en el video 1 del 2023). Para quienes les guste los desafíos les dejo la opción 2 (es un poquito más difícil que la opción 1 pero no mucho, con lo que vimos en las dos primeras clases deberían poder hacerlo sin problemas).

Saludos,
Claudio





En respuesta a Claudio Qureshi

Re: Obligatorio 1 opción 2 y resumen de clases

de Claudio Qureshi -
Buenas tardes.

Un par de comentarios más del Obligatorio 1 opción 2:

  1. Donde dice lambda tienen que renombrarlo como lambda_  para que no les de mensaje de error (el problema es que Python ya tiene reservada la palabra lambda y no se puede usar para definir nuevos parámetros).
  2. grad_numerico al igual que gradL dependen de dos parámetros (x, lambda_) (me faltó agregar el lambda_ en la definición de grad_numerico).
  3. Tanto grad_numerico como gradL devuelven una dupla (** ,-g(x)), solo ** es un array con n coordenadas (que son diferentes para grad_numerico y gradL, aunque deberían estar muy próximas, la segunda coordenada es un escalar y es el mismo para ambos).  Faltó definir un escalar random lambdar = rnd.rand() y para chequear que el gradiente de L y la aproximación numérica están próximos, las evaluamos en un par random (xr,lambdar) y comprobamos que la norma de la diferencia es pequeña. Pero como la segundas coordenadas son iguales basta con comparar las primeras n coordenadas gradL(xr,lambdar)[0] y grad_numerico(xr,lambdar)[0]

Ya hice todas las modificaciones pertinentes en la notebook de Colab correspondiente: "Obligatorio 1 - 2024 - Opcion 2"

Recuerden que para hallar los valores y vectores propios pueden chequear el manual: Linear Algebra (numpy.linalg)

Saludos,
Claudio.