Derivación por diferencias divididas y por fórmulas de alta precisión en Visual Basic 2005 (página 6)
Enviado por jaimemontoya
Dim i, j As Integer '"i" significará "fila" y "j" significará columna, de modo que se trabajará con (i,j)=(fila,columna)
'Establece cuántas filas y columnas tendrá el Grid.
AxMSFlexGrid1.Rows = 12 'Establece 12 filas.
AxMSFlexGrid1.Cols = 8 'Establece 8 columnas.
'Se crea una nueva instancia de la clase Evaluador.
Dim mEval As New Evaluador()
'Se crea una variable tipo string y se le asigna la expresión que se quiere evaluar.
Dim mExpresion As String = TextBox1.Text ' = "X".
'Se crea un objeto StringCollection y se le agregan los parámetros de entrada que usará el método eval.
Dim mParameters As New StringCollection()
mParameters.Add("ByVal X as Double")
'Las funciones a utilizar pertenece al espacio de nombres System.Math.
'se hace necesario entonces, crear un objeto StringCollection y agregar
'el namespace System.Math.
Dim mNameSpaces As New StringCollection()
mNameSpaces.Add("System.Math")
'Se invoca el método PrecompilarFunción y se verifica si se generó correctamente el assembly.
If mEval.PrecompilarAssembly(mExpresion, mParameters, mNameSpaces) Then
'Si el assembly se generó correctamente, se crea un array con los valores de los parametros a evaluar.
'Se invoca el método Evaluar y se asignan los resultados correspondientes.
'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.
With AxMSFlexGrid1 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.
For fila As Integer = 0 To .Rows – 1
With AxMSFlexGrid1
.Row = fila
For columna As Integer = 0 To .Cols – 1
.set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.
Next
End With
Next
End With
'Se comienzan a hacer los cálculos.
tablas15(1, 1) = Val(TextBox2.Text) – (5 * (Val(TextBox3.Text))) 'Almacena "a-5h".
tablas15(2, 1) = Val(TextBox2.Text) – (4 * (Val(TextBox3.Text))) 'Almacena "a-4h".
tablas15(3, 1) = Val(TextBox2.Text) – (3 * (Val(TextBox3.Text))) 'Almacena "a-3h".
tablas15(4, 1) = Val(TextBox2.Text) – (2 * (Val(TextBox3.Text))) 'Almacena "a-2h".
tablas15(5, 1) = Val(TextBox2.Text) – Val(TextBox3.Text) 'Almacena "a-h".
tablas15(6, 1) = Val(TextBox2.Text) 'Almacena "a".
tablas15(7, 1) = Val(TextBox2.Text) + Val(TextBox3.Text) 'Almacena "a+h".
tablas15(8, 1) = Val(TextBox2.Text) + (2 * (Val(TextBox3.Text))) 'Almacena "a+2h".
tablas15(9, 1) = Val(TextBox2.Text) + (3 * (Val(TextBox3.Text))) 'Almacena "a+3h".
tablas15(10, 1) = Val(TextBox2.Text) + (4 * (Val(TextBox3.Text))) 'Almacena "a+4h".
tablas15(11, 1) = Val(TextBox2.Text) + (5 * (Val(TextBox3.Text))) 'Almacena "a+5h".
tablas15(1, 2) = mEval.Evaluar(Val(tablas15(1, 1))) 'Almacena "f(a-5h)".
tablas15(2, 2) = mEval.Evaluar(Val(tablas15(2, 1))) 'Almacena "f(a-4h)".
tablas15(3, 2) = mEval.Evaluar(Val(tablas15(3, 1))) 'Almacena "f(a-3h)".
tablas15(4, 2) = mEval.Evaluar(Val(tablas15(4, 1))) 'Almacena "f(a-2h)".
tablas15(5, 2) = mEval.Evaluar(Val(tablas15(5, 1))) 'Almacena "f(a-h)".
tablas15(6, 2) = mEval.Evaluar(Val(tablas15(6, 1))) 'Almacena "f(a)".
tablas15(7, 2) = mEval.Evaluar(Val(tablas15(7, 1))) 'Almacena "f(a+h)".
tablas15(8, 2) = mEval.Evaluar(Val(tablas15(8, 1))) 'Almacena "f(a+2h)".
tablas15(9, 2) = mEval.Evaluar(Val(tablas15(9, 1))) 'Almacena "f(a+3h)".
tablas15(10, 2) = mEval.Evaluar(Val(tablas15(10, 1))) 'Almacena "f(a+4h)".
tablas15(11, 2) = mEval.Evaluar(Val(tablas15(11, 1))) 'Almacena "f(a+5h)".
tablas15(2, 3) = (Val(tablas15(3, 2)) – Val(tablas15(1, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a-3h)-f(a-5h))/h"="f'(a-4h)".
tablas15(3, 3) = (Val(tablas15(4, 2)) – Val(tablas15(2, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a-2h)-f(a-4h))/h"="f'(a-3h)".
tablas15(4, 3) = (Val(tablas15(5, 2)) – Val(tablas15(3, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a-h)-f(a-3h))/h"="f'(a-2h)".
tablas15(5, 3) = (Val(tablas15(6, 2)) – Val(tablas15(4, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a)-f(a-2h))/h"="f'(a-h)".
tablas15(6, 3) = (Val(tablas15(7, 2)) – Val(tablas15(5, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a+h)-f(a-h))/h"="f'(a)".
tablas15(7, 3) = (Val(tablas15(8, 2)) – Val(tablas15(6, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a+2h)-f(a))/h"="f'(a+h)".
tablas15(8, 3) = (Val(tablas15(9, 2)) – Val(tablas15(7, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a+3h)-f(a+h))/h"="f'(a+2h)".
tablas15(9, 3) = (Val(tablas15(10, 2)) – Val(tablas15(8, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a+4h)-f(a+2h))/h"="f'(a+3h)".
tablas15(10, 3) = (Val(tablas15(11, 2)) – Val(tablas15(9, 2))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f(a+5h)-f(a+3h))/h"="f'(a+4h)".
tablas15(3, 4) = (Val(tablas15(4, 3)) – Val(tablas15(2, 3))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'(a-2h)-f(a-4h))/h"="f''(a-3h)".
tablas15(4, 4) = (Val(tablas15(5, 3)) – Val(tablas15(3, 3))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'(a-h)-f'(a-3h))/h"="f''(a-2h)".
tablas15(5, 4) = (Val(tablas15(6, 3)) – Val(tablas15(4, 3))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'(a)-f'(a-2h))/h"="f''(a-h)".
tablas15(6, 4) = (Val(tablas15(7, 3)) – Val(tablas15(5, 3))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'(a+h)-f'(a-h))/h"="f''(a)".
tablas15(7, 4) = (Val(tablas15(8, 3)) – Val(tablas15(6, 3))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'(a+2h)-f'(a))/h"="f''(a+h)".
tablas15(8, 4) = (Val(tablas15(9, 3)) – Val(tablas15(7, 3))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'(a+3h)-f'(a+h))/h"="f''(a+2h)".
tablas15(9, 4) = (Val(tablas15(10, 3)) – Val(tablas15(8, 3))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'(a+4h)-f'(a+2h))/h"="f''(a+3h)".
tablas15(4, 5) = (Val(tablas15(5, 4)) – Val(tablas15(3, 4))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f''(a-h)-f''(a-3h))/h"="f'''(a-2h)".
tablas15(5, 5) = (Val(tablas15(6, 4)) – Val(tablas15(4, 4))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f''(a)-f''(a-2h))/h"="f'''(a-h)".
tablas15(6, 5) = (Val(tablas15(7, 4)) – Val(tablas15(5, 4))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f''(a+h)-f''(a-h))/h"="f'''(a)".
tablas15(7, 5) = (Val(tablas15(8, 4)) – Val(tablas15(6, 4))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f''(a+2h)-f''(a))/h"="f'''(a+h)".
tablas15(8, 5) = (Val(tablas15(9, 4)) – Val(tablas15(7, 4))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f''(a+3h)-f''(a+h))/h"="f'''(a+2h)".
tablas15(5, 6) = (Val(tablas15(6, 5)) – Val(tablas15(4, 5))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'''(a)-f'''(a-2h))/h"="f''''(a-h)".
tablas15(6, 6) = (Val(tablas15(7, 5)) – Val(tablas15(5, 5))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'''(a+h)-f'''(a-h))/h"="f''''(a)".
tablas15(7, 6) = (Val(tablas15(8, 5)) – Val(tablas15(6, 5))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f'''(a+2h)-f'''(a))/h"="f''''(a+h)".
tablas15(6, 7) = (Val(tablas15(7, 6)) – Val(tablas15(5, 6))) / (2 * (Val(TextBox3.Text))) 'Almacena "(f''''(a+h)-f''''(a-h))/h"="f'''''(a)".
'Para indicar que se realizarán operaciones con el objeto AxMSFlexGrid1
'sin necesidad de escribir su nombre.
'De aquí en adelante vienen las impresiones de los valores en las celdas correspondientes.
AxMSFlexGrid1.ForeColor = Color.Blue 'Cambia el color de letra de todas las celdas a azul.
With AxMSFlexGrid1 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(1, 500) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.
.AllowUserResizing = MSFlexGridLib.AllowUserResizeSettings.flexResizeBoth 'Determina que el usuario puede modificar el ancho de columna en tiempo de ejecución.
'Para ponerle color amarillo suave de fondo a todas las celdas.
Dim Color1 As Color = Color.LightGoldenrodYellow 'Amarillo suave.
For fila As Integer = 1 To .Rows – 1 'Para no involucrar la primera fila, se comienza de 1 y no de 0.
With AxMSFlexGrid1
.Row = fila
For columna As Integer = 1 To .Cols – 1 'Para no involucrar la primera columna, se comienza de 1 y no de 0.
.Col = columna
.CellBackColor = Color1 'Por estar dentro del For, cambia el color de fondo de todas las celdas a LighYellow (amarillo suave), pues la variable Color1 fue inicializada anteriormente con el valor de "Color.LightGoldenrodYellow".
.CellForeColor = Color.Blue 'Por estar dentro del For, cambia el color de letra de todas las celdas a azul.
.set_ColWidth(columna, 1300) 'Por estar deltro del For, le da un ancho de 1300 a cada columna.
Next
End With
Next
'Establece la alineación del contenido de la columna 0
.set_ColAlignment(0, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)
'Se le ponen los respectivos títulos a cada fila.
'La sintaxis dentro del paréntesis es: (fila, columna, valor).
.set_TextMatrix(1, 0, "a-5h")
.set_TextMatrix(2, 0, "a-4h")
.set_TextMatrix(3, 0, "a-3h")
.set_TextMatrix(4, 0, "a-2h")
.set_TextMatrix(5, 0, "a-h")
.set_TextMatrix(6, 0, "a")
'Se le ponen los respectivos títulos a cada columna.
.set_TextMatrix(0, 1, "x")
.set_TextMatrix(0, 2, "f(x)")
.set_TextMatrix(0, 3, "f'(x)")
.set_TextMatrix(0, 4, "f''(x)")
.set_TextMatrix(0, 5, "f'''(x)")
.set_TextMatrix(0, 6, "f''''(x)")
.set_TextMatrix(0, 7, "f'''''(x)")
'Impresiones de resultados.
.set_TextMatrix(1, 1, Math.Round(Val(tablas15(1, 1)), 10)) 'Imprime el valor de "a-5h"ss (con 10 decimales).
.set_TextMatrix(2, 1, Math.Round(Val(tablas15(2, 1)), 10)) 'Imprime el valor de "a-4h"ss (con 10 decimales).
.set_TextMatrix(3, 1, Math.Round(Val(tablas15(3, 1)), 10)) 'Imprime el valor de "a-3h"ss (con 10 decimales).
.set_TextMatrix(4, 1, Math.Round(Val(tablas15(4, 1)), 10)) 'Imprime el valor de "a-2h"ss (con 10 decimales).
.set_TextMatrix(5, 1, Math.Round(Val(tablas15(5, 1)), 10)) 'Imprime el valor de "a-h"ss (con 10 decimales).
.set_TextMatrix(6, 1, Math.Round(Val(tablas15(6, 1)), 10)) 'Imprime el valor de "a"ss (con 10 decimales).
.set_TextMatrix(7, 1, Math.Round(Val(tablas15(7, 1)), 10)) 'Imprime el valor de "a+h"ss (con 10 decimales).
.set_TextMatrix(8, 1, Math.Round(Val(tablas15(8, 1)), 10)) 'Imprime el valor de "a+2h"ss (con 10 decimales).
.set_TextMatrix(9, 1, Math.Round(Val(tablas15(9, 1)), 10)) 'Imprime el valor de "a+3h"ss (con 10 decimales).
.set_TextMatrix(10, 1, Math.Round(Val(tablas15(10, 1)), 10)) 'Imprime el valor de "a+4h"ss (con 10 decimales).
.set_TextMatrix(11, 1, Math.Round(Val(tablas15(11, 1)), 10)) 'Imprime el valor de "a+5h"ss (con 10 decimales).
.set_TextMatrix(1, 2, Math.Round(Val(tablas15(1, 2)), 10)) 'Imprime el valor de "f(a-5h)"ss (con 10 decimales).
.set_TextMatrix(2, 2, Math.Round(Val(tablas15(2, 2)), 10)) 'Imprime el valor de "f(a-4h)"ss (con 10 decimales).
.set_TextMatrix(3, 2, Math.Round(Val(tablas15(3, 2)), 10)) 'Imprime el valor de "f(a-3h)"ss (con 10 decimales).
.set_TextMatrix(4, 2, Math.Round(Val(tablas15(4, 2)), 10)) 'Imprime el valor de "f(a-2h)"ss (con 10 decimales).
.set_TextMatrix(5, 2, Math.Round(Val(tablas15(5, 2)), 10)) 'Imprime el valor de "f(a-h)"ss (con 10 decimales).
.set_TextMatrix(6, 2, Math.Round(Val(tablas15(6, 2)), 10)) 'Imprime el valor de "f(a)"ss (con 10 decimales).
.set_TextMatrix(7, 2, Math.Round(Val(tablas15(7, 2)), 10)) 'Imprime el valor de "f(a+h)"ss (con 10 decimales).
.set_TextMatrix(8, 2, Math.Round(Val(tablas15(8, 2)), 10)) 'Imprime el valor de "f(a+2h)"ss (con 10 decimales).
.set_TextMatrix(9, 2, Math.Round(Val(tablas15(9, 2)), 10)) 'Imprime el valor de "f(a+3h)"ss (con 10 decimales).
.set_TextMatrix(10, 2, Math.Round(Val(tablas15(10, 2)), 10)) 'Imprime el valor de "f(a+4h)"ss (con 10 decimales).
.set_TextMatrix(11, 2, Math.Round(Val(tablas15(11, 2)), 10)) 'Imprime el valor de "f(a+5h)"ss (con 10 decimales).
.set_TextMatrix(2, 3, Math.Round(Val(tablas15(2, 3)), 10)) 'Imprime el valor de "(f(a-3h)-f(a-5h))/h"="f'(a-4h)"ss (con 10 decimales).
.set_TextMatrix(3, 3, Math.Round(Val(tablas15(3, 3)), 10)) 'Imprime el valor de "(f(a-2h)-f(a-4h))/h"="f'(a-3h)"ss (con 10 decimales).
.set_TextMatrix(4, 3, Math.Round(Val(tablas15(4, 3)), 10)) 'Imprime el valor de "(f(a-h)-f(a-3h))/h"="f'(a-2h)"ss (con 10 decimales).
.set_TextMatrix(5, 3, Math.Round(Val(tablas15(5, 3)), 10)) 'Imprime el valor de "(f(a)-f(a-2h))/h"="f'(a-h)"ss (con 10 decimales).
.set_TextMatrix(6, 3, Math.Round(Val(tablas15(6, 3)), 10)) 'Imprime el valor de "(f(a+h)-f(a-h))/h"="f'(a)"ss (con 10 decimales).
.set_TextMatrix(7, 3, Math.Round(Val(tablas15(7, 3)), 10)) 'Imprime el valor de "(f(a+2h)-f(a))/h"="f'(a+h)"ss (con 10 decimales).
.set_TextMatrix(8, 3, Math.Round(Val(tablas15(8, 3)), 10)) 'Imprime el valor de "(f(a+3h)-f(a+h))/h"="f'(a+2h)"ss (con 10 decimales).
.set_TextMatrix(9, 3, Math.Round(Val(tablas15(9, 3)), 10)) 'Imprime el valor de "(f(a+4h)-f(a+2h))/h"="f'(a+3h)"ss (con 10 decimales).
.set_TextMatrix(10, 3, Math.Round(Val(tablas15(10, 3)), 10)) 'Imprime el valor de "(f(a+5h)-f(a+3h))/h"="f'(a+4h)"ss (con 10 decimales).
.set_TextMatrix(3, 4, Math.Round(Val(tablas15(3, 4)), 10)) 'Imprime el valor de "(f'(a-2h)-f(a-4h))/h"="f''(a-3h)"ss (con 10 decimales).
.set_TextMatrix(4, 4, Math.Round(Val(tablas15(4, 4)), 10)) 'Imprime el valor de "(f'(a-h)-f'(a-3h))/h"="f''(a-2h)"ss (con 10 decimales).
.set_TextMatrix(5, 4, Math.Round(Val(tablas15(4, 4)), 10)) 'Imprime el valor de "(f'(a)-f'(a-2h))/h"="f''(a-h)"ss (con 10 decimales).
.set_TextMatrix(6, 4, Math.Round(Val(tablas15(4, 4)), 10)) 'Imprime el valor de "(f'(a+h)-f'(a-h))/h"="f''(a)"ss (con 10 decimales).
.set_TextMatrix(7, 4, Math.Round(Val(tablas15(7, 4)), 10)) 'Imprime el valor de "(f'(a+2h)-f'(a))/h"="f''(a+h)"ss (con 10 decimales).
.set_TextMatrix(8, 4, Math.Round(Val(tablas15(8, 4)), 10)) 'Imprime el valor de "(f'(a+3h)-f'(a+h))/h"="f''(a+2h)"ss (con 10 decimales).
.set_TextMatrix(9, 4, Math.Round(Val(tablas15(9, 4)), 10)) 'Imprime el valor de "(f'(a+4h)-f'(a+2h))/h"="f''(a+3h)"ss (con 10 decimales).
.set_TextMatrix(4, 5, Math.Round(Val(tablas15(4, 5)), 10)) 'Imprime el valor de "(f''(a-h)-f''(a-3h))/h"="f'''(a-2h)"ss (con 10 decimales).
.set_TextMatrix(5, 5, Math.Round(Val(tablas15(5, 5)), 10)) 'Imprime el valor de "(f''(a)-f''(a-2h))/h"="f'''(a-h)"ss (con 10 decimales).
.set_TextMatrix(6, 5, Math.Round(Val(tablas15(6, 5)), 10)) 'Imprime el valor de "(f''(a+h)-f''(a-h))/h"="f'''(a)"ss (con 10 decimales).
.set_TextMatrix(7, 5, Math.Round(Val(tablas15(7, 5)), 10)) 'Imprime el valor de "(f''(a+2h)-f''(a))/h"="f'''(a+h)"ss (con 10 decimales).
.set_TextMatrix(8, 5, Math.Round(Val(tablas15(8, 5)), 10)) 'Imprime el valor de "(f''(a+3h)-f''(a+h))/h"="f'''(a+2h)"ss (con 10 decimales).
.set_TextMatrix(5, 6, Math.Round(Val(tablas15(5, 6)), 10)) 'Imprime el valor de "(f'''(a)-f'''(a-2h))/h"="f''''(a-h)"ss (con 10 decimales).
.set_TextMatrix(6, 6, Math.Round(Val(tablas15(6, 6)), 10)) 'Imprime el valor de "(f'''(a+h)-f'''(a-h))/h"="f''''(a)"ss (con 10 decimales).
.set_TextMatrix(7, 6, Math.Round(Val(tablas15(7, 6)), 10)) 'Imprime el valor de "(f'''(a+2h)-f'''(a))/h"="f''''(a+h)"ss (con 10 decimales).
.set_TextMatrix(6, 7, Math.Round(Val(tablas15(6, 7)), 10)) 'Imprime el valor de "(f''''(a+h)-f''''(a-h))/h"="f'''''(a)" (con 10 decimales).
End With
TextBox5.Text = "quinta" 'Imprime el orden de la derivada.
TextBox6.Text = tablas15(6, 7) 'Muestra la respuesta en el TextBox6.
TextBox7.Text = TextBox3.Text 'Imprime el error utilizado.
End If
End If
'CASO 16. PRIMERA DERIVADA POR FÓRMULAS DE ALTA PRECISIÓN HACIA ADELANTE.
If (ComboBox1.SelectedItem = "Fórmulas de Alta Precisión Hacia Adelante") And (ComboBox2.SelectedItem = "1ra. derivada") Then
Dim i, j As Integer '"i" significará "fila" y "j" significará columna, de modo que se trabajará con (i,j)=(fila,columna)
'Establece cuántas filas y columnas tendrá el Grid.
AxMSFlexGrid2.Rows = 51 'Establece 51 filas.
AxMSFlexGrid2.Cols = 8 'Establece 8 columnas.
'Se crea una nueva instancia de la clase Evaluador.
Dim mEval As New Evaluador()
'Se crea una variable tipo string y se le asigna la expresión que se quiere evaluar.
Dim mExpresion As String = TextBox1.Text ' = "X".
'Se crea un objeto StringCollection y se le agregan los parámetros de entrada que usará el método eval.
Dim mParameters As New StringCollection()
mParameters.Add("ByVal X as Double")
'Las funciones a utilizar pertenece al espacio de nombres System.Math.
'se hace necesario entonces, crear un objeto StringCollection y agregar
'el namespace System.Math.
Dim mNameSpaces As New StringCollection()
mNameSpaces.Add("System.Math")
'Se invoca el método PrecompilarFunción y se verifica si se generó correctamente el assembly.
If mEval.PrecompilarAssembly(mExpresion, mParameters, mNameSpaces) Then
'Si el assembly se generó correctamente, se crea un array con los valores de los parametros a evaluar.
'Se invoca el método Evaluar y se asignan los resultados correspondientes.
'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.
With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.
For fila As Integer = 0 To .Rows – 1
With AxMSFlexGrid2
.Row = fila
For columna As Integer = 0 To .Cols – 1
.set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.
Next
End With
Next
End With
'Se comienzan a hacer los cálculos.
'Valores para la primera iteración.
tablas16(1, 1) = Val(TextBox2.Text) 'Almacena "a" de la primera iteración.
tablas16(1, 2) = Val(TextBox2.Text) + 10 ^ (-1) 'Almacena "a+h" de la primera iteración.
tablas16(1, 3) = mEval.Evaluar(Val(tablas16(1, 1))) 'Almacena "f(a)" de la primera iteración.
tablas16(1, 4) = mEval.Evaluar(Val(tablas16(1, 2))) 'Almacena "f(a+h)" de la primera iteración.
'tablas16(1, 5) = no hay Error en la primera iteración.
'tablas16(1, 6) = no hay Error% en la primera iteración porque tampoco hay Error en la primera iteración.
tablas16(1, 7) = (tablas16(1, 4) – tablas16(1, 3)) / 10 ^ (-1) 'Almacena "f'(x)=(f(a+h)-f(a))/h"="f'(a)" de la primera iteración.
'Valores para la segunda iteración.
tablas16(2, 1) = Val(TextBox2.Text) 'Almacena "a" de la segunda iteración.
tablas16(2, 2) = Val(TextBox2.Text) + 10 ^ (-2) 'Almacena "a+h" de la segunda iteración.
tablas16(2, 3) = mEval.Evaluar(Val(tablas16(2, 1))) 'Almacena "f(a)" de la segunda iteración.
tablas16(2, 4) = mEval.Evaluar(Val(tablas16(2, 2))) 'Almacena "f(a+h)" de la segunda iteración.
tablas16(2, 7) = (tablas16(2, 4) – tablas16(2, 3)) / 10 ^ (-2) 'Almacena "f'(x)=(f(a+h)-f(a))/h" de la segunda iteración.
tablas16(2, 5) = Math.Abs(Val(tablas16(2, 7))) – Math.Abs(Val(tablas16(1, 7))) 'Almacena el "Error" de la segunda iteración, que es el valor absoluto de "f'(x)" de la segunda iteración menos el valor absoluto de "f'(x)" de la primera iteración.
tablas16(2, 6) = Math.Abs(Val(tablas16(2, 5))) / Math.Abs(Val(tablas16(2, 7))) * 100 'Almacena el "Error%" de la segunda iteración, que es el valor absoluto del Error de la segunda iteración entre el valor absoluto de la primera derivada de la segunda iteración (f'(x)) multiplicado por 100.
'Valores para la tercera iteración en adelante.
Dim exponenteparavalorh As Integer = 3 'Debido a que el For comienza de la iteración 3, se le pone a esta variable el valor de 3, pero en la iteración 4 valdrá 4, en la 5 valdrá 5, en la 6 valdrá 6 y así sucesivamente. Recuérdese que en la primera iteración h=10^(-1), en la segunda iteración h=10^(-2), en la tercera iteración h=10^(-3), en la cuarta iteración h=10^(-4), en la quinta iteración h=10^(-5), etc. Entonces lo que se busca es hacer que h=10^(-exponenteparavalorh).
For ciclo As Integer = 3 To 50 'Se tomará 50 como número máximo de iteraciones.
If tablas16(2, 5) < Val(TextBox4.Text) Then 'Si el "Error" de la iteración 2 es menor que la "Tolerancia" introducida por el usuario es porque ya se ha encontrado la respuesta (que sería el "f'(x)") y deben terminar entonces las iteraciones.
TextBox8.Text = "primera" 'Imprime el orden de la derivada.
TextBox9.Text = tablas16(2, 7) 'Este valor de respuesta se iría a imprimir en el TextBox8 como primera derivada de la función introducida por el usuario.
TextBox10.Text = TextBox4.Text 'Imprime el error utilizado.
ciclo = 50 'Esto hará que la próxima iteración sea la 51, por lo cual ya no se va a entrar al For, pues ya se ha encontrado la respuesta.
Else
tablas16(ciclo, 1) = Val(TextBox2.Text) 'Almacena "a" de la iteración correspondiente al "ciclo".
tablas16(ciclo, 2) = Val(TextBox2.Text) + 10 ^ (-exponenteparavalorh) 'Almacena "a+h" de la iteración correspondiente al "ciclo".
tablas16(ciclo, 3) = mEval.Evaluar(Val(tablas16(ciclo, 1))) 'Almacena "f(a)" de la iteración correspondiente al "ciclo".
tablas16(ciclo, 4) = mEval.Evaluar(Val(tablas16(ciclo, 2))) 'Almacena "f(a+h)" de la iteración correspondiente al "ciclo".
tablas16(ciclo, 7) = (tablas16(ciclo, 4) – tablas16(ciclo, 3)) / 10 ^ (-exponenteparavalorh) 'Almacena "f'(x)=(f(a+h)-f(a))/h"="f'(a)" de la iteración correspondiente al "ciclo".
tablas16(ciclo, 5) = Math.Abs(Val(tablas16(ciclo, 7))) – Math.Abs(Val(tablas16(ciclo – 1, 7))) 'Almacena el "Error" de la iteración correspondiente al "ciclo", que es el valor absoluto de "f'(x)" de la iteración correspondiente al "ciclo" menos el valor absoluto de "f'(x)" de la iteración anterior (correspondiente al ciclo "ciclo – 1").
tablas16(ciclo, 6) = Math.Abs(Val(tablas16(ciclo, 5))) / Math.Abs(Val(tablas16(ciclo, 7))) * 100 'Almacena el "Error%" de la iteración correspondiente al "ciclo", que es el valor absoluto del Error de la iteración correspondiente al "ciclo" entre el valor absoluto de la iteración correspondiente al ciclo (f'(x)) multiplicado por 100.
If tablas16(ciclo, 5) < Val(TextBox4.Text) Then
TextBox8.Text = "primera" 'Imprime el orden de la derivada.
TextBox9.Text = tablas16(ciclo, 7) 'Este valor de respuesta se iría a imprimir en el TextBox9 como primera derivada de la función introducida por el usuario.
TextBox10.Text = TextBox4.Text 'Imprime el error utilizado.
ciclo = 50 'Esto hará que la próxima iteración sea la 51, por lo cual ya no se va a entrar al For, pues ya se ha encontrado la respuesta.
End If
exponenteparavalorh += 1 'Equivale a decir: "exponenteparavalorh = exponenteparavalorh + 1.
End If
Next ciclo 'No es necesario poner "ciclo" en esta línea, pero tampoco es error sintáctico hacerlo. Es simplemente opcional según las reglas sintácticas de Visual Basic 2005.
'Para indicar que se realizarán operaciones con el objeto AxMSFlexGrid2
'sin necesidad de escribir su nombre.
'De aquí en adelante vienen las impresiones de los valores en las celdas correspondientes.
AxMSFlexGrid2.ForeColor = Color.Blue 'Cambia el color de letra de todas las celdas a azul.
With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.
'Esto servirá para poner color azul a la letra de las celdas donde se muestran los resultados y hacer más grande el ancho de las columnas donde aparecen las celdas de los resultados, pues se estará trabajando con 10 decimales. Nótese que no se involucra la primera fila ni la primera columna debido a que se programan los For comenzando desde 1 y no desde 0.
For fila As Integer = 1 To .Rows – 1 'Para no involucrar la primera fila, se comienza de 1 y no de 0.
With AxMSFlexGrid2
.Row = fila
For columna As Integer = 1 To .Cols – 1 'Para no involucrar la primera columna, se comienza de 1 y no de 0.
.Col = columna
.CellForeColor = Color.Blue 'Por estar dentro del For, cambia el color de letra de todas las celdas a azul (excepto la primera fila y la primera columna).
.set_ColWidth(columna, 1300) 'Por estar deltro del For, le da un ancho de 1300 a cada columna (excepto a la primera columna).
Next
End With
Next
'Establece la alineación del contenido de la columna 0
.set_ColAlignment(0, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)
'For para ponerlo los números correspondientes a cada iteración desde la fila 2 de la primera columna hasta la fila 51 de la primera columna.
For i = 1 To 50
.set_TextMatrix(i, 0, i) 'La sintaxis dentro del paréntesis es: (fila, columna, valor).
Next i
'Se le ponen los respectivos títulos a cada columna.
.set_TextMatrix(0, 0, "Iteración")
.set_TextMatrix(0, 1, "a")
.set_TextMatrix(0, 2, "a+h")
.set_TextMatrix(0, 3, "f(a)")
.set_TextMatrix(0, 4, "f(a+h)")
.set_TextMatrix(0, 5, "Error")
.set_TextMatrix(0, 6, "Error%")
.set_TextMatrix(0, 7, "f'(x)")
'Impresiones para primera iteración.
.set_TextMatrix(1, 1, Math.Round(Val(tablas16(1, 1)), 10)) 'Imprime el valor de "a" de la primera iteración (con 10 decimales).
.set_TextMatrix(1, 2, Math.Round(Val(tablas16(1, 2)), 10)) 'Imprime el valor de "a+h" de la primera iteración (con 10 decimales).
.set_TextMatrix(1, 3, Math.Round(Val(tablas16(1, 3)), 10)) 'Imprime el valor de "f(a)" de la primera iteración (con 10 decimales).
.set_TextMatrix(1, 4, Math.Round(Val(tablas16(1, 4)), 10)) 'Imprime el valor de "f(a+h)" de la primera iteración (con 10 decimales).
'.set_TextMatrix(1, 5, Math.Round(Val(tablas16(1, 5)), 10)) 'No hay "Error" en la primera iteración.
'.set_TextMatrix(1, 6, Math.Round(Val(tablas16(1, 6)), 10)) 'No hay "Error%" en la primera iteración porque tampoco hay Error en la primera iteración.
.set_TextMatrix(1, 7, Math.Round(Val(tablas16(1, 7)), 10)) 'Imprime el valor de "f'(x)=(f(a+h)-f(a))/h" de la primera iteración (con 10 decimales).
'Impresiones para segunda iteración.
.set_TextMatrix(2, 1, Math.Round(Val(tablas16(2, 1)), 10)) 'Imprime el valor de "a" de la segunda iteración (con 10 decimales).
.set_TextMatrix(2, 2, Math.Round(Val(tablas16(2, 2)), 10)) 'Imprime el valor de "a+h" de la segunda iteración (con 10 decimales).
.set_TextMatrix(2, 3, Math.Round(Val(tablas16(2, 3)), 10)) 'Imprime el valor de "f(a)" de la segunda iteración (con 10 decimales).
.set_TextMatrix(2, 4, Math.Round(Val(tablas16(2, 4)), 10)) 'Imprime el valor de "f(a+h)" de la segunda iteración (con 10 decimales).
.set_TextMatrix(2, 5, Math.Round(Val(tablas16(2, 5)), 10)) 'Imprime el valor de "Error" de la segunda iteración (con 10 decimales).
.set_TextMatrix(2, 6, Math.Round(Val(tablas16(2, 6)), 10)) 'Imprime el valor de "Error %" de la segunda iteración (con 10 decimales).
.set_TextMatrix(2, 7, Math.Round(Val(tablas16(2, 7)), 10)) 'Imprime el valor de "f'(x)=(f(a+h)-f(a))/h"="f'(a)" de la segunda iteración (con 10 decimales).
'Impresiones para la tercera iteración en adelante.
For ciclo As Integer = 3 To (exponenteparavalorh – 1) 'Se tomará "exponenteparavalorh-1" como número máximo de iteraciones porque cuando se iban sacando los valores anteriormente, esa variable contiene el "número máximo de iteraciones + 1" a que se llegó y por lo tanto el "número máximo de iteraciones-1" será el número total de iteraciones que se tiene que hacer para las impresiones.
.set_TextMatrix(ciclo, 1, Math.Round(Val(tablas16(ciclo, 1)), 10)) 'Imprime el valor de "a" de la iteración correspondiente a "ciclo" (con 10 decimales).
.set_TextMatrix(ciclo, 2, Math.Round(Val(tablas16(ciclo, 2)), 10)) 'Imprime el valor de "a+h" de la iteración correspondiente a "ciclo" (con 10 decimales).
.set_TextMatrix(ciclo, 3, Math.Round(Val(tablas16(ciclo, 3)), 10)) 'Imprime el valor de "f(a)" de la iteración correspondiente a "ciclo" (con 10 decimales).
.set_TextMatrix(ciclo, 4, Math.Round(Val(tablas16(ciclo, 4)), 10)) 'Imprime el valor de "f(a+h)" de la iteración correspondiente a "ciclo" (con 10 decimales).
.set_TextMatrix(ciclo, 5, Math.Round(Val(tablas16(ciclo, 5)), 10)) 'Imprime el valor de "Error" de la iteración correspondiente a "ciclo" (con 10 decimales).
.set_TextMatrix(ciclo, 6, Math.Round(Val(tablas16(ciclo, 6)), 10)) 'Imprime el valor de "Error%" de la iteración correspondiente a "ciclo" (con 10 decimales).
.set_TextMatrix(ciclo, 7, Math.Round(Val(tablas16(ciclo, 7)), 10)) 'Imprime el valor de "f'(x)=(f(a+h)-f(a))/h"="f'(a)" de la iteración correspondiente a "ciclo" (con 10 decimales).
Next ciclo 'No es necesario poner "ciclo" en esta línea, pero tampoco es error sintáctico hacerlo. Es simplemente opcional según las reglas sintácticas de Visual Basic 2005.
End With
End If
End If
'CASO 17. SEGUNDA DERIVADA POR FÓRMULAS DE ALTA PRECISIÓN HACIA ADELANTE.
If (ComboBox1.SelectedItem = "Fórmulas de Alta Precisión Hacia Adelante") And (ComboBox2.SelectedItem = "2da. derivada") Then
Dim i, j As Integer '"i" significará "fila" y "j" significará columna, de modo que se trabajará con (i,j)=(fila,columna)
'Establece cuántas filas y columnas tendrá el Grid.
AxMSFlexGrid2.Rows = 2 'Establece 2 filas.
AxMSFlexGrid2.Cols = 8 'Establece 8 columnas.
'Se crea una nueva instancia de la clase Evaluador.
Dim mEval As New Evaluador()
'Se crea una variable tipo string y se le asigna la expresión que se quiere evaluar.
Dim mExpresion As String = TextBox1.Text ' = "X".
'Se crea un objeto StringCollection y se le agregan los parámetros de entrada que usará el método eval.
Dim mParameters As New StringCollection()
mParameters.Add("ByVal X as Double")
'Las funciones a utilizar pertenece al espacio de nombres System.Math.
'se hace necesario entonces, crear un objeto StringCollection y agregar
'el namespace System.Math.
Dim mNameSpaces As New StringCollection()
mNameSpaces.Add("System.Math")
'Se invoca el método PrecompilarFunción y se verifica si se generó correctamente el assembly.
If mEval.PrecompilarAssembly(mExpresion, mParameters, mNameSpaces) Then
'Si el assembly se generó correctamente, se crea un array con los valores de los parametros a evaluar.
'Se invoca el método Evaluar y se asignan los resultados correspondientes.
'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.
With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.
For fila As Integer = 0 To .Rows – 1
With AxMSFlexGrid2
.Row = fila
For columna As Integer = 0 To .Cols – 1
.set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.
Next
End With
Next
End With
'Se comienzan a hacer los cálculos.
'Valores para la fila de resultados.
tablas17(1, 1) = Val(TextBox2.Text) 'Almacena "a".
tablas17(1, 2) = Val(TextBox2.Text) + Val(TextBox3.Text) 'Almacena "a+h".
tablas17(1, 3) = Val(TextBox2.Text) + (2 * Val(TextBox3.Text)) 'Almacena "a+2h".
tablas17(1, 4) = mEval.Evaluar(Val(tablas17(1, 1))) 'Almacena "f(a)".
tablas17(1, 5) = mEval.Evaluar(Val(tablas17(1, 2))) 'Almacena "f(a+h)".
tablas17(1, 6) = mEval.Evaluar(Val(tablas17(1, 3))) 'Almacena "f(a+2h)".
tablas17(1, 7) = (tablas17(1, 6) – (2 * tablas17(1, 5)) + tablas17(1, 4)) / (Val(TextBox3.Text) ^ (2)) 'Almacena "(f(a+2h)-2f(a+h)+f(a))/h^2"="f''(x)".
TextBox8.Text = "segunda" 'Imprime el orden de la derivada.
TextBox9.Text = tablas17(1, 7) 'Este valor de respuesta se iría a imprimir en el TextBox8 como segunda derivada de la función introducida por el usuario.
TextBox10.Text = TextBox3.Text 'Imprime el error utilizado.
'Para indicar que se realizarán operaciones con el objeto AxMSFlexGrid2
'sin necesidad de escribir su nombre.
'De aquí en adelante vienen las impresiones de los valores en las celdas correspondientes.
AxMSFlexGrid2.ForeColor = Color.Blue 'Cambia el color de letra de todas las celdas a azul.
With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.
'Esto servirá para poner color azul a la letra de las celdas donde se muestran los resultados y hacer más grande el ancho de las columnas donde aparecen las celdas de los resultados, pues se estará trabajando con 10 decimales. Nótese que no se involucra la primera fila ni la primera columna debido a que se programan los For comenzando desde 1 y no desde 0.
For fila As Integer = 1 To .Rows – 1 'Para no involucrar la primera fila, se comienza de 1 y no de 0.
With AxMSFlexGrid2
.Row = fila
For columna As Integer = 1 To .Cols – 1 'Para no involucrar la primera columna, se comienza de 1 y no de 0.
.Col = columna
.CellForeColor = Color.Blue 'Por estar dentro del For, cambia el color de letra de todas las celdas a azul (excepto la primera fila y la primera columna).
.set_ColWidth(columna, 1300) 'Por estar deltro del For, le da un ancho de 1300 a cada columna (excepto a la primera columna).
Next
End With
Next
'Establece la alineación del contenido de la columna 0
.set_ColAlignment(0, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)
'Se le ponen los respectivos títulos a cada columna.
.set_TextMatrix(0, 1, "a") 'Imprime "a".
.set_TextMatrix(0, 2, "a+h") 'Imprime "a+h".
.set_TextMatrix(0, 3, "a+2h") 'Imprime "a+2h".
.set_TextMatrix(0, 4, "f(a)") 'Imprime "f(a)".
.set_TextMatrix(0, 5, "f(a+h)") 'Imprime "f(a+h)".
.set_TextMatrix(0, 6, "f(a+2h)") 'Imprime "f(a+2h)".
.set_TextMatrix(0, 7, "f''(x)") 'Imprime "f''(x)=(f(a+2h)-2f(a+h)+f(a))/h^2"
'Impresiones para la fila de resultados.
.set_TextMatrix(1, 1, Math.Round(Val(tablas17(1, 1)), 10)) 'Imprime el valor de "a" (con 10 decimales).
.set_TextMatrix(1, 2, Math.Round(Val(tablas17(1, 2)), 10)) 'Imprime el valor de "a+h" (con 10 decimales).
.set_TextMatrix(1, 3, Math.Round(Val(tablas17(1, 3)), 10)) 'Imprime el valor de "a+2h" (con 10 decimales).
.set_TextMatrix(1, 4, Math.Round(Val(tablas17(1, 4)), 10)) 'Imprime el valor de "f(a)" (con 10 decimales).
.set_TextMatrix(1, 5, Math.Round(Val(tablas17(1, 5)), 10)) 'Imprime el valor de "f(a+h)" (con 10 decimales).
.set_TextMatrix(1, 6, Math.Round(Val(tablas17(1, 6)), 10)) 'Imprime el valor de "f(a+2h)" (con 10 decimales).
.set_TextMatrix(1, 7, Math.Round(Val(tablas17(1, 7)), 10)) 'Imprime el valor de "f''(x)=(f(a+2h)-2f(a+h)+f(a))/h^2" (con 10 decimales).
End With
End If
End If
'CASO 18. TERCERA DERIVADA POR FÓRMULAS DE ALTA PRECISIÓN HACIA ADELANTE.
If (ComboBox1.SelectedItem = "Fórmulas de Alta Precisión Hacia Adelante") And (ComboBox2.SelectedItem = "3ra. derivada") Then
Dim i, j As Integer '"i" significará "fila" y "j" significará columna, de modo que se trabajará con (i,j)=(fila,columna)
'Establece cuántas filas y columnas tendrá el Grid.
AxMSFlexGrid2.Rows = 2 'Establece 2 filas.
AxMSFlexGrid2.Cols = 10 'Establece 10 columnas.
'Se crea una nueva instancia de la clase Evaluador.
Dim mEval As New Evaluador()
'Se crea una variable tipo string y se le asigna la expresión que se quiere evaluar.
Dim mExpresion As String = TextBox1.Text ' = "X".
'Se crea un objeto StringCollection y se le agregan los parámetros de entrada que usará el método eval.
Dim mParameters As New StringCollection()
mParameters.Add("ByVal X as Double")
'Las funciones a utilizar pertenece al espacio de nombres System.Math.
'se hace necesario entonces, crear un objeto StringCollection y agregar
'el namespace System.Math.
Dim mNameSpaces As New StringCollection()
mNameSpaces.Add("System.Math")
'Se invoca el método PrecompilarFunción y se verifica si se generó correctamente el assembly.
If mEval.PrecompilarAssembly(mExpresion, mParameters, mNameSpaces) Then
'Si el assembly se generó correctamente, se crea un array con los valores de los parametros a evaluar.
'Se invoca el método Evaluar y se asignan los resultados correspondientes.
'Se limpian todas las celdas para que no queden impresos resultados de procesos anteriores.
With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.
For fila As Integer = 0 To .Rows – 1
With AxMSFlexGrid2
.Row = fila
For columna As Integer = 0 To .Cols – 1
.set_TextMatrix(fila, columna, "") 'Por estar dentro de los For anidados, con esto se ponen valores String Empty en todas las celdas, de modo que no aparezca nada y queden todas las celdas limpias y sin resultados de cálculos hechos anteriormente.
Next
End With
Next
End With
'Se comienzan a hacer los cálculos.
'Valores para la fila de resultados.
tablas18(1, 1) = Val(TextBox2.Text) 'Almacena "a".
tablas18(1, 2) = Val(TextBox2.Text) + Val(TextBox3.Text) 'Almacena "a+h".
tablas18(1, 3) = Val(TextBox2.Text) + (2 * Val(TextBox3.Text)) 'Almacena "a+2h".
tablas18(1, 4) = Val(TextBox2.Text) + (3 * Val(TextBox3.Text)) 'Almacena "a+3h".
tablas18(1, 5) = mEval.Evaluar(Val(tablas18(1, 1))) 'Almacena "f(a)".
tablas18(1, 6) = mEval.Evaluar(Val(tablas18(1, 2))) 'Almacena "f(a+h)".
tablas18(1, 7) = mEval.Evaluar(Val(tablas18(1, 3))) 'Almacena "f(a+2h)".
tablas18(1, 8) = mEval.Evaluar(Val(tablas18(1, 4))) 'Almacena "f(a+3h)".
tablas18(1, 9) = (tablas18(1, 8) – (3 * tablas18(1, 7)) + (3 * tablas18(1, 6)) – tablas18(1, 5)) / (Val(TextBox3.Text) ^ (3)) 'Almacena "(f(a+3h)-3f(a+2h)+3f(a+h)-f(a))/h^3"="f'''(x)".
TextBox8.Text = "tercera" 'Imprime el orden de la derivada.
TextBox9.Text = tablas18(1, 9) 'Este valor de respuesta se iría a imprimir en el TextBox8 como tercera derivada de la función introducida por el usuario.
TextBox10.Text = TextBox3.Text 'Imprime el error utilizado.
'Para indicar que se realizarán operaciones con el objeto AxMSFlexGrid2
'sin necesidad de escribir su nombre.
'De aquí en adelante vienen las impresiones de los valores en las celdas correspondientes.
AxMSFlexGrid2.ForeColor = Color.Blue 'Cambia el color de letra de todas las celdas a azul.
With AxMSFlexGrid2 'Para no estar poniendo por ejemplo AxMSFlexGrid1.set_ColWidth(0, 0) y así sucesivamente, no estar repitiendo a cada rato "AxMSFlexGrid1." NOTA: Desde el "With" hasta el "End With" solamente deben estarse mandando a imprimir valores a cada una de las celdas, y no estar haciendo cálculos con condiciones If ni nada de eso dentro del "With", pues todos los cálculos y condiciones deben hacerse afuera y venir a esta sección del "With" única y exclusivamente a hacer impresiones.
'Esto servirá para poner color azul a la letra de las celdas donde se muestran los resultados y hacer más grande el ancho de las columnas donde aparecen las celdas de los resultados, pues se estará trabajando con 10 decimales. Nótese que no se involucra la primera fila ni la primera columna debido a que se programan los For comenzando desde 1 y no desde 0.
For fila As Integer = 1 To .Rows – 1 'Para no involucrar la primera fila, se comienza de 1 y no de 0.
With AxMSFlexGrid2
.Row = fila
For columna As Integer = 1 To .Cols – 1 'Para no involucrar la primera columna, se comienza de 1 y no de 0.
.Col = columna
.CellForeColor = Color.Blue 'Por estar dentro del For, cambia el color de letra de todas las celdas a azul (excepto la primera fila y la primera columna).
.set_ColWidth(columna, 1300) 'Por estar deltro del For, le da un ancho de 1300 a cada columna (excepto a la primera columna).
Next
End With
Next
'Establece la alineación del contenido de la columna 0
.set_ColAlignment(0, MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)
'Se le ponen los respectivos títulos a cada columna.
.set_TextMatrix(0, 1, "a") 'Imprime "a".
.set_TextMatrix(0, 2, "a+h") 'Imprime "a+h".
.set_TextMatrix(0, 3, "a+2h") 'Imprime "a+2h".
.set_TextMatrix(0, 4, "a+3h") 'Imprime "a+3h".
.set_TextMatrix(0, 5, "f(a)") 'Imprime "f(a)".
.set_TextMatrix(0, 6, "f(a+h)") 'Imprime "f(a+h)".
.set_TextMatrix(0, 7, "f(a+2h)") 'Imprime "f(a+2h)".
.set_TextMatrix(0, 8, "f(a+3h)") 'Imprime "f(a+3h)".
.set_TextMatrix(0, 9, "f'''(x)") 'Imprime "f'''(x)=(f(a+3h)-3f(a+2h)+3f(a+h)-f(a))/h^3".
'Impresiones para la fila de resultados.
.set_TextMatrix(1, 1, Math.Round(Val(tablas18(1, 1)), 10)) 'Imprime el valor de "a" (con 10 decimales).
.set_TextMatrix(1, 2, Math.Round(Val(tablas18(1, 2)), 10)) 'Imprime el valor de "a+h" (con 10 decimales).
.set_TextMatrix(1, 3, Math.Round(Val(tablas18(1, 3)), 10)) 'Imprime el valor de "a+2h" (con 10 decimales).
.set_TextMatrix(1, 4, Math.Round(Val(tablas18(1, 4)), 10)) 'Imprime el valor de "a+3h" (con 10 decimales).
.set_TextMatrix(1, 5, Math.Round(Val(tablas18(1, 5)), 10)) 'Imprime el valor de "f(a)" (con 10 decimales).
.set_TextMatrix(1, 6, Math.Round(Val(tablas18(1, 6)), 10)) 'Imprime el valor de "f(a+h)" (con 10 decimales).
Página anterior | Volver al principio del trabajo | Página siguiente |