REFERENCIA DE MATLAB 1/58
INSTRUCCIONES 2/58
ARRAYS 3/58
ARRAYS x=[0.1*pi 0.2*pi 0.3*pi 0.4*pi 0.5*pi 0.6*pi 0.7*pi 0.8*pi 0.9*pi pi] y=sin(x) x(3) % el tercer elemento de X x(1:5) % los 5 elementos de X y(3:-1:1) % los 3, 2 y 1 elementos de Y x(2:2:7) % los 2 4 y 6 elementos y([8 2 9 1]) % los elementos de Y en el orden que se quiera x=(0:0.1:1)*pi % crea un array comenzando con 0 incrementa de 0.1 y termina en 1 4/58
BUCLE FOR 5/58
En cada iteración se asigna a x la próxima columna del array. BUCLE FOR for x = array …ordenes… end Las ordenes entre las sentencia for y end se ejecutan una vez para cada columna en el array. En cada iteración se asigna a x la próxima columna del array. 6/58
BUCLE FOR for n = 1 : 10 x(n)=sin(n*pi/10); end 7/58
BUCLE FOR A = 1 : 2 : 10 for n = A n x(n)=sin(n*pi/10); end % n tomó los valores : 1 3 5 7 9 x= 0.3090 0 0.8090 0 1.0000 0 0.8090 0 0.3090 8/58
Un bucle for no se puede terminar reasignando la variable de control x(n)=sin(n*pi/10); n=10; end x=0.3090 0.5879 0.8090 0.9511 1.0000 0.9511 0.8090 0.5878 0.3090 0.0000 9/58
BUCLE FOR Cualquier array MATLAB es valido en una bucle for data=[3 9 45 6; 7 16 -1 5]; data = 3 9 45 6 7 16 -1 5 for n = data x=n(1)-n(2); end x= -4 x= -7 x= 46 x= 1 10/58
BUCLE FOR Los bucles for se pueden anidar for n = 1:5 for m=5:-1:1 A(n,m)=n^2+m^2; end disp (n) 1 2 3 4 5 11/58
BUCLE FOR A= 2 5 10 17 26 5 8 13 20 29 10 13 18 25 34 17 20 25 32 41 26 29 34 41 50 12/58
BUCLE FOR Las bucles for se deben de evitar siempre que haya un método de un array equivalente. for n = 1 : 10 x(n)=sin(n*pi/10); end ES EQUIVALENTE A n=1:10; x=sin(n*pi/10); 13/58
BUCLE WHILE 14/58
BUCLE WHILE Las bucles while evalúan un conjunto de ordenes un numero infimito de veces. while expresion …ordenes … end Las ordenes se ejecutan mientras que los elementos en expresión son verdaderos. 15/58
BUCLE WHILE num=0; Sum=0; while num < 10 Sum=Sum + num; num=num+1; end 16/58
ESTRUCTURA IF - ELSE 17/58
ESTRUCTURA IF - ELSE if expresion …ordenes… end Las ordenes se evalúan si los elementos son verdaderos (distintos de cero) 18/58
ESTRUCTURA IF - ELSE manzanas=10; costo=manzanas*25; if manzanas > 5 % aplicar 20% de descuento costo=(1-20/100)*costo; end costo = 200 19/58
ESTRUCTURA IF - ELSE if expresion % se ejecuta si expresion es verdadero else % se ejecuta si expresion es falso end 20/58
ESTRUCTURA IF - ELSE if expresion1 % se ejecuta si expresion1 es verdadera elseif expresion2 % se ejecuta si expresion2 es verdadera elseif expresion3 % se ejecuta si expresion3 es verdadera elseif expresion4 else % se ejecuta si ninguna expresion es verdadera end 21/58
ESTRUCTURA IF - ELSE if expresion1 % se ejecuta si expresion1 es verdadera elseif expresion2 % se ejecuta si expresion2 es verdadera elseif expresion3 % se ejecuta si expresion3 es verdadera elseif expresion4 else % se ejecuta si ninguna expresion es verdadera End Solo se evalúa la primera expresión verdadera encontrada. La instrucción else puede no aparecer … 22/58
ESTRUCTURA CASE 23/58
ESTRUCTURA CASE switch expresion case case_exp1 …ordenes case {case_expr1, case_expr2, case_expr3,...} otherwise end 24/58
ESTRUCTURA CASE method = 'Bilinear'; switch lower(method) case {'linear','bilinear'} disp('Method is linear') case 'cubic' disp('Method is cubic') case 'nearest' disp('Method is nearest') otherwise disp('Unknown method.') end Respuesta : Method is linear 25/58
INSTRUCCION BREAK 26/58
Termina la ejecución de los bloques if for while y case INSTRUCCION BREAK break Termina la ejecución de los bloques if for while y case 27/58
INSTRUCCION BREAK method = 'Bilinear'; switch lower(method) case {'linear','bilinear'} disp('Method is linear') a=28 if 1 break end b=13 case 'cubic' disp('Method is cubic') case 'nearest' disp('Method is nearest') otherwise disp('Unknown method.') End a= 28 28/58
INSTRUCCION BREAK a=1:1:4 if 1 a(1) a(2) break a(3) a(4) end ans = 1 29/58
INSTRUCCION BREAK method = 'Bilinear'; switch lower(method) case {'linear','bilinear'} disp('Method is linear') break disp('Method is NO linear') % se salta esta linea case 'cubic' disp('Method is cubic') case 'nearest' disp('Method is nearest') otherwise disp('Unknown method.') end 30/58
FUNCIONES 31/58
FUNCIONES Una función debe de estar escrita en un archivo que lleva el nombre de la función. e.g. MYFUNCTION.M 32/58
FUNCIONES El archivo de la función (MYFUNCTION.M) debe de contener en el encabezado la descripción de la función con comentarios Archivo SUMAITV.m % HOLA MUNDO % MI PRIMERA FUNCTION % SUMAITV(x,y) % TOMA 2 ARRELOS Y LOS SUMA ELEMENTO A ELEMENTO % COPYRIGHT (c) SIMULACION 1 de 10:00 - 11:00 Este texto se muestra como ayuda en línea en MATLAB cuando de escribe: Help ‘SUMAITV’ 33/58
function z = SUMAITV(x,y) z=x+y; FUNCIONES Después del encabezado la descripción sigue el código MATLAM que implementa la función: Archivo SUMAITV.m function z = SUMAITV(x,y) z=x+y; 34/58
FUNCIONES Archivo SUMAITV.m Cualquier archivo .M puede utilizar la función: Archivo SUMAITV.m function z = SUMAITV(x,y) z=x+y; 35/58
FUNCIONES Archivo SUMAITV.m function z = SUMAITV(x,y) z=x+y; % HOLA MUNDO % MI PRIMERA FUNCTION % SUMAITV(x,y) % TOMA 2 ARRELOS Y LOS SUMA ELEMENTO A ELEMENTO % COPYRIGHT (c) SIMULACION 1 de 10:00 - 11:00 % Si x = 1 2 3 4 5 6 7 8 9 10 y % Si y = 1 2 3 4 5 6 7 8 9 10 % regresa % z = 2 4 6 8 10 12 14 16 18 20 function z = SUMAITV(x,y) z=x+y; Archivo M5.m x=(1:1:10) y=x z=SUMAITV(x,y) x = 1 2 3 4 5 6 7 8 9 10 y = 1 2 3 4 5 6 7 8 9 10 z = 2 4 6 8 10 12 14 16 18 20 36/58
EJEMPLOS 37/58
G1 x=linspace(0,2*pi,30); y=sin(x); z=x.*y; plot3(x,y,z); 38/58
G2 x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y,x,y,'+'); 39/58
x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y,'+',x,z,'+'); G3 40/58
G4 x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(y,z); 41/58
x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y,x,2*y.*z,'--'); G5 42/58
G6 x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y,x,2*y.*z,'--'); grid 43/58
G7 x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot(x,y,x,2*y.*z,'--'); grid xlabel('Independent variable X'); 44/58
G8 x=linspace(0,2*pi,30); y=sin(x); z=cos(x); %grafica la funcion 2sin(teta)cos(teta)=sen(2Teta) plot(x,y,x,2*y.*z,'--'); grid xlabel('Independent variable X'); ylabel('Dependent variables'); 45/58
G9 x=linspace(0,2*pi,30); y=sin(x); z=cos(x); %grafica la funcion 2sin(teta)cos(teta)=sen(2Teta) plot(x,y,x,2*y.*z,'--'); grid xlabel('Independent variable X'); ylabel('Dependent variables'); title('2sin(teta)cos(teta)=sen(2Teta)') 46/58
x=linspace(0,2*pi,30); y=sin(x); z=cos(x); plot3(y,z,x); grid; G10 47/58
G11 x=-7.5:.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; % distancia al origen Z=sin(R)./R; % calcula sin(r)/r mesh(X,Y,Z); 48/58
G15 x=-7.5:.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; % distancia al origen Z=sin(R)./R; % calcula sin(r)/r mesh(X,Y,Z); surf(X,Y,Z); mesh(peaks); % title('mesh plot of the Peaks function'); 49/58
G17 x=-7.5:.5:7.5; y=x; [X,Y]=meshgrid(x,y); R=sqrt(X.^2+Y.^2)+eps; % distancia al origen Z=sin(R)./R; % calcula sin(r)/r mesh(X,Y,Z); surf(X,Y,Z); mesh(peaks); % title('mesh plot of the Peaks function'); [x,y,z]=peaks; contour(x,y,z,20); % genera 20 contornos 2D contour3(x,y,z,20); % la misma grafica de contornos en 3D axis([-3 3 -3 3 -6 8]) % ajusta la escala 50/58
G18 x=linspace(0,2*pi,30); y=sin(x); z=cos(x); a=2*sin(x).*cos(x); b=sin(x)./(cos(x)+eps); subplot(2,2,1); % selecciona la subgrafica superior izquierda plot(x,y),axis([0 2*pi -1 1]),title('sin(x)'); subplot(2,2,2); % seleciona la subgrafica superior derecha plot(x,z),axis([0 2*pi -1 1]),title('cos(x)'); subplot(2,2,3); % seleciona la subgrafica inferior izquierda plot(x,a),axis([0 2*pi -1 1]),title('2sin(x)cos(x)'); subplot(2,2,4); % seleciona la subgrafica inferior derecha plot(x,b),axis([0 2*pi -20 20]),title('sin(x)/cos(x)'); %subplot(1,1,1); % regresa al modo de grafica de una sola ventana 51/58
G19 M=peaks(25); plot(M); title('Peaks Plot for ZOOM'); zoom on; 52/58
G20 t=0:.01:2*pi; r=sin(2*t).*cos(2*t); polar(t,r); title('Polar Plot of sin(2t)cos(2t)'); 53/58
G21 x=-2.9:0.2:2.9; y=exp(-x.*x); bar(x,y); title('Bar chart of a Bell Curve'); 54/58
G22 x=-2.9:0.2:2.9; y=exp(-x.*x); stairs(x,y); title('Stair chart of a Bell Curve'); 55/58
G23 t=rand(1000,1)*pi; rose(t); title('Angle Histogram of Random Angles'); 56/58
G24 x=linspace(-2*pi,2*pi,60); y=sin(x).^2./(x+eps); plot(x,y); title('Plot of sin(x)^2/x'); [a,b]=ginput(8); % captura 8 puntos hold on; plot(a,b,'co'); % representa los puntos capturados hold off; 57/58
G25 colormap(gray); surfl(peaks),shading interp title('Surf plot of Peaks With Default Lighting'); 58/58