¡Descarga Creación de una interfaz gráfica básica en Matlab utilizando GUIDE y más Diapositivas en PDF de Química solo en Docsity!
GUI (Graphical User Interfase) nos ayuda a crear una interfaz grafica para mejor
comodidad del usuario.
La forma de ingresar al entorno GUI de Matlab, es ingresando ‘ guide ’ en el
command window de Matlab y eligiendo la opción Blank GUI (ver figura)
Podemos arrastrar botones, cajas de texto, cuadros para graficas, etc
PushButton: Este control
servirá para programar
cálculos de nuestro
programa o salir de el.
Edit text: Este control
servirá para ingresar
datos de nuestros calculo
o también para mostrar
resultados.
Axes: Este control servirá
para insertar cualquier
imagen que queramos o
una grafica a partir de
datos x-y
Static text: Este control
servirá para colocar
títulos o algún otro
comentario en nuestra
guide
Table: Para colocar
cantidad de datos en
columnas, todos los
valores de nuestras
iteraciones irán ahí
Controles mas importantes de la Paleta de Diseño y Edición de la GUI
Para colocar cualquier objeto de la Paleta de Diseño simplemente hacer clic y luego
dibujarlo en nuestra GUI vacía (también se puede arrastrar y soltar)
Cada objeto tiene varias propiedades que podemos cambiar, para cambiar
estas propiedades hacer doble click sobre el objeto quieras cambiar, por
ejemplo sobre el pushbutton.
Aparecerá la ventana Inspector, ahí hay 5 propiedades subrayadas que son
las mas importantes:
FontSize: Cambia el tamaño de fuente, simplemente escribes en numero que
quieras.
FontWeight: Para poner negrilla a nuestro texto, eliges entre las opciones que
presenta.
HorizontalAlignment: Alineación izquierda, derecha o central de nuestro
texto.
String: Contenido que muestra el texto, por ejemplo la palabra Calcular que
muestra el pushbutton.
Tag: Nombre del objeto (muy importante a la hora de programar)
Se cambio la
propiedad String
Donde: la sentencia input(‘ ’) nos sirve para pedir el valor de una variable
la sentencia fprintf(‘ ’, ) nos sirve para mostrar el resultado en pantalla
Supongamos que tenemos el siguiente código en un archivo m de MatLab y produce
el siguiente resultado
Llevaremos este código a GUIDE
PASO 2: Se ha creado una GUI en
blanco, arrastrar:
3 edit text
4 pushbuttons
4 statics text
Acomodarlos como en la figura
inferior
PASO 3: Hacer doble click sobre cada
objeto para acceder a sus propiedades
y cambiar las siguientes propiedades
String:
- Se deja vacio en los 3 edit text
- Se coloca a =, b=, c= en 3 de los
static text y calculadora básica en el
ultimo
Multiplicacion, Division en cada uno
de los pushbuttons
Todo debería quedar como en la foto superior
La idea es que podamos colocar valores en las cajas
vacías (edit text) de a y b, presionar el pushbutton sumar
y el resultado salga en la caja de c.
De igual forma presionamos restar y el resultado salga en
la caja de c y así con las otras 2 operaciones
matemáticas.
Comencemos haciendo lo siguiente:
Click derecho en el botón
sumar y elegir Callback
a=str2double(get(handles.edit1, 'String')); b=str2double(get(handles.edit2, 'String')); c=a+b; set(handles.edit3, 'String', num2str(c)) a=input('Ingrese a: '); b=input('Ingrese b: '); c=a+b; fprintf('c = a + b = %f \n',c)
Código original de matlab (diapositiva 9) Código adaptado para nuestra GUI
La sentencia get remplaza a input para pedir datos cuando se usa una GUI
variable=input(‘comentario cualquiera: ');
variable=str2double(get(handles.edit2, 'String'));
Descripción de la sentencia anterior:
variable: nombre de nuestra variable, a, b, c, etc.
str2double(): conversión de cadena de texto a numero de doble precisión (muy importante).
Str2double(variable a convertir)
get(): funciona como el input, obtiene cualquier tipo de valor de un objeto (edit text,
pushbutton, etc.). Se coloca de la forma get(handles.objeto, ‘Propiedad de la cual tomar el
valor’)
handles: sentencia q siempre debe colocarse, sirve para decirle al get de quien va obtener el
valor. Siempre se coloca de en la forma: handles.objeto donde en este caso objeto es el edit
edit2 (caja de texto): objeto al cual el handles va usar para que el get tome un valor.
‘String’: Propiedad del objeto del cual se tomara el valor. La propiedad String es en la cual se
colocan
los valores numéricos o de texto, pero siempre lo interpreta como texto, yo podría poner valor 25
que es un valor numérico pero el objeto lo entenderá como texto siempre, es por eso que se
usa str2doublé
para convertir a numero.
function pushButton1_Callback(hObject, eventdata, handles) %de esta forma pido la variable a a=str2double(get(handles.edit1, 'String')); %de esta forma pido la variable b b=str2double(get(handles.edit2, 'String')); %hago la operación matemática c=a+b; %muestro el valor obtenido en la variable c en la caja de texto edit set(handles.edit3, 'String', num2str(c))
fprintf('c = a + b = %f \n',c) set(handles.edit3, 'String', num2str(c))
Código original de matlab (diapositiva 9) Código adaptado para nuestra GUI
La sentencia set remplaza a fprintf a la hora de imprimir datos cuando se usa una GUI, se escribe
muy parecido a la sentencia get
get(handles.edit2, 'String')
set(handles.edit3, 'String', num2str(c))
En la sentencia get() indicamos que tome el valor de la propiedad String, en cambio en set() tenemos que
especificar que valor exactamente queremos asignarle a la propiedad String. Y la propiedad String solo acepta
texto así que si queremos colocar un numero ahí debemos convertirlo con num2str(variable)
Aquí tenemos el código completo que debe ir en el pushbutton para que se realice la operación de suma
El mismo código deberían copiar y pegar en los botones de resta, multiplicación y
división de nuestro programa, lo único que cambia es la operación matemática: - / *
(diapositiva 12)
Primero observar que el anterior código calcula una valor de fx, dfx, x1, error para cada
iteración y vuelve a calcular los mismos para la siguiente iteración remplazando los valores
obtenidos en iteraciones anteriores y de esta forma no podemos crear una tabla de GUI.
Para crear la tabla de GUI necesitamos que cada variable hallada no contenga un solo
valor a la vez sino que guarde un grupo de valores fx → fx(i), hablamos de crear un vector
para cada variable y en esa forma podríamos colocarlos en una tabla en nuestra GUI.
Que genera el mismo resultado que vimos con el código anterior (diapositiva 16)
Simplemente aumentamos un contador i, y
creamos las variables Xov(i) fxv(i) y las otras
aumentándoles una letra para que el programa
no las confunda
clc,clear fun=@(x) x^3+7x-3sin(x)+exp(x)-7; Xo=input('Ingrese valor inicial: '); Xov(1)=Xo; Tol=input('Ingrese tolerancia: '); h=0.00001; errror=10; i=1; while errror>Tol Xov(i)=Xo; fx=fun(Xo); fxv(i)=fx; dfx=(fun(Xo+h)-fun(Xo-h))/(2*h); dfxv(i)=dfx; X1=Xo-fx/dfx; X1v(i)=X1; errror=abs(X1-Xo); errrorv(i)=errror; Xo=X1; i=i+1; end fprintf('Xo = %f \t fx = %e\t dfx = %5.6f \t X1 = %5.6f \t error = %g \n',[Xov;fxv;dfxv;X1v;errrorv])
Crear una Blank GUI que contenga:
2 static text y en su propiedad String poner xo= y tol= respectivamente
2 edit text y en su propiedad String borrar el contenido de ambos
1 pushbutton y en su propiedad String poner Calcular
1 table a la cual se le hara click derecho y elegiremos Table Property Editor
En la propiedad Columns , usando el botón
Insert añadir tantas columnas como sea
necesario y en campo name colocar lo que
queremos que se imprima como en la
fotografía inferior.
Ahora, como ya se había dicho y hecho anteriormente, tenemos que cambiar los input()
con get()
Xo=input('Ingrese valor inicial: '); Xov(1)=Xo; Tol=input('Ingrese tolerancia: '); Xo=str2double(get(handles.edit1,'String')) Xov(1)=Xo; Tol=str2double(get(handles.edit2,'String'))
Debería quedar así hasta el momento
fprintf('Xo = %f \t fx = %e\t dfx = %5.6f \t X1 = %5.6f \t error = %g \n',[Xov;fxv;dfxv;X1v;errrorv])
Ahora debemos remplazar la línea fprintf que nos servía en MatLab por una que nos servirá para la GUIDE.
Como lo que queremos imprimir datos en la tabla, usaremos la sentencia set para remplazar la sentencia fprintf. Primero
creamos una variable llamada datos en la cual juntaremos todos los vectores creados: Xov, fxv, dfxv, x1v, errrorv.
Recordar que estos vectores se calculan como vectores fila, los necesitamos en forma de columna por lo cual se usara
el signo ‘ para obtener su transpuesta Xov→Xov’
datos=[Xov' fxv' dfxv' X1v' errrorv']
set(handles.uitable1,'Data',datos)
datos=[Xov' fxv' dfxv' X1v' errrorv']
set(handles.uitable1,'Data',datos)
La siguiente línea se encarga de asignar la variable datos que contiene todas las columnas que
calculaba fprintf y los coloca en la tabla.
set = asignar un valor a un objeto
handles.objeto = obtiene el objeto al cual se va asignar el valor
uitable1 = es el objeto al cual se le asignara el valor
Data = la propiedad a la cual asignar el valor
datos = el valor que se va asignar al objeto
El código final asignado al
pushbutton quedara así: