metodos de la biseccion, de la secante y el de Newton-Raphson en excel

5 envíos / 0 nuevos
Último envío
khersonj
Imagen de khersonj
Offline
última acción: Hace 12 años 1 mes
alta: 27/01/2012 - 12:48
Puntos: 115
metodos de la biseccion, de la secante y el de Newton-Raphson en excel

hola buenos dias necesito una ayuda de como hacer estos tres metodos biseccion, el de la secante y el Newton-Raphson en excel los procedimiento paso a paso si es posible y muchas gracias de ante manos

pacomegia
Imagen de pacomegia
Offline
última acción: Hace 14 horas 15 mins
Nivel 1 - 200 puntosNivel 2 - 500 puntosNivel 3 - 1000 puntosNivel 4 - 2000 puntosNivel 5 - 4000 puntosadministrador
alta: 27/12/2006 - 23:26
Puntos: 11175
Re: metodos de la biseccion, de la secante y el de Newton-Raphso

¿cómo defines la función para la que quieres calcular los ceros?

ya sabes que Excel sólo entiende valores, puntos, en sus celdas, pero no funciones continuas. A no ser que pongas la fórmula en una celda y las variables en otras celdas auxiliares.

¿o lo que necesitas es un algoritmo en VBA?

------
Ya sé Excel, pero necesito más ahora en pdf

 

------
Ya sé Excel, pero necesito más.

khersonj
Imagen de khersonj
Offline
última acción: Hace 12 años 1 mes
alta: 27/01/2012 - 12:48
Puntos: 115
Re: metodos de la biseccion, de la secante y el de Newton-Raphso

por lo menos en excel se coloca esta funcion de f(x) (e^-x^2) - x o en vba tambien me sirve esa funcion se puede hacer por los tres metodos por lo que me han dicho

xoan ninguen
Imagen de xoan ninguen
Offline
última acción: Hace 3 años 9 meses
Nivel 1 - 200 puntosNivel 2 - 500 puntos
alta: 19/01/2011 - 10:03
Puntos: 835
Re: metodos de la biseccion, de la secante y el de Newton-Raphso

Para curiosear...

http://ingenieriasimple.com/url/introprogra/VBA/VBAExcel-MNumericos.pdf (páginas 54-55), ahí tienes la macro VBA para el método Newton-Raphson

'Ejemplo
Sub CalculaPosicion()
    intIteracion = 0
    ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column + 1).Value2 = fBiseccion(ActiveSheet.Cells(ActiveCell.Row, ActiveCell.Column).Value2, ActiveSheet.Cells(ActiveCell.Row + 1, ActiveCell.Column).Value2, 0.000001)
End Sub
 

'El método de bisección, adaptado de la Wikipedia:

Function fFuncionCalculo(ByRef X) As Double
'Aquí tienes que poner la función de cálculo
    fFuncionCalculo = (Exp(-X * X)) - X
End Function

Public Function fRaizBiseccion(ByVal Xa As Double, ByVal Xb As Double, Optional ByVal tolerancia As Double = 0.000001) As Double
    Dim f_a As Double
    Dim f_b As Double
    Dim f_c As Double
    Dim Xc As Double
    Dim errorAproximacion As Double
    Dim Seguimiento As String
    Static intIteracion As Integer
    f_a = fFuncionCalculo(Xa)
    f_b = fFuncionCalculo(Xb)
    If ((f_a * f_b) < 0) Then 'Se produce un cambio de signo
        errorAproximacion = VBA.Abs(Xa - Xb)
        Do While tolerancia <= errorAproximacion
            Xc = (Xa + Xb) / 2 'Se toma el valor medio entre los extremos
            f_c = fFuncionCalculo(Xc) 'Se obtiene el valor de la función en dicho punto
            errorAproximacion = VBA.Abs(Xa - Xb)
            Seguimiento = CStr(intIteracion) + "ª" & VBA.Chr(9) & "x= " & VBA.CStr(Xc) & Chr(9) & " f(x)= " & VBA.CStr(f_c) & VBA.Chr(9) & " error= " & VBA.CStr(errorAproximacion) & VBA.Chr(13) & VBA.Chr(10)
            intIteracion = intIteracion + 1
            If ((f_c * f_a) < 0) Then 'Si el cambio de signo se produce entre Xa y Xc, cambiamos los límites
                Xb = Xc
            ElseIf ((f_c * f_b) < 0) Then 'Si el cambio de signo se produce entre Xc y Xb, cambiamos los límites
                Xa = Xc
            End If
        Loop
    Else
        MsgBox "Verifique que entre " & Xa & " y " & Xb & " exista una raíz. Acote mejor los extremos de la raiz y vuelva a empezar"
        Exit Function
    End If
    fRaizBiseccion = Xc
End Function
 
El de la secante... es similar. El algoritmo es:
Public Function fRaizSecante(ByVal Xa As Double, ByVal Xb As Double, Optional ByVal tolerancia As Double = 0.000001) As Double
    Dim f_a As Double, f_b As Double, f_c As Double
    Dim Xc As Double
    Dim errorAproximacion As Double
    Dim Seguimiento As String
    Static intIteracion As Integer
    f_a = fFuncionCalculo(Xa)
    f_b = fFuncionCalculo(Xb)
    If ((f_a * f_b) < 0) Then 'Se produce un cambio de signo
        errorAproximacion = VBA.Abs(Xa - Xb)
        Do While tolerancia <= errorAproximacion
            If f_a <> f_b Then
                Xc = Xb - ((Xb - Xa) * f_b / (f_b - f_a)) 'Se toma el valor secante entre los extremos
            Else
                Xc = (Xa + Xb) / 2 'El punto medio, para evitar el paso por tramos concavos o convexos
            End If
            f_c = fFuncionCalculo(Xc) 'Se obtiene el valor de la función en dicho punto
            errorAproximacion = VBA.Abs(Xa - Xb)
            Seguimiento = CStr(intIteracion) + "ª" & VBA.Chr(9) & "x= " & VBA.CStr(Xc) & Chr(9) & " f(x)= " & VBA.CStr(f_c) & VBA.Chr(9) & " error= " & VBA.CStr(errorAproximacion) & VBA.Chr(13) & VBA.Chr(10)
            intIteracion = intIteracion + 1
            If ((f_c * f_a) < 0) Then 'Si el cambio de signo se produce entre Xa y Xc, cambiamos los límites
                Xb = Xc
            ElseIf ((f_c * f_b) < 0) Then 'Si el cambio de signo se produce entre Xc y Xb, cambiamos los límites
                Xa = Xc
            End If
        Loop
    Else
        MsgBox "Verificar que entre " & Xa & " y " & Xb & " existe una raíz. Acote mejor los extremos de la raiz y vuelva a empezar"
        Exit Function
    End If
    fRaizSecante = Xc
End Function
Y el Regula-Falsi (regla falsa), es de superior convergencia (mejor, aunque puede ser más lento por tener que evaluar más valores).

Public Function fRaizRegulaFalsi(ByRef Xa As Double, ByRef Xb As Double, Optional ByVal tolerancia As Double = 0.000001) As Double
'Es el mejor método de aproximación... entre Bisección, Newton-Rapshon y Secante
    Dim f_a As Double, f_b As Double, f_c As Double
    Dim Xc As Double
    Dim bCambioA As Boolean, bCambioB As Boolean
    Dim errorAproximacion As Double
    Dim Seguimiento As String
    Static intIteracion As Integer
    f_a = fFuncionCalculo(Xa)
    f_b = fFuncionCalculo(Xb)
    If ((f_a * f_b) < 0) Then 'Se produce un cambio de signo
        errorAproximacion = VBA.Abs(Xa - Xb)
        Do While tolerancia <= errorAproximacion
            If f_a <> f_b Then
                Xc = ((f_b * Xa) - (f_a * Xb)) / (f_b - f_a) 'Se toma el valor secante entre los extremos
            Else
                Xc = (Xa + Xb) / 2 'El punto medio, para evitar el paso por tramos concavos o convexos
            End If
            f_c = fFuncionCalculo(Xc) 'Se obtiene el valor de la función en dicho punto
            errorAproximacion = VBA.Abs(Xa - Xb)
            Seguimiento = CStr(intIteracion) + "ª" & VBA.Chr(9) & "x= " & VBA.CStr(Xc) & Chr(9) & " f(x)= " & VBA.CStr(f_c) & VBA.Chr(9) & " error= " & VBA.CStr(errorAproximacion) & VBA.Chr(13) & VBA.Chr(10)
            intIteracion = intIteracion + 1
            If ((f_c * f_a) < 0) Then 'Si el cambio de signo se produce entre Xa y Xc, cambiamos los límites
                Xb = Xc
                If bCambioB = True Then
                    Xc = ((f_b * Xa) - (2 * f_a * Xb)) / (f_b - 2 * f_a)
                    bCambioA = False: bCambioB = False
                Else
                    bCambioA = False: bCambioB = True
                End If
            ElseIf ((f_c * f_b) < 0) Then 'Si el cambio de signo se produce entre Xc y Xb, cambiamos los límites
                Xa = Xc
                If bCambioA = True Then
                    bCambioA = False: bCambioB = False
                Else
                    bCambioA = True: bCambioB = False
                End If
            End If
        Loop
    Else
        MsgBox "Verificar que entre " & Xa & " y " & Xb & " existe una raíz. Acote mejor los extremos de la raiz y vuelva a empezar"
        Exit Function
    End If
    fRaizRegulaFalsi = Xc
    MsgBox intIteracion
End Function

-----------------------------------------------------------------

www.TrazEX.com (soluciones sobre Excel)

khersonj
Imagen de khersonj
Offline
última acción: Hace 12 años 1 mes
alta: 27/01/2012 - 12:48
Puntos: 115
Re: metodos de la biseccion, de la secante y el de Newton-Raphso
MUCHAS GRACIAS MI PANA