Monografias.com > Sin categoría
Descargar Imprimir Comentar Ver trabajos relacionados

Graficadora de funciones matemáticas en Visual Basic 2005 (página 5)




Enviado por jaimemontoya



Partes: 1, 2, 3, 4, 5, 6

End Sub

End Class

formulariodeinicio.vb

Public Class formulariodeinicio

Private Sub graficar_Click_1(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles graficar.Click

formularioparagraficar.Show()

Me.Hide()

End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

cosfunction.Visible = False

tanfunction.Visible = True

Timer1.Enabled = False

End Sub

Private Sub Timer3_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer3.Tick

tanfunction.Visible = False

parabolefunction.Visible = True

Timer2.Enabled = False

End Sub

Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick

parabolefunction.Visible = False

exponentialfunction.Visible = True

Timer3.Enabled = False

End Sub

Private Sub Timer5_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer5.Tick

exponentialfunction.Visible = False

functionfunction.Visible = True

Timer4.Enabled = False

End Sub

Private Sub Timer6_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer6.Tick

functionfunction.Visible = False

bienvenido.Visible = True

Timer5.Enabled = False

End Sub

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

sinfunction.Visible = False

cosfunction.Visible = True

End Sub

End Class

formulariodesalida.vb

Public Class formulariodesalida

Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

labelsaliendodelprograma.Visible = False

labelcerrando.Visible = True

End Sub

Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

End

End Sub

End Class

formulariometododelafalsaposicion.vb

Imports
System.Text

Imports
System.CodeDom.Compiler

Imports
System.Collections.Specialized 'Sin esto no funcionaría ninguna
instanciación o variable declarada "As New
StringCollection()"

Public Class
formulariometododelafalsaposicion

Public valora
As Double 'Almacenará
el valor a
introducido por el usuario (valor a en la primera
iteración).

Public valorb
As Double 'Almacenará
el valor b introducido por el usuario (valor b en la primera
iteración).

Public valorc
As Double 'Almacenará
el valor c en la primera iteración.

Public celda(151,
10) As Double

Public Sub
encontrarraizconmetodofalsaposicion_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
encontrarraizconmetodofalsaposicion.Click

valora = Val(textboxa.Text)

valorb = Val(textboxb.Text)

Dim respuesta
As Double 'Almacenará
el valor de la respuesta para luego mostrarlo en un textbox al
usuario.

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 = 151 'Establece 21 filas.

AxMSFlexGrid1.Cols = 10 'Establece 10 columnas.

'Determina si el usuario puede modificar
el ancho de columna

'en tiempo de
ejecución

AxMSFlexGrid1.AllowUserResizing =
MSFlexGridLib.AllowUserResizeSettings.flexResizeBoth

TextBox1.Text = ""
'Para que no conserve la respuesta de
cálculos anteriores.

TextBox2.Text = ""
'Para que no conserve la respuesta de
cálculos anteriores.

For j = 1
To 150

celda(j, 0) = j

Next j 'Poner "j" no es necesario, pero tampoco es error de
sintaxis.

'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 = textboxfuncion.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.

Dim mParam() =
{valora} 'La variable "celda(1, 1)"
es la que se le está dando para que la evalúe en la
función
que introdujo el usuario. Significa que en vez que las "x"
introducidas por el usuario, se pondrá el valor de "a" de
la iteración 1, que fue precisamente el que el usuario
introdujo en el TextBox de a.

'Se invoca el método Evaluar y se
asignan los resultados correspondientes.

If Val(textboxa.Text) <
Val(textboxb.Text) Then

'Lo primero será limpiar todos
los valores para
que no quede nada en las celdas de los cálculos que se
hayan hecho anteriormente.

For a As Integer =
1 To 150

celda(a, 1) = 0

celda(a, 2) = 0

celda(a, 3) = 0

celda(a, 4) = 0

celda(a, 5) = 0

celda(a, 6) = 0

celda(a, 7) = 0

celda(a, 8) = 0

celda(a, 9) = 0

Next a

celda(1, 1) = valora 'En
esa celda se almacenará el valor a introducido por el
usuario.

celda(1, 2) = valorb 'En
esa celda se almacenará el valor b introducido por el
usuario.

celda(1, 3) = mEval.Evaluar(mParam) 'En esta celda se pone el valor del "a" de la primera
iteración evaluado en la función.

celda(1, 4) = mEval.Evaluar(valorb) 'Ahora el parámetro que toma la función
es valorb, es decir que en la función, siempre que
aparezca la letra "x", la va a sustituir por el valor de b
introducido por el usuario. En esta celda se pone el valor del
"b" de la primera iteración evaluado en la
función.

valorc = celda(1, 1) – celda(1, 3) * ((celda(1, 2) –
celda(1, 1)) / (celda(1, 4) – celda(1, 3))) 'Aplica la fórmula c=a-f(a)*((b-a)/(f(b)-f(a)))
para encontrar el valor de c. Lo que almacene la variable valorc
se iría a poner en la celda(1, 5).

celda(1, 5) = valorc

celda(1, 6) = mEval.Evaluar(valorc) 'Aplica la función al valor de c de la primera
iteraciónn, contenido en la celda(1, 5).

If (celda(1, 3) * celda(1,
6)) < 0 Then 'Si la multiplicación de f(a) * f(c) da menor
que cero, entonces a en la iteración 2 se mantiene y b
cambiaría por el valor de c de la iteración
1.

celda(2, 1) = celda(1, 1)

Else 'Si la
multiplicación de f(a) * f(c) no da menor que cero,
entonces a en la iteración 2 pasa a ser c y b se
mantendría igual.

celda(2, 1) = valorc

'.set_TextMatrix(2, 1,
Math.Round(celda(1, 5))) 'Si la multiplicación de f(a) *
f(c) da mayor que cero, entonces a pasa a ser el c de la
iteración 1 y b se mantiene.

End If

If celda(2, 1) = celda(1,
1) Then 'Si a de la iteración 2 es igual al c de la
iteración 1, entonces b de la iteración 2
pasará a ser el c de la iteración 1.

celda(2, 2) = celda(1, 5)

Else

celda(2, 2) = celda(1, 2) 'Si la condición no se cumple, b en la segunda
iteración sigue conservando el valor que tenía en
la iteración 1, pues el a de la iteración 2
sería el que habría cambiado su valor.

End If

celda(2, 3) = mEval.Evaluar(celda(2, 1))

celda(2, 4) = mEval.Evaluar(celda(2, 2))

celda(2, 5) = celda(2, 1) – celda(2, 3) * ((celda(2, 2)
– celda(2, 1)) / (celda(2, 4) – celda(2, 3))) 'Aplica la fórmula c=a-f(a)*((b-a)/(f(b)-f(a)))
para encontrar el valor de c en la segunda
iteración.

celda(2, 6) = mEval.Evaluar(celda(2, 5))

celda(2, 7) = Math.Abs(celda(2, 5) – celda(1,
5))

celda(2, 8) = (celda(2, 7) / celda(2, 5)) *
100

If celda(2, 7) <
Val(textboxtolerancia.Text) Then

celda(2, 9) = celda(2, 5)

Else 'De lo
contrario que no se imprima nada en la respuesta en esta
iteración, porque no se conoce aún la respuesta.
Por eso dentro del Else ya no se pone nada, lo que es equivalente
a ni siquiera haber escrito esta línea de
"Else".

End If

For a As Integer =
3 To 150

If celda(2, 7) <
Val(textboxtolerancia.Text) Then

respuesta = celda(2, 9) 'Este valor de respuesta se iría a imprimir en
un TextBox como raíz de la función introducida por
el usuario.

a = 150

Else

If celda(a, 1) = celda(a –
1, 1) Then

celda(a, 2) = celda(a – 1, 5)

Else

celda(a, 2) = celda(a – 1, 2)

End If

celda(a, 3) = mEval.Evaluar(celda(a, 1))

celda(a, 4) = mEval.Evaluar(celda(a, 2))

celda(a, 5) = celda(a, 1) – celda(a, 3) * ((celda(a, 2)
– celda(a, 1)) / (celda(a, 4) – celda(a, 3)))

celda(a, 6) = mEval.Evaluar(celda(a, 5))

celda(a, 7) = Math.Abs(celda(a, 5) – celda(a – 1,
5))

celda(a, 8) = (celda(a, 7) / celda(a, 5)) *
100

If celda(a, 7) <
Val(textboxtolerancia.Text) Then

celda(a, 9) = celda(a, 5)

respuesta = celda(a, 9)

a = 150 'Porque si la
tolerancia es
menor que el error, ya se tiene la respuesta y que se salga
inmediatamente del For.

Else

End If

End If

Next a

Else

MsgBox("El punto b debe ser
mayor que el punto a.", MsgBoxStyle.OkOnly,
"Graficador de Funciones Matemáticas")

End If

Else

MsgBox("Introduzca una
función válida.",
MsgBoxStyle.OkOnly, "No se ha
generado el Assembly")

End If

'Para indicar que se realizarán
operaciones
con el objeto flxTabla

'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 ha hacer impresiones.

'Establece la alineación del
contenido de la columna 0

.set_ColAlignment(0,
MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)

'establece el ancho en pixels de la
comumna 1

' .set_ColWidth(1, 1500)

.set_TextMatrix(0, 0, "Iteración")

.set_TextMatrix(0, 1, "a")

.set_TextMatrix(0, 2, "b")

.set_TextMatrix(0, 3, "f(a)")

.set_TextMatrix(0, 4, "f(b)")

.set_TextMatrix(0, 5, "c")

.set_TextMatrix(0, 6, "f(c)")

.set_TextMatrix(0, 7, "Error")

.set_TextMatrix(0, 8, "Error %")

.set_TextMatrix(0, 9, "Respuesta")

For i = 1
To 150

.set_TextMatrix(i, 0, i)

Next i

'Lo primero será imprimir todos
los valores inicializados con cero para que no quede nada en las
celdas de los cálculos que se hayan hecho
anriormente.

For a As Integer =
1 To 150

.set_TextMatrix(a, 1, Math.Round(celda(a, 1),
6))

.set_TextMatrix(a, 2, Math.Round(celda(a, 2),
6))

.set_TextMatrix(a, 3, Math.Round(celda(a, 3),
6))

.set_TextMatrix(a, 4, Math.Round(celda(a, 4),
6))

.set_TextMatrix(a, 5, Math.Round(celda(a, 5),
6))

.set_TextMatrix(a, 6, Math.Round(celda(a, 6),
6))

.set_TextMatrix(a, 7, Math.Round(celda(a, 7),
6))

.set_TextMatrix(a, 8, Math.Round(celda(a, 8),
6))

.set_TextMatrix(a, 9, Math.Round(celda(a, 9),
6))

Next

.set_TextMatrix(1, 1, Math.Round(Val(textboxa.Text),
6)) 'Almacena el valor de a en la
primera iteración (con 6 decimales), que sería el
valor que el usuario introdujo en el TextBox, pero con 6 cifras
significativas, lo cual se programa en el
argumento del
Math.Round(valorasdouble,digitossignificativosasinteger).

.set_TextMatrix(1, 2, Math.Round(Val(textboxb.Text),
6)) 'Almacena el valor de b en la
primera iteración (con 6 decimales), que sería el
valor que el usuario introdujo en el TextBox.

.set_TextMatrix(1, 3, Math.Round(celda(1, 3), 6))
'Almacena el valor de f(a) en la primera
iteración (con 6 decimales), que sería el valor de
"a" introducido por el usuario, pero evaluado en la
función también introducida por el
usuario.

.set_TextMatrix(1, 4, Math.Round(celda(1, 4), 6))
'Almacena el valor de f(b) en la primera
iteración (con 6 decimales), que sería el valor de
"b" introducido por el usuario, pero evaluado en la
función también introducida por el
usuario.

.set_TextMatrix(1, 5, Math.Round(celda(1, 5), 6))
'Almacena el valor de c en la primera
iteración (con 6 decimales), que sería el valor
obtenido mediante la fórmula:
c=a-f(a)*((b-a)/(f(b)-f(a))).

.set_TextMatrix(1, 6, Math.Round(celda(1, 6), 6))
'Almacena el valor de f(c) en la primera
iteración (con 6 decimales).

.set_TextMatrix(2, 1, Math.Round(celda(2, 1), 6))
'Almacena el valor de a en la segunda
iteración (con 6 decimales).

.set_TextMatrix(2, 2, Math.Round(celda(2, 2), 6))
'Almacena el valor de b en la segunda
iteración (con 6 decimales).

.set_TextMatrix(2, 3, Math.Round(celda(2, 3), 6))
'Almacena el valor de f(a) en la segunda
iteración (con 6 decimales).

.set_TextMatrix(2, 4, Math.Round(celda(2, 4), 6))
'Almacena el valor de f(b) en la segunda
iteración (con 6 decimales).

.set_TextMatrix(2, 5, Math.Round(celda(2, 5), 6))
'Almacena el valor de c en la segunda
iteración (con 6 decimales).

.set_TextMatrix(2, 6, Math.Round(celda(2, 6), 6))
'Almacena el valor de f(c) en la segunda
iteración (con 6 decimales).

.set_TextMatrix(2, 7, Math.Round(celda(2, 7), 6))
'Almacena el valor de Error en la segunda
iteración (con 6 decimales).

.set_TextMatrix(2, 8, Math.Round(celda(2, 8), 6))
'Almacena el valor de Error % en la segunda
iteración (con 6 decimales).

.set_TextMatrix(2, 9, Math.Round(celda(2, 9), 6))
'Almacena el valor de Respuesta en la
segunda iteración (con 6 decimales).

For a As Integer =
3 To 150

.set_TextMatrix(a, 1, Math.Round(celda(a, 1),
6))

.set_TextMatrix(a, 2, Math.Round(celda(a, 2),
6))

.set_TextMatrix(a, 3, Math.Round(celda(a, 3),
6))

.set_TextMatrix(a, 4, Math.Round(celda(a, 4),
6))

.set_TextMatrix(a, 5, Math.Round(celda(a, 5),
6))

.set_TextMatrix(a, 6, Math.Round(celda(a, 6),
6))

.set_TextMatrix(a, 7, Math.Round(celda(a, 7),
6))

.set_TextMatrix(a, 8, Math.Round(celda(a, 8),
6))

If respuesta <>
0 Then 'Porque si da cero es porque no ha encontrado la
respuesta, pues automáticamente la variable toma el valor
de cero por haberse declarado como Double, y si no encuentra
respuesta, permanece como cero. Por eso la respuesta se ha
encontrado sólo cuando respuesta es diferente de
cero.

TextBox1.ForeColor = Color.Green 'Para que lo que haya dentro del TextBox1 sea color
verde.

TextBox2.ForeColor = Color.Green 'Para que lo que haya dentro del TextBox2 sea color
verde.

TextBox1.Text = respuesta

TextBox2.Text = Val(textboxtolerancia.Text)

End If

Next a

End With

End Sub

Private Sub regresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles regresar.Click

formularioparagraficar.Show()

Me.Hide()

End Sub

Private Sub textboxa_KeyPress(ByVal sender As Object, ByVal e As System.Windows.Forms.KeyPressEventArgs)
Handles
textboxa.KeyPress

If (Asc(e.KeyChar) >=
48 And Asc(e.KeyChar)
<= 57) Or
Asc(e.KeyChar) = 45 Or
Asc(e.KeyChar) = 46 Or
Asc(e.KeyChar) = 8 Then

Else

Beep() 'Emite sonido.

e.KeyChar = ""
'Reemplaza la tecla digitada con el valor
de nada para que no se puedan introducir caracteres
inválidos.

End If

End Sub

Private Sub textboxb_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles textboxb.KeyPress

If (Asc(e.KeyChar) >=
48 And Asc(e.KeyChar)
<= 57) Or
Asc(e.KeyChar) = 45 Or
Asc(e.KeyChar) = 46 Or
Asc(e.KeyChar) = 8 Then

Else

Beep() 'Emite
sonido.

e.KeyChar = ""
'Reemplaza la tecla digitada con el valor
de nada para que no se puedan introducir caracteres
inválidos.

End If

End Sub

Private Sub
textboxtolerancia_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
textboxtolerancia.KeyPress

If (Asc(e.KeyChar) >=
48 And Asc(e.KeyChar)
<= 57) Or
Asc(e.KeyChar) = 46 Or
Asc(e.KeyChar) = 8 Then
'Solamente permite los dígitos del 0
al 9 (ASCII 48-57) y el
punto (".") (ASCII 46).

Else

Beep() 'Emite
sonido.

e.KeyChar = ""
'Reemplaza la tecla digitada con el valor
de nada para que no se puedan introducir caracteres
inválidos.

End If

End Sub

End Class

formulariometodonewtonraphson.vb

Imports
System.Text

Imports
System.CodeDom.Compiler

Imports
System.Collections.Specialized 'Sin esto no funcionaría ninguna
instanciación o variable declarada "As New
StringCollection()"

Public Class
formulariometodonewtonraphson

Public valorx0
As Double 'Almacenará
el valor Xo introducido por el usuario (valor Xo) en la primera
iteración.

Public valorx1
As Double 'Almacenará
el valor X1 en la primera iteración.

Public celda(151, 8)
As Double 'Establece
cuántas filas y columnas tendrá el Grid.

Private Sub
encontrarraizconmetodonewtonraphson_Click(ByVal
sender As
System.Object, ByVal
e As
System.EventArgs) Handles
encontrarraizconmetodonewtonraphson.Click

valorx0 = Val(textboxx0.Text)

Dim respuesta
As Double 'Almacenará
el valor de la respuesta para luego mostrarlo en un textbox al
usuario.

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 = 151 'Establece 21 filas.

AxMSFlexGrid1.Cols = 8 'Establece 8 columnas.

'Determina si el usuario puede modificar
el ancho de columna

'en tiempo de
ejecución

AxMSFlexGrid1.AllowUserResizing =
MSFlexGridLib.AllowUserResizeSettings.flexResizeBoth

TextBox1.Text = ""
'Para que no conserve la respuesta de
cálculos anteriores.

TextBox2.Text = ""
'Para que no conserve la respuesta de
cálculos anteriores.

For j = 1
To 150

celda(j, 0) = j

Next j 'Poner "j" no es necesario, pero tampoco es error de
sintaxis.

'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 = textboxfuncion.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.

Dim mParam() =
{valorx0} 'La variable "celda(1, 1)"
es la que se le está dando para que la evalúe en la
función que introdujo el usuario. Significa que en vez que
las "x" introducidas por el usuario, se pondrá el valor de
"Xo" de la iteración 1, que fue precisamente el que el
usuario introdujo en el TextBox de Xo.

'Se invoca el método Evaluar y se
asignan los resultados correspondientes.

'Lo primero será limpiar todos
los valores para que no quede nada en las celdas de los
cálculos que se hayan hecho anriormente.

For a As Integer =
1 To 150

celda(a, 1) = 0

celda(a, 2) = 0

celda(a, 3) = 0

celda(a, 4) = 0

celda(a, 5) = 0

celda(a, 6) = 0

celda(a, 7) = 0

Next

celda(1, 1) = valorx0 'En
esa celda se almacenará el valor Xo introducido por el
usuario.

celda(1, 2) = mEval.Evaluar(valorx0) 'Dentro del paréntesis pudo haberse puesto
"mParam" o "valorx0" y el resultado es el mismo. El
parámetro que toma la función es Xo, es decir que
en la función, siempre que aparezca la letra "x", la va a
sustituir por el valor de Xo introducido por el usuario. En esta
celda se pone el valor del "Xo" de la primera iteración
evaluado en la función.

celda(1, 3) = (mEval.Evaluar(valorx0 + 0.000001) –
mEval.Evaluar(valorx0)) / 0.000001 'Se le saca la derivada al f(Xo) de la iteración
1. Para sacar la derivada, se utiliza el Teorema de Límites,
con la siguiente fórmula: (f(Xo + Deltax) – f(Xo))/Deltax,
donde a Deltax se le ha dado el valor de 0.000001. Se recomienda
darle entre 0.001 y .000001 a Deltax para que la
aproximación de la derivada sea buena.

celda(1, 4) = celda(1, 1) – (celda(1, 2) / celda(1,
3)) 'celda(1, 4) contendrá el
valor de X1, el cual se obtiene mediante la fórmula
X1=Xo-(f(Xo)/f'(Xo)).

celda(2, 1) = celda(1, 4) 'El Xo de la iteración 2 es el X1 de la
iteración 1.

celda(2, 2) = mEval.Evaluar(celda(2, 1))
'El f(Xo) de la segunda iteración es
el valor de la función evaluada en el Xo de la segunda
iteración.

celda(2, 3) = (mEval.Evaluar(celda(2, 1) + 0.000001) –
mEval.Evaluar(celda(2, 1))) / 0.000001 'Se le saca la derivada al f(Xo) de la iteración
2. Para sacar la derivada, se utiliza el Teorema de
Límites, con la siguiente fórmula: (f(Xo + Deltax)
– f(Xo))/Deltax, donde a Deltax se le ha dado el valor de
0.000001. Se recomienda que a Deltax se le dé un valor
entre 0.001 y 0.000001 para que la aproximación de la
derivada sea buena.

celda(2, 4) = celda(2, 1) – (celda(2, 2) / celda(2,
3)) 'celda(2, 4) contendrá el
valor del X1 de la segunda iteración, el cual se obtiene
mediante la fórmula X1=Xo-(f(Xo)/f'(Xo)).

celda(2, 5) = Math.Abs(celda(2, 4) – celda(1,
4))

celda(2, 6) = Math.Abs((celda(2, 5) / celda(2, 4)) *
100)

If celda(2, 5) <
Val(textboxtolerancia.Text) Then

celda(2, 7) = celda(2, 4)

Else 'De lo
contrario que no se imprima nada en la respuesta en esta
iteración, porque no se conoce aún la respuesta.
Por eso dentro del Else ya no se pone nada, lo que es equivalente
a ni siquiera haber escrito esta línea de
"Else".

End If

For a As Integer =
3 To 150

If celda(2, 5) <
Val(textboxtolerancia.Text) Then 'Si esto sucede es
porque ya se ha encontrado la respuesta.

respuesta = celda(2, 7) 'Este valor de respuesta se iría a imprimir en
un TextBox como raíz de la función introducida por
el usuario.

a = 150 'Esto hará
que la próxima iteración sea la 151, por lo cual ya
no se va a entrar al For, pues ya se ha encontrado la
respuesta.

Else

celda(a, 1) = celda(a – 1, 4)

celda(a, 2) = mEval.Evaluar(celda(a, 1))

celda(a, 3) = (mEval.Evaluar(celda(a, 1) + 0.000001) –
mEval.Evaluar(celda(a, 1))) / 0.000001

celda(a, 4) = celda(a, 1) – (celda(a, 2) / celda(a,
3))

celda(a, 5) = Math.Abs(celda(a, 4) – celda(a – 1,
4))

celda(a, 6) = Math.Abs((celda(a, 5) / celda(a, 4)) *
100)

If celda(a, 5) <
Val(textboxtolerancia.Text) Then

celda(a, 7) = celda(a, 4)

respuesta = celda(a, 7)

a = 150 'Porque si la
tolerancia es menor que el error, ya se tiene la respuesta y que
ya no vuelva a entrar a una siguiente iteración, pues
sería la 151 y el For llega hasta 150.

Else

End If

End If

Next a

Else

MsgBox("Introduzca una
función válida.",
MsgBoxStyle.OkOnly, "No se ha
generado el Assembly")

End If

'Para indicar que se realizarán
operaciones con el objeto flxTabla

'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 ha hacer impresiones.

'Establece la alineación del
contenido de la columna 0

.set_ColAlignment(0,
MSFlexGridLib.AlignmentSettings.flexAlignCenterCenter)

.set_TextMatrix(0, 0, "Iteración")

.set_TextMatrix(0, 1, "Xo")

.set_TextMatrix(0, 2, "f(Xo)")

.set_TextMatrix(0, 3, "f'(Xo)")

.set_TextMatrix(0, 4, "X1")

.set_TextMatrix(0, 5, "Error")

.set_TextMatrix(0, 6, "Error %")

.set_TextMatrix(0, 7, "Respuesta")

For i = 1
To 150

.set_TextMatrix(i, 0, i)

Next i

'Lo primero será imprimir todos
los valores inicializados con cero para que no quede nada en las
celdas de los cálculos que se hayan hecho
anriormente.

For a As Integer =
1 To 150

.set_TextMatrix(a, 1, Math.Round(celda(a, 1),
6))

.set_TextMatrix(a, 2, Math.Round(celda(a, 2),
6))

.set_TextMatrix(a, 3, Math.Round(celda(a, 3),
6))

.set_TextMatrix(a, 4, Math.Round(celda(a, 4),
6))

.set_TextMatrix(a, 5, Math.Round(celda(a, 5),
6))

.set_TextMatrix(a, 6, Math.Round(celda(a, 6),
6))

.set_TextMatrix(a, 7, Math.Round(celda(a, 6),
6))

Next

.set_TextMatrix(1, 1, Math.Round(Val(textboxx0.Text),
6)) 'En vez de "Val(textboxx0.Text)
se pudo haber puesto "celda(1, 1)" o bien "valorx0", que son la
misma cosa. Almacena el valor de Xo de la primera
iteración (con 6 cifras significativas), que sería
el valor que el usuario introdujo en el TextBox, pero con 6
cifras significativas, lo cual se programa en el argumento del
Math.Round(valorasdouble,digitossignificativosasinteger).

.set_TextMatrix(1, 2, Math.Round(celda(1, 2), 6))
'Almacena el valor de f(Xo) en la primera
iteración (con 6 cifras significativas).

.set_TextMatrix(1, 3, Math.Round(celda(1, 3), 6))
'Almacena el valor de f'(Xo) en la primera
iteración (con 6 cifras significativas).

.set_TextMatrix(1, 4, Math.Round(celda(1, 4), 6))
'Almacena el valor de X1 en la primera
iteración (con 6 cifras significativas).

.set_TextMatrix(2, 1, Math.Round(celda(2, 1), 6))
'Almacena el valor de Xo de la segunda
iteración.

.set_TextMatrix(2, 2, Math.Round(celda(2, 2), 6))
'Alacena el valor de f(Xo) de la segunda
iteración.

.set_TextMatrix(2, 3, Math.Round(celda(2, 3), 6))
'Alacena el valor de f'(Xo) de la segunda
iteración.

.set_TextMatrix(2, 4, Math.Round(celda(2, 4), 6))
'Alacena el valor de X1 de la segunda
iteración.

.set_TextMatrix(2, 5, Math.Round(celda(2, 5), 6))
'Alacena el valor de Error de la segunda
iteración.

.set_TextMatrix(2, 6, Math.Round(celda(2, 6), 6))
'Alacena el valor de Error % de la segunda
iteración.

.set_TextMatrix(2, 7, Math.Round(celda(2, 7), 6))
'Alacena el valor de Respuesta de la
segunda iteración.

For a As Integer =
3 To 150

.set_TextMatrix(a, 1, Math.Round(celda(a, 1),
6))

.set_TextMatrix(a, 2, Math.Round(celda(a, 2),
6))

.set_TextMatrix(a, 3, Math.Round(celda(a, 3),
6))

.set_TextMatrix(a, 4, Math.Round(celda(a, 4),
6))

.set_TextMatrix(a, 5, Math.Round(celda(a, 5),
6))

.set_TextMatrix(a, 6, Math.Round(celda(a, 6),
6))

.set_TextMatrix(a, 7, Math.Round(celda(a, 7),
6))

If respuesta <>
0 Then 'Porque si da cero es porque no ha encontrado la
respuesta, pues automáticamente la variable toma el valor
de cero por haberse declarado como Double, y si no encuentra
respuesta, permanece como cero. Por eso la respuesta se ha
encontrado sólo cuando respuesta es diferente de
cero.

TextBox1.ForeColor = Color.Green 'Para que lo que haya dentro del TextBox1 sea color
verde.

TextBox2.ForeColor = Color.Green 'Para que lo que haya dentro del TextBox2 sea color
verde.

TextBox1.Text = respuesta

TextBox2.Text = Val(textboxtolerancia.Text)

End If

Next a

End With

End Sub

Private Sub regresar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles regresar.Click

formularioparagraficar.Show()

Me.Hide()

End Sub

Private Sub textboxxo_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles textboxx0.KeyPress

If (Asc(e.KeyChar) >=
48 And Asc(e.KeyChar)
<= 57) Or
Asc(e.KeyChar) = 45 Or
Asc(e.KeyChar) = 46 Or
Asc(e.KeyChar) = 8 Then

Else

Beep() 'Emite
sonido.

e.KeyChar = ""
'Reemplaza la tecla digitada con el valor
de nada para que no se puedan introducir caracteres
inválidos.

End If

End Sub

Private Sub
textboxtolerancia_KeyPress(ByVal sender As Object, ByVal e As
System.Windows.Forms.KeyPressEventArgs) Handles
textboxtolerancia.KeyPress

If (Asc(e.KeyChar) >=
48 And Asc(e.KeyChar)
<= 57) Or
Asc(e.KeyChar) = 46 Or
Asc(e.KeyChar) = 8 Then
'Solamente permite los dígitos del 0
al 9 (ASCII 48-57) y el punto (".") (ASCII 46).

Else

Beep() 'Emite
sonido.

e.KeyChar = ""
'Reemplaza la tecla digitada con el valor
de nada para que no se puedan introducir caracteres
inválidos.

End If

End Sub

End Class

formularioparagraficar.vb

Imports
System.Text

Imports
System.CodeDom.Compiler

Imports
System.Collections.Specialized

Public Class formularioparagraficar

Public grafico
As Graphics

Public xminimo
As Double

Public xmaximo
As Double

Public yminimo
As Double

Public ymaximo
As Double

Public coordenaday
As Double

Public
coordenadaxadaptada As
Integer

Public
coordenadayadaptada As
Integer

Public Sub graficar_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles graficar.Click

xminimo = Val(textboxxminimo.Text) 'Variable ya declarada como Public.

xmaximo = Val(textboxxmaximo.Text) 'Variable ya declarada como Public.

yminimo = Val(textboxyminimo.Text) 'Variable ya declarada como Public.

ymaximo = Val(textboxymaximo.Text) 'Variable ya declarada como Public.

Dim cerox
As Integer = ((400) / (xmaximo – xminimo)) *
(-xminimo) '400 son los pixeles que
hay en el eje x. Esos 400 pixeles se dividirán entre el
número de unidades que se mostrarán en la escala x y el
resultado de eso será multiplicado por -xminimo para que
el punto de origen en x se muestre correctamente.

Dim ceroy
As Integer = ((400) / (yminimo – ymaximo)) *
(-ymaximo) '400 son los pixeles que
hay en el eje y. Esos 400 pixeles se dividirán entre el
número de unidades que se mostrarán en la escala y
y el resultado de eso será multiplicado por -ymaximo para
que el punto de origen en y se muestra
correctamente

Dim rayadeescala
As Integer

grafico = PictureBox1.CreateGraphics

grafico.Clear(Color.Black) 'Para que cada vez que se haga clic en el botón
Graficar, que borre el gráfico que estaba anteriormente
antes de crear uno nuevo, para que no quede un gráfico
sobre otro.

If yminimo < 0
Then 'Porque
si la escala mínima negativa de las y fuera cero o fuera
positiva, no se verá la línea del eje de las x al
graficar. Pero en caso de ser menor que 0, entonces se va a
graficar la línea horizontal del eje de las x, que es lo
que se programa con la siguiente línea.

grafico.DrawLine(Pens.White, 0, ceroy, 400,
ceroy) 'Trazo de la línea
blanca horizontal (eje x).

End If

If xmaximo > 0
Then 'Porque
si la escala máxima positiva de las x fuera cero o
negativa, no se verá la línea del eje de las y al
graficar. Pero en caso de que xmaximo sea mayor que cero,
sí tiene que verse la línea vertical del eje de las
y, que es lo que se programa con la siguiente
línea.

grafico.DrawLine(Pens.White, cerox, 0, cerox,
400) 'Trazo de la línea
blanca vertical (eje y).

End If

If yminimo < 0
Then 'Porque
si la escala mínima de las y fuera cero o fuera positiva,
no se verá la línea del eje de las x al graficar, y
por lo tanto no se verían las rayitas de las escalas en el
eje de las x. Pero en caso de que yminimo fuera menor que cero,
sí tendría que verse el eje x y por lo tanto las
rayitas de escala en el eje x, y eso es lo que se programa con
los dos For que vienen a continuación.

'Este For es para poner las rayitas de
escala del eje x positivo.

For a As Integer =
1 To xmaximo
'Al no ponerle Step al For se sabe que va
automáticamente de 1 en 1. Se hacen las rayitas del eje x
positivo, desde el 0 hasta el valor máximo de la escala de
las x. El ciclo va desde uno porque no hace falta ponerlo desde
cero, pues una raya en el origen ni siquiera se vería
porque estaría ubicada sobre el eje y.

rayadeescala = (((400) / (xmaximo – xminimo)) * (a –
xminimo)) 'Esta fórmula es
casi la misma que se utilizó para determinar el cerox, con
la única diferencia que ahora antes del -xminimo se le
antepone la variable a. Sin la a, pondría el punto del
origen del eje x. Pero como la a va a ir aumentando de 1 en 1 por
el For, eso hará que en cada ciclo se vaya dando un
desplazamiento de uno en uno en la escala positiva del eje de las
x (y hacia la derecha conforme los ciclos van cambiando), y
será esa la ubicación en la que tendrán que
imprimirse las rayitas del eje de las x positivo.

grafico.DrawLine(Pens.White, rayadeescala, ceroy – 7,
rayadeescala, ceroy + 7) 'Los
números 7 significan el número de pixeles de la
rayita de la escala tanto hacia abajo como hacia arriba del eje
x, de modo que la longitud total de la rayita va a ser de 14
pixeles y por supuesto que va a ser una rayita vertical que
cortará perpendicularmente el eje de las x. rayadeescala
es la variable que almacena la ubicación en el eje x en la
que se pondrá la línea de la rayita, y ceroy
más/menos 7 es porque en el ceroy más/menos 7 (que
corresponde a la ubicación de la línea horizontal
del eje de las x) es donde se van a posicionar las rayitas
verticales de la escala.

Next

'Este For es para poner las rayitas de
escala del eje x negativo.

For a As Integer =
xminimo To 0
Step 1 'Al no ponerle Step al For se sabe que va
automáticamente de 1 en 1. Se hacen las rayitas del eje x
negativo, desde el valor mínimo en la escala de las x
hasta 0.

rayadeescala = (((400) / (xmaximo – xminimo)) * (a –
xminimo)) 'Esta fórmula es
casi la misma que se utilizó para determinar el cerox, con
la única diferencia que ahora antes del -xminimo se le
antepone la variable a. Sin la a, pondría el punto del
origen del eje x. Pero como la a va a ir aumentando de 1 en 1 por
el For, eso hará que en cada ciclo se vaya dando un
desplazamiento de uno en uno en la escala negativa del eje de las
x (y hacia la derecha conforme los ciclos van cambiando), y
será esa la ubicación en la que tendrán que
imprimirse las rayitas del eje de las x negavivo.

grafico.DrawLine(Pens.White, rayadeescala, ceroy – 7,
rayadeescala, ceroy + 7) 'Los
números 7 significan el número de pixeles de la
rayita de la escala tanto hacia abajo como hacia arriba del eje
x, de modo que la longitud total de la rayita va a ser de 14
pixeles y por supuesto que va a ser una rayita vertical que
cortará perpendicularmente el eje de las x. rayadeescala
es la variable que almacena la ubicación en el eje x en la
que se pondrá la línea de la rayita, y ceroy
más/menos 7 es porque en el ceroy más/menos 7 (que
corresponde a la ubicación de la línea horizontal
del eje de las x) es donde se van a posicionar las
rayitas.

Next

End If

If xmaximo > 0
Then 'Porque
si la escala máxima positiva de las x fuera cero o fuera
negativa, no se verá la línea del eje de las y al
graficar, y por lo tanto no se verían las rayitas de las
escalas en el eje de las y. Pero en el caso de que xmaximo sea
mayor que cero, sí tiene que verse la línea
vertical del eje de las y y las rayitas horizontales de las
escalas sobre el eje positivo de las y, que es lo que se programa
con el siguiente For.

'Este For es para poner las rayitas de
escala del eje y positivo.

For a As Integer =
1 To ymaximo
'Se hacen las rayitas del eje y positivo,
desde el 0 hasta el valor máximo de la escala de las y. El
ciclo va desde uno porque no hace falta ponerlo desde cero, pues
una raya en el origen ni siquiera se vería porque
estaría ubicada sobre el eje x.

rayadeescala = (((400) / (yminimo – ymaximo)) * (a –
ymaximo)) 'Esta fórmula es
casi la misma que se utilizó para determinar el ceroy, con
la única diferencia que ahora antes del -ymaximo se le
antepone la variable a. Sin la a, pondría el punto del
origen del eje y. Pero como la a va a ir aumentando de 1 en 1 por
el For, eso hará que en cada ciclo se vaya dando un
desplazamiento de uno en uno en la escala positiva del eje de las
y (y hacia arriba conforme los ciclos van cambiando), y
será esa la ubicación en la que tendrán que
imprimirse las rayitas del eje de las y positivo.

grafico.DrawLine(Pens.White, cerox – 7, rayadeescala,
cerox + 7, rayadeescala) 'Los
número 7 significan el número de pixeles de la
rayita de la escala tanto hacia la izquierda como hacia la
derecha del eje y, de modo que la longitud total de la rayita va
a ser de 14 pixeles y porsupuesto que va a ser una rayita
horizontal que cortará perpendicularmente el eje de las y.
rayadeescala es la variable que almacena la ubicación en
el eje y en la que se pondrá la línea de la rayita,
y cerox más/menos 7 (que corresponde a la ubicación
de la línea vertical del eje de las y) es donde se van a
posicionar las rayitas horizontales de la escala.

Next

'Este For es para poner las rayitas de
escala del eje y negativo.

For a As Integer =
yminimo To 0
'Se hacen las rayitas del eje y negativo,
desde el valor mínimo de la escala del eje de las y hasta
0. Al no ponerle Step al For se sabe que va
automáticamente de 1 en 1.

rayadeescala = (((400) / (yminimo – ymaximo)) * (a –
ymaximo)) 'Esta fórmula es
casi la misma que se utilizó para determinar el ceroy, con
la única diferencia que ahora antes del -ymaximo se le
antepone la variable a. Sin la a, pondría el punto del
origen del eje y. Pero como la a va a ir aumentando de 1 en 1 por
el For, eso hará que en cada ciclo se vaya dando un
desplazamiento de uno en uno en la escala negativa del eje de las
y (y hacia arriba conforme los ciclos van cambiando), y
será esa la ubicación en la que tendrán que
imprimirse las rayitas del eje de las y positivo.

grafico.DrawLine(Pens.White, cerox – 7, rayadeescala,
cerox + 7, rayadeescala) 'Los
número 7 significan el número de pixeles de la
rayita de la escala tanto hacia la izquierda como hacia la
derecha del eje y, de modo que la longitud total de la rayita va
a ser de 14 pixeles y porsupuesto que va a ser una rayita
horizontal que cortará perpendicularmente el eje de las y.
rayadeescala es la variable que almacena la ubicación en
el eje y en la que se pondrá la línea de la rayita,
y cerox más/menos 7 (que corresponde a la ubicación
de la línea vertical del eje de las y) es donde se van a
posicionar las rayitas horizontales de la escala.

Next

End If

'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

Dim mExpresion
As String = TextBox1.Text ' = "X"

'Se crea un objeto StringCollection y se
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 pertenecen 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.

'Hasta este momento se tiene el plano
cartesiano con las rayitas de las escalas correspondientes. De
aquí en adelante el código
es para graficar la función.

For coordenadax
As Double = xminimo To xmaximo Step 0.001 'Por ejemplo, si el usuario puso en la escala x desde
-5 hasta 5, entonces con un Step de 0.01 el For iría
así: -5, -4.99, -4.98, -4.97,…0, 0.01, 0.02,
0.03,…4.97, 4.98, 4.99,5. NOTA: Si el Step se pone de 0.01, se
graficarán menos puntos y dependiendo de la
función, podrían verse puntos separados. Si se pone
el Step de 0.001, habrían muchas más iteraciones,
pero más nitidez en la gráfica. Si se pone de
0.0001, hasta se vería el trazado, pues iría mucho
más lento por ser damasiadas iteraciones, pero mucha mayor
nitidez en las gráficas. Así sucesivamente. Si
fuera con 0.0001 y la escala fuera de -5 a 5, iría la
iteración 1 del For con -5, la iteración 2 con
-4.9999, la 3 con -4.9998,… hasta llegar a 5.

Dim mParam() =
{coordenadax} 'la variable
"coordenadax" es la que se le está dando para que la
evalúe en la función que introdujo el usuario.
Significa que en vez que las "x" escritas por el usuario al
introducir la función, se pondrá el valor de la
variable "coordenadax", que irá del valor mínimo de
la escala de x hasta el valor máximo de la escala de x,
con un incremento de 0.001 en 0.001, de acuerdo a como se ha
programado en este For.

'Se invoca el método Evaluar y se
muestra el resultado

coordenaday = mEval.Evaluar(mParam) 'El valor de x que se está trabajando en la
iteración que corresponda (almacenado en la variable
coordenadax ó mParam), se evalúa en la
función que el usuario introdujo. Eso dará el valor
de y, de modo que ya se tendrá un par coordenado (x, y),
que será el que se va a graficar. Esto mismo se
hará durante cada una de las iteraciones, de manera que el
gráfico de muchos puntos continuos (x, y) darán
origen al gráfico, tal como se haría al graficar en
papel, que se hace una tabla con varios puntos y esos puntos
seguiditos son los que generan la gráfica.

coordenadaxadaptada = (((400) / (xmaximo – xminimo)) *
(coordenadax – xminimo)) 'Esta
fórmula es casi la misma que se utilizó para
determinar el cerox, con la única diferencia que ahora
antes del -xminimo se le antepone la variable coordenadax. Sin la
coordenadax antepuesta, pondría el punto del origen del
eje x. Pero como la xmaximo estará ahí, va a ir
modificando o cambiando el punto de coordenada en el eje x poco a
poco dentro del For, para ir cubriendo los 400 pixeles que tiene
de longitud el eje x. Entre menor sea el Step del For, más
iteraciones habrán y más lentamente se irá
desplazando en el eje x de izquierda a derecha, desde el borde
izquierdo del PictureBox hasta el borde derecho en el eje x,
junto con lo que corresponda en coordenadaadaptaday. Así
es como se irá graficando. En pocas palabras, los 400
pixeles del eje x se dividen entre el número de
iteraciones y ahí va saliendo cada puntito en el que
habrá que graficar.

coordenadayadaptada = (((400) / (yminimo – ymaximo)) *
(coordenaday – ymaximo)) 'Esta
fórmula es casi la misma que se utilizó para
determinar el ceroy, con la única diferencia que ahora
antes del -ymaximo se le antepone la variable coordenaday. Sin la
coordenaday antepuesta, pondría el punto del origen del
eje y. Pero como la ymaximo estará ahí, va a ir
modificando o cambiando el punto de coordenada en el eje y poco a
poco dentro del For, para ir cubriendo los 400 pixeles que tiene
de longitud el eje y. Entre menor sea el Step del For, más
iteraciones habrán y más lentamente se irá
desplazando en el eje y de abajo hacia arriba o de arriba hacia
abajo en el PictureBox, dependiendo del comportamiento
de la función, junto con lo que corresponda en
coordenadaadaptadx. Así es como se irá graficando.
Dependiendo de las escalas xminimo, xmaximo, yminimo y ymaximo,
algunos puntos o valores en el eje y que resulten de la
fórmula programada en esta línea, podrían no
verse en el TextBox. Por ejemplo, si la función es
"f(x)=x^(2)" y el usuario elije xminimo=-5, xmaximo=5, yminimo-5
y ymaximo=5; cuando xminimo valga -5, f(xminimo) valdrá 25
porque x*x=25, entonces la fórmula "(((400) / (yminimo –
ymaximo)) * (coordenaday – ymaximo))" dará como
coordenadaadaptaday el valor de -800, lo cual no se vería
en el PictureBox, pues el punto(0,0) del PictureBox está
en la parte superior izquierda del PictureBox, y los positivos
van hacia abajo y los negativos hacia arriba, de manera que el
-800 estaría 800 pixeles arriba de la esquina superior
izquierda del PictureBox, y por eso no se vería. Pero
luego cuando estuviera evaluando el coordenadax=-2, coordenaday=4
para la función "f(x)=x^(2)", entonces al meter el 4 de
coordenaday en la fórmula "coordenadayadaptada = (((400) /
(yminimo – ymaximo)) * (coordenaday – ymaximo))",
coordenadaadaptaday toma un valor de 40, entonces a partir de la
esquina superior izquierda del PictureBox se cuentan 40 pixeles
hacia abajo, y ese es el punto de coordenadaadaptaday, que junto
con lo que se tenga de coordenadaadaptadax, será el punto
que se va a imprimir en pantalla como parte del gráfico de
la función.

Partes: 1, 2, 3, 4, 5, 6
 Página anterior Volver al principio del trabajoPágina siguiente 

Nota al lector: es posible que esta página no contenga todos los componentes del trabajo original (pies de página, avanzadas formulas matemáticas, esquemas o tablas complejas, etc.). Recuerde que para ver el trabajo en su versión original completa, puede descargarlo desde el menú superior.

Todos los documentos disponibles en este sitio expresan los puntos de vista de sus respectivos autores y no de Monografias.com. El objetivo de Monografias.com es poner el conocimiento a disposición de toda su comunidad. Queda bajo la responsabilidad de cada lector el eventual uso que se le de a esta información. Asimismo, es obligatoria la cita del autor del contenido y de Monografias.com como fuentes de información.

Categorias
Newsletter