Graficar cualquier funcion algebraica usando vb.net

Graficar una funcion algebraica en muchas ocasiones se convierte en algo tedioso y complicado de hacer, en la mayoria de las ocasiones recurrimos a software especializado que se encargan de elaborar dichas graficas como es el famoso matlab o la herramienta de matematicas que incluye microsoft encarta.

En este tutorial se realizara una aplicacion a traves de la cual la elaboracion de graficas se nos convertira en algo sencillo ya que vamos a crear un graficador, si , una herramienta capaz de plotearnos la funcion que le indiquemos en la entrada, para ello, haremos uso de la libreria JEP (Java  parses and evaluates mathematical expressions)  explicado en el post anterior y tambien haremos uso del control MSchart de microsoft para visual express 2008 el cual servira como control que mostrara las graficas…

Primero que todo tenemos que instalar el control mschart, se puede descargar de: Descargar mschart

Bien, una vez descargado debemos instalar el control, el cual se llama MSChart.exe, lo ejecutas y el se instala normalmente; despues hay que agregar el control al vb.net, para ello debejos ejecutar el archivo llamado MSChart_VisualStudioAddOn.exe, que tambien se puede descargar de: agregar mschart a vb.net tambien lo ejecutas y lo instalas normalmente, en la siguiente imagen te muestro los archivos a instalar, los cuales subire al final del post,

ahora creamos un nuevo proyecto de vb.net y en la barra de herramientas buscamos el control mschart tal y como vemos en la siguiente imagen:

en el cuadro de herramientas se puede ver el control, lo agregamos al formulario y tambien agregamos un boton un textbox y varios label, como se puede ver en la imagen, el control chart muestra una imagen de un histograma o grafica de barras, para cambiar el tipo de grafica puesto que el que usaremos sera un grafico de tipo lineal, seleccionamos el control y nos dirigimos al cuadro de propiedades, bucamos la opcion que diga series, hacemos click en ella y luego nos abrira una nueva ventana, alli en la lista de la parte derecha buscamos la opcion que diga chart type y seleccionamos “Spline”, en la siguiente imagen se pueden ver los pasos a seguir:

Listo, luego se hace click en el boton aceptar y nuestro control quedara con una grafica del siguiente aspecto:

despues de todo esto, si empezamos a programar, inicialmente importamos las referencias a JEP, no olvidemos que antes es necesario agregar la referencia a la dll (explicado en el post anterior):

Imports SingularSys.Jep
Imports SingularSys.Jep.Types

luego importamos la biblioteca que hace referencia a mschar para poder hacer uso de sus funciones y propiedades:


Imports System.Windows.Forms.DataVisualization.Charting

ahora declaramos las siguientes variables como globales:


Dim cad As String
Private jVar As New JepInstance()
Dim j As New JepInstance()

luego, en el evento load del formulario, debemos escribir lo siguiente:


Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Chart1.Series(0).ChartType = SeriesChartType.Spline
Chart1.Series(0).Points.AddY(1)
End Sub

despues de haber inicializado nuestra grafica lo que hacemos ahora es programar el tipo de grafica a generar cuando se le de click al boton graficar, para ello, escribimos en el evento click de dicho boton las siguientes instrucciones:


Chart1.Series(0).Points.Clear()

Me.Label_ngrafica.Text = Me.TextBox_funcion.Text 'muestro en el label ngrafica la funcion de entrada

Dim i As Double

For i = -10 To 10 Step 0.1

Try

   jVar.VarTab.AddVariable("x", New JepDouble(i))

   jVar.ReinitializeComponents()

   jVar.Parse(Me.TextBox_funcion.Text)

   Chart1.Series(0).Points.AddXY(i, CDbl(jVar.Evaluate().ToString))

   Catch ex As Exception

End Try

Next

el proceso que se hace dentro del ciclo for es hacer un recorrido desde -10 hasta 10 en pasos o incrementos de 0.1, atraves del cual se le ira asignando cada valor de la variable usada en el ciclo a la variable x, mas adelante, se va evaluando dicha funcion en el valor actual (como se vio en el post anterior), y se va graficando el punto; de tal manera que al final obtendremos una sucesion de puntos que formaran nuestra grafica en un rango desde -10 a 10.

es momento ahora de realizar una prueba a nuestro graficador intentando hacer varias graficas, probemos con una sencilla primero:

y=x^2

ahora probemos con la funcion coseno de x: cos(x)

Muy bien, hasta aqui hemos logrado hacer un simple y potente graficador en vb.net usando herramientas faciles de manejar, espero y este tutorial les sea facil de entender y resulte util en sus trabajos o en la cotidianidad…

hasta la proxima…

Descargar Programa

Anuncios

16 respuestas a “Graficar cualquier funcion algebraica usando vb.net

  1. Gracias por este tutorial, me saco de un problema en la universidad…. Pero tengo un problema, al intentar generar el proyecto me sale este error: “El tipo JepInstance” no está definido”… Espero que me puedas ayudar.. Gracias de antemano

  2. Gracias por esta información, me sacó de un problema en la universidad para hacer un programa de integración numérica a través del método de Romberg… Pero tengo un problema, cuando quiero generar el proyecto me sale este error: “El tipo JepInstance no está definido”, el .exe que se encuentra en la carpeta bin del proyecto bin funciona perfecto en mi computadora, pero al intentar ejecutarlo en otra, me sale un error, y copié el jep.dll y es el mismo problema… espero me puedas ayudar… Gracias de Antemano….

    • Hola Rafael, Respecto a tu pregunta “El tipo JepInstance no está definido” , lo que te esta ocurriendo es que no esta agregada la referencia al proyecto de vb.net, es por eso que no se te genera la aplicacion, lo que debes de hacer para que te funcione correctamente es:

      1) ir la barra de menu de vb.net y seleccionamos la opcion proyecto (es la cuarta opcion del menu superior de izquierda a derecha) y en el menu desplegable que aparece seleccionamos la opcion agregar referencia…

      2) en el cuadro de dialogo que emerge haces click en la pestaña examinar y accedes a la carpeta debug (esta dentro de bin) del proyecto, donde debe de estar la dll de Jep, luego la seleccionas y haces clic en el boton aceptar, ahora si te debe de haber quedado agregada la libreia de jep; puedes comprobarlo en el explorador de soluciones de vb.net (se encuentra en el menu de la parte derecha de la pantalla) alli seleleccionas el boton que dice mostrar todos los archivos y realmente te fijas de que aparezca jep entre las libreiras usadas.

      Ten encuenta que debes tener instalado primero el mschart y el complemento para añadirlo a vb.net cuyos link se encuentran al inicio de este post.

      si quieres mas informacion sobre como agregar la referencia visita el post “Evaluar expresiones matematicas con JEP y vb.net”…

      eso es todo amigo!, espero y te sirva de ayuda….

    • Hola Car Dan Bec, pueno a tu pregunta te puedo responder lo siguiente:

      1) si quieres definir un limite maximo y minimo en los ejes x o y debes colocar las siguientes instrucciones dentro del load del formulario

              Chart1.ChartAreas(0).AxisX.Minimum = 0        'Minimo valor de x
              Chart1.ChartAreas(0).AxisX.Maximum = 100      'Numero de puntos en x de la grafica, (maximo valor 100)
              Chart1.ChartAreas(0).AxisY.Minimum = -2       'Minimo valor de y
              Chart1.ChartAreas(0).AxisY.Maximum = 5        'Numero de puntos en y de la grafica, (maximo valor 5)
              Chart1.Series(0).Points.AddY(1)
      

      2) si lo que deseas es establecer un rango predefinido para tus coordenadas en x debes de ir variando los valores del ciclo for tal y como puedes ver en este post, la grafica va desde el punto -10 hasta el 10 con incrementos de 0.1, si quieres que los valores en x esten distribuidos de otra manera prueba armandote otro ciclo como:

      
         For i = 0 To 20 Step 2
      
        'aqui va el codigo para generar la grafica
      
         Next
      

      Espero y te resulte util esta explicacion y puedas resolver tu problema!

  3. Hola Amigo, he estado echando un vistazo al tutorial y me parece magnifico, hace tiempo que vengo buscando algo parecido pero yo quiero que la grafica coja los datos que le mande via serie, por ejemplo si yo le mando una “A” al dispositivo mediante el puerto serie éste me responde mandando datos y son los que quisiera graficar en la grafica, ¿me podrias dar alguna idea? mandar los datos por el puerto serie no es problema y que me responda tampoco es el Chartcontrol el que no puedo enlazar con esos datos que me envia el dispositivo via puerto serie no tengo nidea de como hacerlo.Desde ya muchas gracias y felicidades por tu web.

    • Hola Jose Luis, lo de graficar algun valor que envias desde un microcontrolador no es complicado, solo debes tener en cuenta que los datos que envies sean de tipo numerico, es decir entero, double o flotante; ademas el tipo de grafica a generar debe ser: SeriesChartType.FastLine, entonces colocas en el load del formulario:

      Chart1.Series(0).ChartType = SeriesChartType.FastLine

      y para que grafiques los datos que vas recibiendo desde el puerto serie, debes crear un procedimiento que revise constantemente la llegada de cada trama de datos para extraer el valor numerico a graficar y propiamente lo graficas con solo agregar una linea de codigo asi:

      Chart1.Series(0).Points.AddY(valoragraficar)

      . Puedes descargar un ejemplo para lo que deseas realizar desde el siguiente link: Ejemplo de datos Graficados desde el Puerto Serie

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s