Universidad Mayor de San Andrs
Facultad: Ciencias Puras y Naturales
Carrera: Informtica
Java y Matlab
Estudiante: Limachi Apaza Yamil
Cedula de Identidad: 9092862 L.P.
Paralelo: C
Docente: Lic. Brgida 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
funcin de Matlab desde java, existe varias maneras de hacerlo,
mencionaremos alguna de ellas:
1) Si se establece una devolucin de llamada de Java desde dentro de
Matlab, puede enviar un identificador de la funcin de Matlab. Cuando se
provoca el evento de devolucin de llamada de Java, se invocar su
funcin de Matlab.
2) JMI necesita una cadena (nombre de la funcin o lnea de comandos)
para que Matlab evaluar. Si usted sabe de antemano el nombre de la
funcin se puede utilizar. De lo contrario, puede preparar una funcin de
interruptor-patio de Matlab (cuyo nombre se conoce de antemano)
dinmicamente dirigir su llamada a la accin adecuada de Matlab.
3) Matlabcontrol es una API de Java que permite hacerlo. Puede invocar
una funcin MATLAB usando feval. No puede funcionar directamente en
un identificador de la funcin, puede utilizar func2str para convertir un
control de funcin en una cadena. Para pasar una devolucin de llamada
en matlab, introducir el nombre del matlab argumentos de funcin y es
hacia com.mathworks.jmi.Matlab.feval ("matlabControlcb",..., 0); La... es
un Object [] donde [0] = comando y [1..end] = argumentos.
Cmo ejecutar cdigo 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 ms que clsico Hola Mundo. La idea ser escribir un
cdigo 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 cdigo. Hay que recordar que, en principio, tiene que
estructurarse el cdigo en forma de funciones, de forma que luego
puedan ejecutarse desde nuestra aplicacin Java.
Escribimos el siguiente cdigo en MATLAB en un fichero que llamaremos
helloWorldClass.m
function helloWorldFunction
fprintf(1,'Hello World!\n' );
A continuacin hay que convertir este cdigo 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 dilogo sin mucho misterio. Para seguir el ejemplo lo
ideal sera que lo dejaseis con los mismos valores que aparecen en la
imagen. A continuacin 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 continuacin
aadimos el fichero .m creado previamente a dicha clase mediante Add
files. Hecho esto slo resta clicar en el botn de Build situado en la
parte superior de la ventana del deploytool. Si todo ha ido bien, tras un
tiempo relativamente pequeo tendremos nuestro paquete Java listo
para usar. Para programar en Java yo empleo el entorno de desarrollo
NetBeans, as que lo explicado a continuacin supondr que tambin
vosotros lo usis. No obstante se puede hacer tambin sin mayores
problemas en otros entornos.
Creamos un nuevo proyecto Java y aadimos como librera el fichero .jar
que se cre mediante deploytool y que se encuentra en el directorio
c:\helloworld\contrib. Debe aadirse tambin de la misma forma el
fichero javabuilder.jar, que puede encontrase en
directorio_raiz_de_matlab\toolbox\javabuilder\jar.
Hecho esto, basta con aadir a nuestro cdigo las siguientes lneas:
import com.mathworks.toolbox.javabuilder.*;
import HelloWorldProject.HelloWorldClass;
En este momento, estamos listos para poder ejecutar nuestro cdigo
MATLAB desde Java. Para ello hay que limitarse a crear un objeto de la
clase HelloWordClass y llamar a la funcin 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 ecuacin. Una alternativa es tambin la biblioteca de
jgoodies:Animation
DERIVADAS E INTEGRALES Al igual que la interpolacin las derivadas
tambin cuentas con sus propias funciones en Matlab.
Averiguando algo sobre la evaluacin de expresiones matemticas en
Java hay una buena librera con la cual se pueden hacer gran cantidad de
operaciones matemticas desde las ms bsicas hasta las ms
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 diseo 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
libreras de jep o preferiblemente creamos una subcarpeta para colocar
todas las libreras all. Despus de esto agregamos las libreras como
referencia al proyecto, para ello presionamos clic derecho sobre el
proyecto y en el menu desplegable que aparece seleccionamos la opcin
propiedades ms adelante, en la nueva ventana que aparece
seleccionamos del arbol de la izquierda la opcin Bibliotecas, despus
presionamos el botn Aadir Jar/ Biblioteca, luego accesamos a la
carpeta de netbeans donde se encuentra nuestro proyecto, ubicamos las
libreras (las seleccionamos) despues presionamos el botn abrir y luego
el botn aceptar de la ventana que se encuentra al fondo. Con esto que
acabamos de hacer ya est agregada correctamente la librera de jep al
proyecto, ahora pasemos a la seccin de cdigo de la aplicacin 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 libreras que agregamos
antes, ahora vamos a programar el boton derivar, para ello pasamos al
diseo 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 seccin de cdigo del botn, 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 funcin
// j.println(simp);
} catch(ParseException e){ e.printStackTrace();}
}
Cabe aclarar que el programa realizara derivadas respecto a la variable x
as que toda funcin debe estar en trminos 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 mtodo 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 funcin seno en Matlab se utiliza el siguiente cdigo
Lo cual nos da como resultado la siguiente grafica
Para graficar la funcin seno no es tan sencillo como lo es en Matlab
1 la funcin principal ser el mtodo 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 adems calcula el seno de un pixel en la posicin x+1 y dibuja una
lnea entre estos puntos esta funcin es la siguiente:
Nos da como resultado una funcin senoidal comprendida entre un
tiempo determinado en el programa
Otra manera de hacerlo en java es usando un applet que es una aplicacin
que puede ser ejecutada desde una pgina web.
Ahora para el cdigo primero declaramos las variables a utilizar para la
grfica, creamos una variable con el tamao que tendr el applet y
asignamos a las variables el ancho y el largo de la applet indicamos los
valores mximos y mnimos y los guardamos en variables y creamos un for
para graficar cada uno de los valores
y otra funcin 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-nuestras-
aplicaciones-java
www.lawebdelprogramador.com Foros Java
es.wikipedia.org/wiki/MATLAB