Está en la página 1de 3

4.1.

4 Código Visual Basic


Sub Bisección()
Range("A1:G100").Select 'Estos dos comandos permiten borrar los datos que halla en la hoja de Excel'
Selection.ClearContents
Cells(1, 1) = ("ITERACIONES") 'Esta sentencia permite asignar a una celda un nombre, en este caso a la celda (1,1) se le da el nomb
Iteración'
Cells(1, 2) = ("FUNCIÓN")
Cells(1, 3) = ("Xo")
Cells(1, 4) = ("X1")
Cells(1, 5) = ("Xm")
Cells(1, 6) = ("Ym")
Cells(1, 7) = ("ERROR")
Range("A1:G1").Font.Bold = True 'La propiedad Font.Bold pone en negrita las celdas desde A1 a G1'
Columns("A").ColumnWidth = 12 'La propiedad ColumnWidth permite asiganrle el ancho deseado a una columna'
Columns("B").ColumnWidth = 33
Columns("C").ColumnWidth = 6
Columns("D").ColumnWidth = 6
Columns("E").ColumnWidth = 6
Columns("F").ColumnWidth = 6
Columns("G").ColumnWidth = 8
Dim iteraciones As Double, Xo As Double, X1 As Double, Tolerancia As Double, Yo As Double, Y1 As Double
'El Double permite usar toda la capacidad del computador'
iteraciones = InputBox("INGRESE EL NÚMERO DE ITERACIONES")
'Inputbox permite que el usuario ingrese datos '
Func = InputBox("INGRESE LA FUNCIÓN")
  Cells(2, 2) = Func 'Celda donde debe ser almacenado la función ingresada'
Xo = InputBox("INGRESE LIMITE INFERIOR")
    Cells(2, 3) = Xo
X1 = InputBox("INGRESE LIMITE SUPERIOR")
    Cells(2, 4) = X1
Tol = Val(InputBox("INGRESE LA TOLERANCIA DESEADA"))
Yo = Func
x = Xo 'Esto se hace para que el valor inicial sea reemplazado en la función y por tanto para que pueda ser evaluada'
Yo = (Exp(-x ^ 2 + 2) - x * Sin(2 * x + 3) + 1) 'Función evaluada'
y = X1
Y1 = (Exp(-y ^ 2 + 2) - y * Sin(2 * y + 3) + 1)
If Yo = 0 Then
    MsgBox ("Xo (" & Xo & ") ES UNA RAÍZ") '" & variable&" pemite mostrar el valor asignado a la variable '
Else
If Y1 = 0 Then 'If ejecuta las ordenes que se le dan mientras estas sean verdaderas, en este caso miramos si la función evaluada es u
raíz'
    MsgBox ("X1 (" & X1 & ") ES UNA RAÍZ")
Else
If Yo * Y1 > 0 Then 'Con esta instrucción se puede saber si la función tiene algun cambio de signo en el intervalo para saber si hay un
    MsgBox ("NO EXISTE LA RAÍZ")
Else
    Xm = (Xo + X1) / 2 'Con esta instrucciòn se reduce el tamaño del intervalo inicial en el cual se buscará la raíz, hallando su punto me
    Ym = 2 * Xm - 186 'Se evalua la función inicial con el nuevo punto medio (Xm) hallado en el paso anterior'
    E = Tol + 1 'Condición que asegura que el programa se ejecute mientras se cumplan las condiciones '
    Cont = 1
    Range("A" & Cont + 1) = Cont 'Esta instrucción ubica en la columna A de la hoja de Excel la iteración que se acaba de realizar'
    Range("E" & Cont + 1) = Xm
    Range("F" & Cont + 1) = Ym
While Ym <> 0 And E > Tol And Cont < iteraciones 'La instrucción While permite ejecutar todas las ordenes asignadas siempre y cuan
estas seas verdaderas'
    Aux = Xm 'Aux(Auxiliar) permite almacenar el valor de un variable que se necesitará luego'
    If Yo * Ym < 0 And X1 = Xm And Y1 = Ym Then
    Xo = Xm 'Con las cuatro instrucciones siguientes se busca establecer un nuevo Xo o X1 de acuerdo al lado del intervalo donde se
encuentre la raíz'
    Yo = Ym 'La raíz se encuentra al lado derecho de la división del intervalo'
    Else
        X1 = Xm 'La raíz se encuentra al lado izquierdo de la división del intervalo'
        Y1 = Ym
    End If
    Xm = (Xo + X1) / 2 'Se hallan nuevamente el punto medio'
    Ym = (Exp(-x ^ 2 + 2) - x * Sin(2 * x + 3) + 1) 'Se evalua la función inicial para el nuevo punto medio'
    E = Abs(Xm - Aux) 'Se calcula el error absoluto, trayendo el valor anterior de Xm guardado en aux'
    Cont = Cont + 1
    Range("A" & Cont + 1) = Cont
    Range("C" & Cont + 1) = Xo
    Range("D" & Cont + 1) = X1
    Range("E" & Cont + 1) = Xm
    Range("F" & Cont + 1) = Ym
    Range("G" & Cont + 1) = E
Wend
If Ym = 0 Then
    MsgBox ("Xm (" & Xm & ") ES UNA RAÍZ")
Else
    If E < Tol Then
    MsgBox ("Xm (" & Xm & ")es una Raíz con error de (" & E & ")")
Else
    MsgBox ("NO HAY RAÍZ EN EL INTERVALO")
End If
 End If
  End If
   End If
    End If
     End Sub

También podría gustarte