Resolver ecuación con excel (Valoración de 5.00 sobre 5, resultante de 1 votos)

Aplicaciones y herramientas informáticas, internet y otros sucedáneos informáticos
Avatar de Usuario
por
#211840
Hola.

Perdón por el retraso en responder, he estado un poco liado.

Dejo una excel con las fórmulas y algunas notas.

A mí este método es el que más me gusta, en parte porque es el único que he usado, y en parte porque sí. :D

Si teneis dudas después de ver la excel, pedid y se os dará, como dijo aquél.
Regístrese y/o inicie sesión para ver archivos adjuntos.
Avatar de Usuario
por
#211866
Muchísimas gracias, me parece muy interesante tu forma de resolverlo.
Te debo unas :brindis
:saludo
Avatar de Usuario
por
#212922
wenner escribió:
osca escribió:Y para hacer algo parecido con la ecuación Colebrooks-white??


Y con una UDF muy sencilla:

Código: Seleccionar todoFunction Friccion(Reynolds, Rugosidad, Diametro)
    '___Funcion personalizada para calcular el factor de fricción
    '___con la fómula de Colebrok-White
    '___Rugosidad en metros
    '___Diámetro en milímetros
    Dim n As Double 'Contador bucle
    Dim PrimerTermino
    Dim SegundoTermino
    Const Precision = 0.001
    On Error Resume Next
    For n = 0.0001 To 0.5 Step 0.00001
        PrimerTermino = 1 / Sqr(n)
        SegundoTermino = -2 * (WorksheetFunction.Log(Rugosidad / (Diametro / 1000) / 3.7 + 2.51 / (Reynolds * Sqr(n))))
        If Abs((PrimerTermino - SegundoTermino)) < Precision Then
            Friccion = n
            Exit Function
        End If
    Next
    On Error GoTo 0
End Function


Otro método para resolver la ecuación, creo que este bucle es más eficiente:

Código: Seleccionar todoFunction Friccion(Reynolds, Rugosidad_m, Diametro_mm)
    '___Funcion personalizada para calcular el factor de fricción
    '___con la fómula de Colebrok-White
    '___Rugosidad en metros
    '___Diámetro en milímetros
   
    Dim n As Double             'Contador bucle
    Dim Funcion() As Double     'Fórmula Colebrok-White, tipo (fx)=0
    Dim x() As Double           'Matriz de valores de fricción
    Const Precision = 0.0001
    Dim Comprobacion As Boolean
   
    ReDim x(0 To 1) As Double
'___Aproximación valor inicial fricción
    x(0) = 0.02
'___Aproximación segundo valor fricción
    x(1) = 0.015
   
    ReDim Preserve Funcion(0 To 0) As Double
    Funcion(0) = 1 / Sqr(x(0)) + 2 * (WorksheetFunction.Log(Rugosidad_m / (Diametro_mm / 1000) / 3.7 + 2.51 / (Reynolds * Sqr(x(0)))))
   
    n = 1
    Comprobacion = False
    Do While Comprobacion = False
        ReDim Preserve Funcion(0 To n) As Double
        Funcion(n) = 1 / Sqr(x(n)) + 2 * (WorksheetFunction.Log(Rugosidad_m / (Diametro_mm / 1000) / 3.7 + 2.51 / (Reynolds * Sqr(x(n)))))
        ReDim Preserve x(0 To n + 1) As Double
        x(n + 1) = x(n) - (x(n) - x(n - 1)) * Funcion(n) / (Funcion(n) - Funcion(n - 1))
        If Abs(x(n + 1) - x(n)) < Precision Then
            Friccion = x(n + 1)
            Comprobacion = True
        End If
        n = n + 1
    Loop
End Function


Otro método:
Código: Seleccionar todoFunction Friccion_M3(Reynolds, Rugosidad_m, Diametro_mm)
    '___Funcion personalizada para calcular el factor de fricción
    '___con la fómula de Colebrok-White
    '___Rugosidad en metros
    '___Diámetro en milímetros
    '___Método Newton-Raphson
   
    Dim n As Double                 'Contador bucle
    Dim Funcion() As Double         'Fórmula Colebrok-White, tipo (fx)=0
    Dim FuncionDerivada() As Double 'Derivada fórmula Colebrok-White
    Dim x() As Double               'Matriz de valores de fricción
    Const Precision = 0.0001
    Dim Comprobacion As Boolean
   
    ReDim x(0 To 0) As Double
'___Aproximación valor inicial fricción
    x(0) = 0.02
   
    n = 0
    Comprobacion = False
    Do While Comprobacion = False
        ReDim Preserve Funcion(0 To n) As Double
        Funcion(n) = 1 / Sqr(x(n)) + 2 * (WorksheetFunction.log(Rugosidad_m / (Diametro_mm / 1000) / 3.7 + 2.51 / (Reynolds * Sqr(x(n)))))
       
        ReDim Preserve FuncionDerivada(0 To n) As Double
        FuncionDerivada(n) = (-1 / 2) * (x(n)) ^ (-3 / 2) + 2 * (2.51 / Reynolds * (-1 / 2) * (x(n)) ^ (-3 / 2)) _
        / (Rugosidad_m / (Diametro_mm / 1000) / 3.7 + 2.51 / (Reynolds * Sqr(x(n)))) / (WorksheetFunction.Ln(10))

        ReDim Preserve x(0 To n + 1) As Double
        x(n + 1) = x(n) - Funcion(n) / FuncionDerivada(n)
       
        If Abs(x(n + 1) - x(n)) < Precision Then
            Friccion_M3 = x(n + 1)
            Comprobacion = True
        Else
            x(n) = x(n + 1)
        End If
    Loop
End Function
por
#234370
Wenner, y si quisiera que la función aparte de hayarme la fricción me hayase la perdida de carga? Tendría que hacer otra función con la expresión de Darcy-Weisbach y que llamase a esta otra función?
Avatar de Usuario
por
#234377
osca escribió:Wenner, y si quisiera que la función aparte de hayarme la fricción me hayase la perdida de carga? Tendría que hacer otra función con la expresión de Darcy-Weisbach y que llamase a esta otra función?

Sólo tendrías que utilizar la expresión de Darcy-Weisbach e incluir la UDF (con sus parámetros) dentro de esa función, como si fuera una función integrada de excel dentro de una expresión matemática.

Sería una cosa así: =Friccion(Re;Rugosidad;D)*L/(D/1000)*V^2/(2*g)
por
#234389
Si, pero y dentro de la UDF??

Un saludo.
Última edición por osca el 12 Ago 2010, 12:21, editado 1 vez en total
Avatar de Usuario
por
#234392
osca escribió:Si, pero y dentro de la UDF??

Es mejor utilizar la expresión que te comenté y utilizar solo la UDF para la fricción, es menos confuso para el usuario e introducir las fórmulas directamente es siempre más rápido que utilizar una UDF, aunque en este caso la velocidad no va a ser crítica ya que la expresión es muy sencilla.

Si me dices que método empleas, Newton-Rapshon o cualquier otro, te lo preparo.
por
#234393
No te preocupes. Es simplemente para uniciarme un poco mas en VB en excell, quiero ver si aprendo a hacer UDF y mas cosas en excell para hacer tablas excell mas robustas, ya que veo que muchas tablas y sobre todo en ingeniería se usan este tipo de funciones.

No se si conoces algún manual o algún documento de como iniciarse en VB
Avatar de Usuario
por
#234395
osca escribió:No se si conoces algún manual o algún documento de como iniciarse en VB

Contenido
En la red encontrás manuales gratuitos de VBA para excel, con eso y con la grabadora de macros es suficiente para iniciarse.
Palabras clave
Temas similares

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 2 invitados

Permisos de mensaje

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro