JAVA y MATLAB

Anuncio
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
Descargar