velazquezr35 / eigpp

1 stars 0 forks source link

devolver info numérica #18

Closed maurinhocba closed 3 years ago

maurinhocba commented 3 years ago

crear una función que devuelva la evolución temporal de algunos grados de libertad es parecido a plt_ut, pero en vez de devolver objetos que sirven para hacer un gráfico, simplemente devuelve un arreglo de numpy que tiene la info (una fila o columna para el tiempo y el resto de las filas o columnas con los valores que toman los grados de libertad pedidos) es para poder hacer análisis numérico de la respuesta, por ejemplo, aplicarle alguna función interpolante o lo que sea, por si hace falta hacer algo que no esté programado en la librería creo que con que reciba un solo diccionario es suficiente, auqnue también estaría bien si quisieras hacer que la llamada sea igual que para plt_ut y después adentro acomode todo, vos fijate lo ideal sería que se pueda poner tmb como input un vector con dos instantes de tiempo, inicial y final, para que sólo devuelva esa parte de la señal debería poder recibir "vel:True" en kwargs, para devolver velocidades lo mismo se podría hacer para los q

velazquezr35 commented 3 years ago

En el pull req #19 se incorpora una función dte_ut para hacer esto. Recibe como inputs un struCase, un dofDict (similar a los básicos que usamos para el ploteo de forma {'nodo':[DOFs]} y devuelve un array que contiene en filas la evolución deseada. En los kwargs puede contener una list llamada t_pref = [tipo, val_inic, val_final]. Si tipo == index, entonces devuelve para los índices [val_inic, val_final]. Si tipo==vals, entonces busca [val_inic, val_final] como valores de tiempo con search_time y devuelve los índices más cercanos (de manera similar a cuando se plotea). Por último, si no hay nada, el default es devolver el vector completo (tiempo y filas).

Agregué una función análoga dte_qt por si nos sirve para lo mismo, pero para los q. Ahora el listado es simplemente del modo que quiero (en índices normales, no Python).

velazquezr35 commented 3 years ago

Corrección menor respecto al slice de las filas y vector tiempo. Se debe tener en cuenta que si paso un índice [t_in,t_f] el slice en Python para un array 'a': a[t_in:t_f] devuelve desde el correspondiente a t_i (lo incluye) hasta el correspondiente a t_f pero SIN incluirlo. Esto complica un poquito para cuando quiero hacer el plot completo, porque lo intuitivo es indicar a[t_in:t_f+1], pero no hay un valor numérico para dar con el último índice. Por ejemplo, si t_f=-1, toma todo sin incluir el último, no funciona -1 + 1.

La solución es usar 'None'y Python interpretaa[t_i: ] (devuelve el array completo desde t_i (incluyéndolo) hasta el final. Es un detalle menor a tener en cuenta para el uso diario y evitar poner condiciones internas para hacer los +1.

Hasta ahora casi todo está programado así, voy a revisarlo para incluir el uso del None (lo proponen acá); pero es más fácil para la herramienta directamente tener en cuenta que el último índice no se incluye en el slice y listo (es más costumbre que otra cosa)

En el peor de los casos, se puede poner algún if en cada función que se fije si hay un None y lo deje tal cual o que directamente sume el +1 para incluir el índice deseado. Voy a ver esto.

velazquezr35 commented 3 years ago

No me gustó como quedó el tema de los índices para el tiempo y ploteo. Acomodé el planteo de las dos funciones dte_qt, dte_ut para que quede de la siguiente manera (en la reunión podemos verlo y definir la manera de tratar esto de los índices):

velazquezr35 commented 3 years ago

Done