Programas Hechos en Matlab Curso 2

22
PROGRAMAS HECHOS EN MATLAB CURSO 2. VERANO DE INVESTIGACION DELFIN 2 Asesor: Mario Alberto Ibarra Manzano PROGRAMA 1: clear all; close all; clc; r=[1 2 3 4 5 6 5 4 3 2 1]; vy=ones(11,11); for radio=1:1:11 vy(radio,:)= repmat(r(1,:),1,1); end %% me debo asegurar de que la operación resultante, tenga las mismas columnas que Este programa tiene como finalidad el indexar nuevos valores a una matriz de datos previamente diseñada. Como se puede ver se está creando una matriz de puros unos, antes del ciclo for(::) debido a que si no existe esta matriz, y queremos hacer referencia a ella desde dentro del ciclo nos será imposible ya que intentamos introducir o modificar datos de una matriz que no ha sido generada previamente. Dentro del ciclo ya nos referimos a una parte especial de la matriz de unos generada. Para este anterior ejemplo lo que se está haciendo es referirse a todo un renglón, ¿Qué renglón?: el referente al valor de radio según el ciclo; pero, ¿Qué se le asigna?: se le asigna una matriz dada por

Transcript of Programas Hechos en Matlab Curso 2

Page 1: Programas Hechos en Matlab Curso 2

PROGRAMAS HECHOS EN MATLAB CURSO 2. VERANO DE INVESTIGACION DELFIN 2

Asesor: Mario Alberto Ibarra Manzano

PROGRAMA 1:

clear all;close all;clc;r=[1 2 3 4 5 6 5 4 3 2 1];vy=ones(11,11);for radio=1:1:11vy(radio,:)= repmat(r(1,:),1,1);end%% me debo asegurar de que la operación resultante, tenga las mismas columnas que

Este programa tiene como finalidad el indexar nuevos valores a una matriz de datos previamente diseñada. Como se puede ver se está creando una matriz de puros unos, antes del ciclo for(::) debido a que si no existe esta matriz, y queremos hacer referencia a ella desde dentro del ciclo nos será imposible ya que intentamos introducir o modificar datos de una matriz que no ha sido generada previamente.

Dentro del ciclo ya nos referimos a una parte especial de la matriz de unos generada. Para este anterior ejemplo lo que se está haciendo es referirse a todo un renglón, ¿Qué renglón?: el referente al valor de radio según el ciclo; pero, ¿Qué se le asigna?: se le asigna una matriz dada por la función “repmat”, la cual tiene la capacidad de introducir matrices dentro de otras matrices, solo se tiene que especificar dentro del primer dato de su paréntesis (repmat ( dato1 , dato2 , dato3 ) ) la matriz o los datos que tendrá la matriz, en el segundo dato, indicamos el número de renglones que tendrá la matriz, y en el tercero el número de columnas.

A continuación se mostrara un pequeño manejo de matrices en el que se tratara de explicar visualmente el funcionamiento de esta función.

Page 2: Programas Hechos en Matlab Curso 2

>> a=ones(3,3)

a =

1 1 1

1 1 1

1 1 1

>> b=[1 2 3;4 5 6;7 8 9]

b =

1 2 3

4 5 6

7 8 9

>> a(3,:)=repmat((diag(b))',1,1)

a =

1 1 1

1 1 1

1 5 9

Con esto podemos ver claramente el funcionamiento de la función “repmat”, y el modo en el que se puede utilizar.

PROGRAMA 2:

clear all;close all;clc;n=input('cuantos puntos propones');a=(0.1:1:n);b=ones(1,length(a)-1);ad=0;for w=1:length(b) ad=length(b)-w+1; b(1,w)=-1.*a(1,ad+1);endrf=[b a];r=((max(rf))^2-(rf).^2).^(1/2)+.000001;tam=length(r);vy=ones(tam,tam);vz1=ones(tam,tam);vz2=ones(tam,tam);

Page 3: Programas Hechos en Matlab Curso 2

y=ones(tam,tam*2);z=ones(tam,tam*2);x=ones(tam,tam*2);for radio=1:tam vy(radio,:)= -1*r(1,radio) : (2*r(1,radio))/(tam-1): 1*r(1,radio); vz1(radio,:)= sqrt((r(1,radio))^2 - (vy(radio,:)).^2); vz2(radio,:)= -sqrt((r(1,radio))^2 - (vy(radio,:)).^2); y(radio,:)=[vy(radio,:) -vy(radio,:)]; z(radio,:)=[vz1(radio,:) vz2(radio,:)]; x(radio,:)=radio*1*x(radio,:);endplot3(x,y,z,'m*-');xlabel('eje x');ylabel('eje y');zlabel('eje z');grid on

Este programa tiene como finalidad principal el hecho de crear una gráfica en la que se genere a una esfera. El principal motivo de esta grafica es familiarizarse con el uso de matrices, manejar las funciones de gráficos en 3-D ofrecidas por MATLAB y más que nada manejar en un muy buen nivel las matrices.

Ahora se explicara su funcionamiento. Lo primero que se hace es pedir un número al usuario, tal número contendrá al número de círculos que se harán para generar la gráfica que se asemeje a la esfera. Después de ello se crean 2 vectores, un vector a que ira de 0 a el valor ingresado por el usuario, y el vector “b” será un vector que ira de (- valor ingresado por el usuario) hasta el valor 0. Después de eso se crea un vector “rf”, el cual contiene al vector a y b, con lo que “rf” es un vector desde – valor propuesto hasta valor propuesto, con lo que obtendríamos el doble de círculos que el usuario propuso, y de esta forma tener círculos en ejes negativos y positivos. Con esto obtenemos los valores de los radios para las círculos que generaran a la esfera, pero existe un problema, estos valores son valores que son proporcionales, por lo que causaran una línea recta y nuestra esfera se asemejara más bien a un rombo en 3 dimensiones, por lo que esa condición lineal debe ser modificada, da tal modo que los círculos deben tener tamaños de acuerdo a la dirección que toma un cuarto de circunferencia, para que al rellenarse toda la gráfica tengamos una

Page 4: Programas Hechos en Matlab Curso 2

apariencia esférica. Después de eso solo genero matrices que contendrán los valores correspondientes a cada circunferencia.

¿Para qué matrices? Bueno, al graficar con plot3 en MATLAB, el programa debe ser ejecutado con valores de (x,y,z). por ejemplo, cuando le damos una matriz de 3x3 para cada eje, entonces va agarrando cada vector renglón de la matriz para cada eje, formando una matriz de 3 renglones y tantas columnas como puntos hallamos propuesto, en la que el primer dato del primer renglón de la matriz formada corresponde a la coordenada en x para graficar el primer punto de la primer circunferencia, el segundo renglón al eje de las “y” y el tercero al eje de las “z”, así con esto se grafican todos los puntos del primer renglón de la matriz de cada coordenada obteniendo la primer circunferencia. Es así que se genera la esfera, solo se van tomando vectores fila de cada una de las matrices generadas y se van generando círculos de mayor tamaño.

Page 5: Programas Hechos en Matlab Curso 2

PROGRAMA 3:

Para el programa 3 mostraremos otras superficie generada en 3-D, pero ahora con el comando “surf”. La imagen que se elaboró en el tercer programa fue el desplazamiento de una señal seno, y el código con el cual fue realizada fue el siguiente:

% SI VEMOS A LA MATRIZ QUE DEBE LLEVAR EL SURF, NOS DAMOS CUENTA QUE % CADA COLUMNA ME DICE LOS PUNTOS EN LOS QUE DEBE DE ESTAR LA Z, POR% LO QUE EN REALIDAD LA Z ES LA AMPLITUD DE LA SEÑAL SENO.% Los datos del primer renglón indica en que parte de "x" estará cada% señal senoy=0:(2*pi)/100:2*pi;z=sin(y);matris=ones(length(y),length(y));for columna=1:length(y) for renglon=1:length(y) drenglon=(length(y)+1)-renglon; matris(drenglon,columna)=z(1,drenglon); endendfiguresurf(matris)xlabel('eje x');ylabel('eje y');zlabel('eje z');grid on

Antes que nada lo primero que se hizo fue establecer en que ejes iba a estar postrada la primera señal. Como podemos ver en las variables utilizadas los ejes tomados para graficar la señal fueron el “z” y el “y”

La variable que lleva por nombre “matriz”, en realidad contiene puros “unos”, pero al pasarla por el ciclo tendrá a todas las demás señales seno que irán en paralelo a la primera. En si lo que se hace es crear una matriz cuadrada, donde se va llenando cada columna. El primer dato que se pone a cada columna es el dato correspondiente a 2π, y el último que se pone es el correspondiente a 0. Como todas las columnas siguientes representan a cada una de las señales seno, que como sabemos contienen la misma amplitud y demás, solo que están desplazadas en el eje “x” son iguales, entonces solo lo que hacemos es llenarlas con los mismos datos de la primera señal, en la misma forma.

Page 6: Programas Hechos en Matlab Curso 2

PROGRAMA 4

Ahora trataremos de explicar una aplicación en la que se trataba de comprobar el tiempo que el MATLAB tardaba en hacer operaciones con ciclos, y operaciones con datos de indexado. Las señales que se tomaron en cuenta fueron las señales seno, y a estas muestreábamos cierta cantidad de datos para sacar sus promedios. El código siguiente muestra el código que hizo posible la aplicación.

clear all;close all;clc;

%% SEGMENTACION DENSA CON CICLOSn=input ('Numero de puntos a tomar para muestrear?: ');nm= input('En cuantos puntos estará dividida la señal: ');t=0:(2*pi)/nm:2*pi;y=sin(t)+.0001;my=ones(length(y)-n+1,1); %% este va a ser una matriz en la que se presentan las sumas de todas las muestrasticfor u=1:length(y)-n+1 my(u,:)=sum(y(u:u+n-1))/n;endtocdisp(my)

%% SEGMENTACION DENSA CON INDEXADOt=0:(2*pi)/nm:2*pi;y=sin(t);id1= repmat(y(1:n),(length(y)-n+1),1); %% Genero una matriz con tantas columnas como puntos tenga "y" con los datos que tiene el vector y, con los datos de la posición 2 hasta la posición determinada por el número de datos a muestrear, menos una. id2=[0 y(2:length(y)-n+1)]';id3=[id2 id2 id2]; id2= repmat(id1(1,1),(length(y)-n+1),n);ini=zeros(1,n);id2(1,:)=ini;index=id1+id3;ticsuma=sum(index,2)/n; %% Al decir (index,2) estoy haciendo énfasis en que la suma se haga por los datos de cada renglóntoc

Se pudo comprobar que el uso de matrices es mucho más rápido que al trabajar con ciclos.

Page 7: Programas Hechos en Matlab Curso 2

PRACTICA 5:

Este programa me permite proponer llenar una matriz de tamaño nxm, con lo que el usuario en vez de proporcionar una matriz directamente al MATLAB por medio de corchetes, basta que le indique al programa el valor de los índices de la matriz.

%% ESTE PROGRAMA SERA CAPAZ DE LLENAR LAS CASILLAS DE UNA MATRIZ CUADRADA nxmclcclose all;clear all;n=input('Cuantos renglones tiene tu matriz: ');m= input('\nCuantas columnas tiene tu matriz: ');f=1;c=ones(n,m);%% ESTA CICLO ME SIRVE PARA SABER CUANTOS DATOS LE PEDIRE AL USUARIOfor a=1:1:n %% este ciclo estará encargado de hacer el salto entre renglones. for b=1:1:m %%este ciclo estará encargado de llenar los renglones fprintf('dame el valor %d: ',f); c(a,b)= input(''); cuando aparece el string de arriba, automáticamente ese valor se concatena o se guarda en la matriz por medio del input abajo del string. f=f+1; endend

PRACTICA 6:

Mediante el siguiente código genero una matriz de valores aleatorios, entre un rango máximo y mínimos propuestos por el usuario.clc %LIMPIAR PANTALLAclear all; %LIMPIAR MEMORIAclose all; %CERRAR VENTANASMX= input ('ingrese el máximo');MN= input ('ingrese el mínimo');n=input ('ingrese el número de columnas'); % PIDO LOS VALORES PARA LA

CANTIDAD DE COLUMNASm=input ('ingrese el número de renglones'); a= round((MX-MN)*rand(m,n)+MN); % MATRIZ DE MXN HECHA A BASE DE NUMEROS

ALEATORIOS.disp(a) % ESTE ME SIRVE SOLO PARA PRESENTAR RESULTADOS

Page 8: Programas Hechos en Matlab Curso 2

PRACTICA 7:Esta fue una de las prácticas as extensas que se realizaron durante el verano, ya que consistía en diseñar una aplicación grafica en la que se diera opción al usuario de generar una señal senoidal con las especificaciones requeridas por el mismo. Esta aplicación tenía la ventaja de dar valores de amplitud, frecuencia, off-set, desfasamiento, numero de ciclos a ver, así como también presentaba al usuario la opción de guardado o simplemente salir de la aplicación. A continuación se presenta el código implementado en un script de MATLAB para la realización de tal aplicación:ClickClose all;Clear all; NP=100; % Valor inicial con el que aparecerá la caja de texto 1,

correspondiente al número de puntos a plasmar de la funciona graficar

Ampo=1; % Valor de la amplitudOff=0; %Off-set colocado a la señalNEC=1; % Numero de ciclos de la señalFase=0; % Desfasamiento aplicado a la señal % Generar vector de tiempot = 0:(2*pi/ (NP-1)) :(2*pi*NEC); % Calcular función senoy = Ampo*sin (fase)+Off; % fig. 1 es el controlador% Para ver las propiedades de la gráfica la gráfica debe estar abierta, ya% que si no lo está, nos mostrara un error en la pantalla de comandos.fig1= figure();set(fig1,'NumberTitle','off',... 'MenuBar','none',... 'Units', 'normalized',... 'Position', [0.1 0.1 0.8 0.8]); %las dos últimas coordenadas me indican el tamaño en (x) y en (y) para la ventana eNumP= uicontrol('Units', 'normalized', ... 'Position', [0.02 0.02 0.12 0.05], ... 'Style', 'edit', ... 'String', NP, ... 'Callback', 'eNumP_refresh'); lNumP= uicontrol('Units', 'normalized', ... 'Position', [0.02 0.09 0.12 0.02], ... 'Style', 'text', ... 'String', 'Numero de Puntos',... 'BackgroundColor', get(fig1,'Color'), ... 'FontSize', 10); EAmP= control ('Units', ‘normalized’,

Page 9: Programas Hechos en Matlab Curso 2

'Position', [0.16 0.02 0.12 0.05], ... 'Style', 'edit', ... 'String', Amp, ... % En la propiedad String de la caja

eAmP pongo lo que tenga Amp 'Callback', 'eNumP_refresh'); lAmP= uicontrol('Units', 'normalized', ... 'Position', [0.16 0.09 0.12 0.02], ... 'Style', 'text', ... 'String', 'Amplitud',... 'BackgroundColor', get(fig1,'Color'), ... 'FontSize', 10); eOff= uicontrol('Units', 'normalized', ... 'Position', [0.30 0.02 0.12 0.05], ... 'Style', 'edit', ... 'String', Off, ... 'Callback', 'eNumP_refresh'); lOff= uicontrol('Units', 'normalized', ... 'Position', [0.30 0.09 0.12 0.02], ... 'Style', 'text', ... 'String', 'Off-Set',... 'BackgroundColor', get(fig1,'Color'), ... 'FontSize', 10); eNc= uicontrol('Units', 'normalized', ... 'Position', [0.44 0.02 0.12 0.05], ... 'Style', 'edit', ... 'String', Nc, ... 'Callback', 'eNumP_refresh'); lNc= uicontrol('Units', 'normalized', ... 'Position', [0.44 0.09 0.12 0.02], ... 'Style', 'text', ... 'String', 'Numero de Ciclos',... 'BackgroundColor', get(fig1,'Color'), ... 'FontSize', 10); eFase= uicontrol('Units', 'normalized', ... 'Position', [0.58 0.02 0.12 0.05], ... 'Style', 'edit', ... 'String', Fase, ... 'Callback', 'eNumP_refresh'); lFase= uicontrol('Units', 'normalized', ... 'Position', [0.58 0.09 0.12 0.02], ... 'Style', 'text', ... 'String', 'Fase',... 'BackgroundColor', get(fig1,'Color'), ... 'FontSize', 10); Gdr= uicontrol('Units', 'normalized',... 'Position', [0.72 0.02 0.12 0.05],... 'String', 'Guardar',...

Page 10: Programas Hechos en Matlab Curso 2

'Callback', 'guardar'); %% INVOCAMOS AL OTRO Scrip llamado guardar, ya que ahí se encuentran las instrucciones necesarias para controlar tal evento.

bsal= uicontrol('Units', 'normalized',... 'Position', [0.86 0.02 0.12 0.05],... 'String', 'Salir',... 'Callback', 'clc;clear all;close all;'); eje1= axes('Position', [0.1 0.21 0.8 .69]);plot(t,y,'m.')grid on;title('y=sin(t)');xlabel('t');ylabel('y');axis([0 2*pi*Nc -Amp+Off Amp+Off]) % Con esta línea, ajusto el tamaño de

los ejes de la gráfica de acuerdo a la función.

EL PROGRAMA LLAMADO “GUARDAR” ES EL SIGUIENTE:

[filename, pathname] = uiputfile( ... {'*.txt','archivos de texto'; ... '*.jpg', 'Archivos JPG';... '*.*', 'All Files'}, ... 'Guardar...'); yt=y';raiz= filename(1:find(filename=='.')); % Extraego la dirección de donde voy a guardarsave([pathname raiz 'txt'], 'yt', '-ASCII');print('-f1','-djpeg90','-r300',[pathname raiz 'jpg']);

COMO SE VEIA LA APLICACION:

Page 11: Programas Hechos en Matlab Curso 2

Cada que se tecleara un numero dentro de las cajas de texto se debería de refrescar el sistema, haciendo cálculos pero ahora con los datos nuevos, por lo que fue necesario manejar el evento Callback de cada uno de los controles. Este evento fue manejado para todas las cajas de texto dentro de otro Script que llevaba por nombre eNumP_refresh, en el cual se aplica el siguiente código:

NP= str2num(get(eNumP,'String')); %esta variable va a ser concatenada con el valor que sea modificado en el edit. textif NP<2 %Esto únicamente me sirve como condición inicial NP=2; % Este sería el valor mínimo con el que podría estar llena esta caja de texto. set(eNumP, 'String',NP); % NP ES EL DATO QUE PONDRE en la propiedad de texto EN EL EDIT TEXT LLAMADO eNumPend Amp= str2num(get(eAmP,'String'));if Amp<=0 Amp=1; set(eAmP, 'String',Amp);end Nc= str2num(get(eNc,'String')); if Nc<1 Nc=1; set(eNc, 'String',Nc);

Page 12: Programas Hechos en Matlab Curso 2

end Off=str2num(get(eOff,'String'));Fase= str2num(get(eFase,'String')); % En sí, estas lunes under this code ya están en el programa Guide_comandos% pero como este Script contiene a los datos mas frescos, pues este algoritmo seria% siempre el ultimo en ejecutarse.% Generar vector de tiempot = 0:(2*pi/(NP-1)):(2*pi*Nc); % Calcular funcion senoy = Amp*sin(t+Fase)+Off;plot(t,y,'m.')grid on;title('y=sin(t)');xlabel('t');ylabel('y');axis([0 2*pi*Nc -Amp+Off Amp+Off])

PRACTICA 8:

Esta práctica solo tiene como finalidad pedir al usuario datos necesarios para construir una gráfica senoidal, entre los cuales se piden, número de muestras, frecuencia, amplitud, off-set, y desfasamiento. El siguiente código muestra el código para este programa:

%% COMO HACER MODIFICACIONES A UNA FUNCION SENOclcclear allclose all %Frecuencia a la que sera muestreada la señalfs=input('En cuantos puntos quieres que sea muestreada la señal'); %INTRODUSCO LA AMPLITUD DE LA SEÑALa= input('cuál es la amplitud de la señal'); %INTRODUZCO LA FRECUENCIA A LA QUE IRA LA SEÑALf=input('Cual es la frecuencia'); %SOLICITO EL GRADO DE DEFASAMIETOphase=input('Desfase de la señal'); %SOLICITO EL OFF-SEToff= input('Off-Set de la signal');

Page 13: Programas Hechos en Matlab Curso 2

%Solicito el número de ciclos a graficarn=input('Cuantos ciclos quieres ver de la señal'); %Genero vector de tiempot=0:(2*pi/(fs-1)):2*pi*n; % Calculo la función senoy=off + a*sin(t + phase); %Grafico la funcionplot(t,y,'m.') %Malladogrid on; %Título de la graficatitle('Primer Señal Seno [y=sin(t)]') %Etiquetas para los ejesxlabel('tiempo')ylabel('amplitud') %% Esta línea de abajo me sirvió para ajustar el tamaño de los ejes donde está la señalaxis([0 2*pi*n (-a+off) (a+off)])

PRACTICA 9:

En esta práctica lo que se hizo fue crear una aplicación grafica con la cual se pudiera obtener la media y la varianza de una cierta cantidad

Page 14: Programas Hechos en Matlab Curso 2

de números aleatorios propuestos. El siguiente código muestra las líneas que se necesitaron para crear los controles y demás:

clc;close all;clear all; MAX=0;MIN=0;NPUN=0;MED=0;VAR=0;MREAL=0;MNREAL=0;principal= figure();set(principal,'Units','normalized',... 'Position', [0.1 0.1 0.8 0.8], ... 'Name', 'GRAFICA ALEATORIA',... 'NumberTitle', 'off'); lname= uicontrol('Units', 'normalized', ... 'Position', [0.1 0.90 0.8 0.1], ... 'Style', 'text', ... 'String', 'GRAFICA ALEATORIA', ... 'FontSize', 20,... 'BackgroundColor', get(principal,'color')); Pmax= uicontrol('Units', 'normalized', ... 'Position', [0.2 0.1 0.08 0.05], ... 'Style', 'edit', ... 'String', MAX, ... 'Callback', 'Refres');lPmax= uicontrol('Units', 'normalized', ... 'Position', [0.19 0.14 0.1 0.05], ... 'Style', 'text', ... 'String', 'Maximo Pr.', ... 'FontSize',10,... 'BackgroundColor', get(principal,'color')); Pmin= uicontrol('Units', 'normalized', ... 'Position', [0.3 0.1 0.08 0.05], ... 'Style', 'edit', ... 'String', MIN);lPmin= uicontrol('Units', 'normalized', ... 'Position', [0.29 0.14 0.1 0.05], ... 'Style', 'text', ... 'String', 'Minimo P.', ... 'FontSize',10,... 'BackgroundColor', get(principal,'color')); Npun= uicontrol('Units', 'normalized', ... 'Position', [0.4 0.1 0.08 0.05], ... 'Style', 'edit', ...

Page 15: Programas Hechos en Matlab Curso 2

'String', NPUN);lNpun= uicontrol('Units', 'normalized', ... 'Position', [0.38 0.14 0.12 0.05], ... 'Style', 'text', ... 'String', 'Numero de Puntos', ... 'FontSize',10,... 'BackgroundColor', get(principal,'color')); media= uicontrol('Units', 'normalized', ... 'Position', [0.5 0.1 0.08 0.04], ... 'Style', 'text', ... 'String', MED);lmedia= uicontrol('Units', 'normalized', ... 'Position', [0.49 0.14 0.1 0.05], ... 'Style', 'text', ... 'String', 'Media', ... 'FontSize',10,... 'BackgroundColor', get(principal,'color')); vari= uicontrol('Units', 'normalized', ... 'Position', [0.6 0.1 0.08 0.04], ... 'Style', 'text', ... 'String', VAR); lvari= uicontrol('Units', 'normalized', ... 'Position', [0.59 0.14 0.1 0.05], ... 'Style', 'text', ... 'String', 'Varianza', ... 'FontSize',10,... 'BackgroundColor', get(principal,'color')); Mreal= uicontrol('Units', 'normalized', ... 'Position', [0.7 0.1 0.08 0.04], ... 'Style', 'text', ... 'String', MREAL); lMreal= uicontrol('Units', 'normalized', ... 'Position', [0.69 0.14 0.1 0.05], ... 'Style', 'text', ... 'String', 'Maximo R.', ... 'FontSize',10,... 'BackgroundColor', get(principal,'color')); MNreal= uicontrol('Units', 'normalized', ... 'Position', [0.8 0.1 0.08 0.04], ... 'Style', 'text', ... 'String', MNREAL); lMNreal= uicontrol('Units', 'normalized', ... 'Position', [0.79 0.14 0.1 0.05], ... 'Style', 'text', ... 'String', 'Minimo R.', ... 'FontSize',10,... 'BackgroundColor', get(principal,'color')); Bguar= uicontrol('Units', 'normalized',... 'Position', [0.3 0.02 0.12 0.05],... 'String', 'Guardar',... 'Callback', 'Guardar2');

Page 16: Programas Hechos en Matlab Curso 2

Bsal= uicontrol('Units', 'normalized',... 'Position', [0.5 0.02 0.12 0.05],... 'String', 'Salir',... 'Callback', 'clc;clear all;close all;');generar= uicontrol('Units', 'normalized',... 'Position', [0.7 0.02 0.12 0.05],... 'String', 'Generar',... 'Callback', 'Refres'); graf1= axes('Position', [0.05 0.25 0.90 0.6]);% Generar vector de tiempot = 0:(2*pi/(NPUN-1)):(2*pi);tam= size(t,2);A = (MAX-MIN)*rand(1, tam)+MIN;% Calcular funcion seno plot(t,A,'m-') grid on; title('y=aleatorio'); xlabel('t'); ylabel('y');

A igual que en la otra aplicación grafica, fue necesario invocar a otras graficas, con las cuales se tenia la opción de refrescar los datos, pero también se tenia la opción de llamar al comando guardar.

SCRIPT REFRESH

MAX= str2num(get(Pmax,'String'));MIN= str2num(get(Pmin,'String'));NPUN=str2num(get(Npun,'String'));t = 0:(2*pi/(NPUN-1)):(2*pi);tam= size(t,2);if(MAX<MIN) set(Pmax,'String',MIN); set(Pmin,'String',MAX); MAX= str2num(get(Pmax,'String')); MIN= str2num(get(Pmin,'String'));endif NPUN<2 set(Npun,'String',2);endA = (MAX-MIN)*rand(1, tam)+MIN;% Calcular funcion seno plot(t,A,'--gs','LineWidth',2,... 'MarkerEdgeColor','k',... 'MarkerFaceColor','b',... 'MarkerSize',3); grid on; title('y= aleatoria'); xlabel('t'); ylabel('y');At=A';Media=(sum(At,1))/tam;varianza=sum(((At-Media).^2),1)/tam;maximo=max(At);minimo=min(At);

Page 17: Programas Hechos en Matlab Curso 2

set(Mreal,'String',maximo);set(MNreal,'String',minimo);set(media,'String',Media);set(vari,'String',varianza);

SCRIPT GUARDAR

[filename, pathname] = uiputfile( ... {'*.txt','archivos de texto'; ... '*.jpg', 'Archivos JPG';... '*.*', 'All Files'}, ... 'Guardar...'); At=A';raiz= filename(1:find(filename=='.')); % Extraego la direccion de donde voy a guardarsave([pathname raiz 'txt'], 'At', '-ASCII');print('-f1','-djpeg90','-r300',[pathname raiz 'jpg']);

Con esto logramos tener una aplicación en la cual podíamos proponer un intervalo de valores aleatorios, y también teníamos indicadores de los eventos de mayor y menor valor, así como también no mostraba la gráfica de los puntos generados y en otros cuadros de dialogo se mostraba, indicador que mostraban la media y la varianza de la cantidad de puntos que se dan. La aplicación tenía la siguiente apariencia:

Lo especial de la gráfica es que nos permite guardar la imagen de los puntos generada, así como también nos permite generar un nuevo análisis de puntos dados, pero hasta que se presionara la opción generar dentro de la aplicación gráfica.

Page 18: Programas Hechos en Matlab Curso 2