[pyar] algun matematico por estos lados??
Fidel Sanchez-Bueno
fidellira.6 en gmail.com
Sab Ago 21 22:45:59 ART 2010
El 21/08/2010 12:17 p.m., Pablo Alejandro Costesich escribió:
> 2010/8/21 Fidel Sanchez-Bueno<fidellira.6 en gmail.com>:
>> es decir calcular un minimo, un maximo y un valor del medio, comparar con mi
>> setpoint y luego repetir el proceso..
>>
>> Yo se que la busqueda binaria es bastante efectiva para disminuir el numero
>> de iteraciones, el problema es que los datos no son lineales (en la imagen
>> ven los datos y la grafica resultante [1])
>>
>> me imagino que debe haber alguna manera de mejorar la busqueda binaria con
>> valores no lineales tratando de predecir mejor el "valor del medio"..
>>
>> [1] http://dl.dropbox.com/u/391810/imagen.PNG
>>
> A riesgo de ser incinerado por los matemáticos, ingenieros y
> científicos de la lista, respondo:
>
> ¿Los valores siempre van a tomar una curva similar? Porque eso parece
> una función del estilo f(x) = a/x + b. Si vas a los x's más chicos, tu
> pivote va a estar más a la izquierda del segmento de búsqueda. En
> valores de x's más grandes, va a estar cada vez más cerca del medio.
>
> ¿Si probás con un pivote que fraccione con p(x_1, x_2) =
> (2*x_1*x_2)/(x_1 + x_2)? Luego es cuestión de comparar los resultados
> para ver si se encuentran dentro del rango [x_1, pivote), [pivote,
> pivote] o (pivote, x_2].
>
> La función p la saqué buscando el promedio de y_1 con y_2 y buscando
> el x que le corresponde. Tomo f(x) = 1/x, que vos tendrías que
> ajustar, pero creo que anda mejor que tomar x como el promedio clásico
> (no lo probé).
> _______________________________________________
> pyar mailing list pyar en python.org.ar
> http://listas.python.org.ar/listinfo/pyar
>
> PyAr - Python Argentina - Sitio web: http://www.python.org.ar/
>
Muchas gracias esa es la respuesta que andaba buscando =) (bueno no la
he probado todavia pero almenos es una guia)
antes que nada disculpen por no explicar bien mi pregunta, no soy bueno
para plantear preguntas matematicas, generalmente enredo mas a la gente
a quien le pregunto y yo me quedo con la duda xD
para los que me recomendaron scipy, metodos de montecarlo y
newton-raphson igualmente muchas gracias pero el problema es mas
sencillo de lo que les he planteado..
voy a tratar de explicar mejor el problema (espero no enredarlos mas)....
estoy desarrollando un programa para diseñar sistemas de tuberias
(calcular el diametro minimo de operacion de la linea, calcular las
perdidas por friccion, caida de presion, etc)..
Para resumir un poco, debido a la naturaleza de las ecuaciones que
riguen los "fenomenos" que ocurren al transportar fluidos por tuberias,
el procedimiento para calcular el diametro minimo de operacion es
netamente iterativo. el procedimiento es asi:
* Se tiene caida de presion de la linea
* Se asume un diametro
* se calcula la caida de presion con el diametro asumido
* Se compara la caida de presion calculada con el diametro asumido,
con la caida de presion de la linea en caso de que no sean igual
se realiza otra iteracion con otro diametro
el problema para mi es que cada "iteracion" conlleva varios calculos, y
llamadas a una base de datos, y es ideal mantener el numero de
iteraciones a un minimo para mejorar el performance del programa..
El otro problema es que como se dan cuenta, la relacion entre "Caida de
presion (Y) - Diametro de la tuberia (X)" no es lineal [1] (es inverso y
en el eje de las Y tiende a infinito (fijense que la grafica es
logaritmica en el eje de las Y))
Este comportamiento es debido a varios factores como la densidad del
fluido, la viscosidad, el regimen del fluido (laminar, turbulento)..
pero para un mismo sistema (en el caso de la grafica es un sistema de 3
tuberias y 2 codos de 90 grados) como no varia la densidad, ni la
viscosidad, la curva que se genera es debido a que el fluido pasa de
estar en regimen laminar, y entra a regimen turbulento disparando hacia
arriba las perdidas o caida de presion..
Si no se han aburrido (disculpen por lo largo) lo que me interesa es
hacer que la busqueda binaria sea mas "inteligente" al asumir el valor
del medio (con simplemente hacer "(Xmax+Xmin)/2" me genera mas
iteraciones de las que deberia porque no es una linea recta..
Voy a probar usando "(2*Xmax*Xmin)/(Xmax+Xmin)" a ver que tal..
muchas gracias a todos y disculpen por lo largo de la respuesta..
[1] http://dl.dropbox.com/u/391810/imagen.PNG
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.python.org.ar/pipermail/pyar/attachments/20100821/cb59a2a0/attachment.html>
More information about the pyar
mailing list