Universidad Mayor de San Andrés Facultad: Ciencias Puras y Naturales Carrera: Informática Java y Matlab Estudiante: Limachi Apaza Yamil Cedula de Identidad: 9092862 L.P. Paralelo: “C” Docente: Lic. Brígida Carvajal Blanco Materia: Mat-156 Firma 6 de diciembre del 2013 La Paz – Bolivia MATLAB Y JAVA Empezaremos indicando que se puede realizar una llamada de una función de Matlab desde java, existe varias maneras de hacerlo, mencionaremos alguna de ellas: 1) Si se establece una devolución de llamada de Java desde dentro de Matlab, puede enviar un identificador de la función de Matlab. Cuando se provoca el evento de devolución de llamada de Java, se invocará su función de Matlab. 2) JMI necesita una cadena (nombre de la función o línea de comandos) para que Matlab evaluar. Si usted sabe de antemano el nombre de la función se puede utilizar. De lo contrario, puede preparar una función de interruptor-patio de Matlab (cuyo nombre se conoce de antemano) dinámicamente dirigir su llamada a la acción adecuada de Matlab. 3) Matlabcontrol es una API de Java que permite hacerlo. Puede invocar una función MATLAB usando feval. No puede funcionar directamente en un identificador de la función, puede utilizar func2str para convertir un control de función en una cadena. Para pasar una devolución de llamada en matlab, introducir el nombre del matlab argumentos de función y es hacia com.mathworks.jmi.Matlab.feval ("matlabControlcb",..., 0); La... es un Object [] donde [0] = comando y [1..end] = argumentos. Cómo ejecutar código fuente escrito en MATLAB desde Java HOLA MUNDO En un alarde de original el ejemplo sobre el que va a girar esta primera parte será el más que clásico Hola Mundo. La idea será escribir un código en MATLAB que imprima en pantalla dicho mensaje para luego ejecutarlo desde Java. Lo primero que hay que hacer por lo tanto es escribir dicho código. Hay que recordar que, en principio, tiene que estructurarse el código en forma de funciones, de forma que luego puedan ejecutarse desde nuestra aplicación Java. Escribimos el siguiente código en MATLAB en un fichero que llamaremos helloWorldClass.m function helloWorldFunction fprintf(1,'Hello World!\n' ); A continuación hay que convertir este código en otro que pueda ejecutarse desde java. Para ello, basta con ejecutar el comando deploytool. Nos aparecerá ahora un menú como el que se muestra en la siguiente imagen: Es un cuadro de diálogo sin mucho misterio. Para seguir el ejemplo lo ideal sería que lo dejaseis con los mismos valores que aparecen en la imagen. A continuación nos aparecerá una ventana en la que deberemos indica qué clases queremos crear y qué ficheros .m contendrá cada una. Por lo tanto, hacemos clic en el enlace Add class y le damos el nombre que queramos, como por ejemplo, HelloWorldClass. A continuación añadimos el fichero .m creado previamente a dicha clase mediante Add files. Hecho esto sólo resta clicar en el botón de Build situado en la parte superior de la ventana del deploytool. Si todo ha ido bien, tras un tiempo relativamente pequeño tendremos nuestro paquete Java listo para usar. Para programar en Java yo empleo el entorno de desarrollo NetBeans, así que lo explicado a continuación supondrá que también vosotros lo usáis. No obstante se puede hacer también sin mayores problemas en otros entornos. Creamos un nuevo proyecto Java y añadimos como librería el fichero .jar que se creó mediante deploytool y que se encuentra en el directorio c:\helloworld\contrib. Debe añadirse también de la misma forma el fichero javabuilder.jar, que puede encontrase en directorio_raiz_de_matlab\toolbox\javabuilder\jar. Hecho esto, basta con añadir a nuestro código las siguientes líneas: import com.mathworks.toolbox.javabuilder.*; import HelloWorldProject.HelloWorldClass; En este momento, estamos listos para poder ejecutar nuestro código MATLAB desde Java. Para ello hay que limitarse a crear un objeto de la clase HelloWordClass y llamar a la función que nos interese, como se muestra en el siguiente ejemplo: HelloWorldClass helloWorld = new HelloWorldClass(); helloWorld.helloWorldFunction(1); if (helloWorld != null) { helloWorld.dispose();} se limita a crear un objeto y a llamar a una de las funciones que contiene, en este caso, helloWorldFunction, que fue la que definimos previamente en el fichero .m. Finalmente se liberan los recursos ocupados. INTERPOLACION Para esto matlab cuenta con sus propias funciones pero en java las interpolaciones se pueden aplicar a cada objeto, cada atributo de objeto se pueden interpolar y soporta cada Robert Penner facilitando la ecuación. Una alternativa es también la biblioteca de jgoodies:Animation DERIVADAS E INTEGRALES Al igual que la interpolación las derivadas también cuentas con sus propias funciones en Matlab. Averiguando algo sobre la evaluación de expresiones matemáticas en Java hay una buena librería con la cual se pueden hacer gran cantidad de operaciones matemáticas desde las más básicas hasta las más complejas como son las derivadas e integrales. La libreria que nos ofrece tal grandiosas bondades se llama JEP (Java parses and evaluates mathematical) un completo evaluador y analizador de expresiones matematicas facil de programar, liviano y en pocas lineas de codigo. Para comenzar vamos a crear un nuevo proyecto (en mi caso yo utilizo netbeans 6.9.1) de tipo desktop application o aplicacion de escritorio. Una vez creado el proyecto elaboramos un diseño similar al siguiente, agregando 2 jtextfield, 1 boton y 2 labels. Luego nos dirigimos a la carpeta donde se alojan los proyectos de netbeans (por lo general es: Mis Documentos/NetBeansProjects), buscamos el proyecto que acabamos de crear y allí copiamos las librerías de jep o preferiblemente creamos una subcarpeta para colocar todas las librerías allí. Después de esto agregamos las librerías como referencia al proyecto, para ello presionamos clic derecho sobre el proyecto y en el menu desplegable que aparece seleccionamos la opción propiedades más adelante, en la nueva ventana que aparece seleccionamos del arbol de la izquierda la opción Bibliotecas, después presionamos el botón Añadir Jar/ Biblioteca, luego accesamos a la carpeta de netbeans donde se encuentra nuestro proyecto, ubicamos las librerías (las seleccionamos) despues presionamos el botón abrir y luego el botón aceptar de la ventana que se encuentra al fondo. Con esto que acabamos de hacer ya está agregada correctamente la librería de jep al proyecto, ahora pasemos a la sección de código de la aplicación e importemos lo siguiente: import org.lsmp.djep.djep.DJep; import org.nfunk.jep.Node; import org.nfunk.jep.ParseException; Con esto estamos haciendo referencia a las librerías que agregamos antes, ahora vamos a programar el boton derivar, para ello pasamos al diseño del programa y presionamos clic derecho sobre el boton, en el menu desplegable que aparece escogemos la opcion eventos>Action>actionperformed Este paso nos muestra la sección de código del botón, allí escribimos lo siguiente: private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) { // TODO add your handling code here: DJep j = new DJep(); String derivada = ""; //DJep es la clase encargada de la derivacion en su escencia j.addStandardConstants(); //agrega constantes estandares, pi, e, etc j.addStandardFunctions(); //agrega funciones estandares cos(x), sin(x) j.addComplex(); //por si existe algun numero complejo j.setAllowUndeclared(true); //permite variables no declarables j.setAllowAssignment(true); //permite asignaciones j.setImplicitMul(true); //regla de multiplicacion o para sustraccion y sumas j.addStandardDiffRules(); try{ //coloca el nodo con una funcion preestablecida Node node = j.parse(text1.getText()); //deriva la funcion con respecto a x Node diff = j.differentiate(node,"x"); //Simplificamos la funcion con respecto a x Node simp = j.simplify(diff); //Convertimos el valor simplificado en un String derivada =j.toString(simp); text2.setText(derivada); //imprime la función // j.println(simp); } catch(ParseException e){ e.printStackTrace();} } Cabe aclarar que el programa realizara derivadas respecto a la variable x así que toda función debe estar en términos de dicha variable TAYLOR para resolver por ejemplo el seno mediante la serie de Taylor este trabajo se lo realiza sin problema en Matlab pero en java es necesario hacer un método que simule la serie de Taylor el cual es el siguiente: import java.util.Scanner; public class seno_taylor { public static void main(String []args){ Scanner ingreso = new Scanner(System.in); double sen=0; double x; int numero; System.out.println("Ingrese la base:"); x = Double.parseDouble(ingreso.nextLine()); System.out.println("Ingrese el numero de terminos:"); numero = Integer.parseInt(ingreso.nextLine()); int i=1; while(i<=numero){ int fact = 1; int j=1; while(j<=(1+(2*(i-1)))){ fact= fact*j; j++; } if(i%2==0) sen = sen - (Math.pow(x,(1+(2*(i-1)))) /fact); else sen = sen + (Math.pow(x,(1+(2*(i-1)))) /fact); i++; } System.out.println("El seno de: " +x+ " es " +sen); } } GRAFICAS DE FUNCIONES EN MATLAB Y JAVA Para graficar la función seno en Matlab se utiliza el siguiente código Lo cual nos da como resultado la siguiente grafica Para graficar la función seno no es tan sencillo como lo es en Matlab 1º la función principal será el método llamado Paint el cual lo que hara será dibujar cada pixel en la pantalla, lo que hace es calcular el seno en un pixel x y además calcula el seno de un pixel en la posición x+1 y dibuja una línea entre estos puntos esta función es la siguiente: Nos da como resultado una función senoidal comprendida entre un tiempo determinado en el programa Otra manera de hacerlo en java es usando un applet que es una aplicación que puede ser ejecutada desde una página web. Ahora para el código primero declaramos las variables a utilizar para la gráfica, creamos una variable con el tamaño que tendrá el applet y asignamos a las variables el ancho y el largo de la applet indicamos los valores máximos y mínimos y los guardamos en variables y creamos un for para graficar cada uno de los valores y otra función donde le mandamos coordenadas y nos devuelve el valor que tendrá para cada caso Probando el programa y nos mostrara BIBLIOGRAFIA www.youtube.com/watch?v=Inp9tDNYKdk Grafica de funciones con Matlab, C# y Java – YouTube www.youtube.com/watch?v=Ybq-GTwQGoo Grafica de seno y hola mundo en java, matlab y c# - YouTube trecedb.wordpress.com/.../integrando-matlab-en-nuestrasaplicaciones-java www.lawebdelprogramador.com › Foros › Java es.wikipedia.org/wiki/MATLAB