Matlab2009b -clase2

89
Matlab & Simulink Prof. Arturo Vilca Román [email protected] uni-fiee postgrado clase 2

Transcript of Matlab2009b -clase2

Page 1: Matlab2009b  -clase2

Matlab & Simulink

Prof. Arturo Vilca Román [email protected]

uni-fiee postgrado

clase2

Page 2: Matlab2009b  -clase2

2

Funciones y gráficos

Page 3: Matlab2009b  -clase2

Ficheros .m

• Sistema de ecuaciones

-cos x + y = -0.5ln(x+1) – 3 arcsen y = 2.5

y1 = cos x – 0.5y2 = sen ln(x+1) – 2.5

3

Page 4: Matlab2009b  -clase2

Solución numérica y gráficaíndices de las soluciones:

i = 1568 4982 7466

valores de las soluciones:

sol = 1.5670 4.9810 7.4650

Page 5: Matlab2009b  -clase2

x = 0:0.001:10;y1=cos(x)-0.5;y2=sin((-2.5+log(x+1))/3);plot(x,y1)hold onplot(x,y2)gridi=find(abs(y1-y2)<0.0005);disp('índices de las soluciones:')idisp('valores de las soluciones:')sol = x(i)h = plot(x(i), y1(i), '*');set(h,'Linewidth',5)xlabel('variable x')ylabel('valores de las funciones y1 y y2')title('solución gráfica de un sistema de ecuaciones')

Page 6: Matlab2009b  -clase2
Page 7: Matlab2009b  -clase2

Programa

% dominio de valores de la variable xx = 0:0.001:10; % funciones y1 y y2y1=cos(x)-0.5;y2=sin((-2.5+log(x+1))/3);

Page 8: Matlab2009b  -clase2

% gráfica de y1plot(x,y1) % retiene la ventana para graficar y2hold on % gráfica de y2plot(x,y2) % rejillagrid

Page 9: Matlab2009b  -clase2

% se buscan los índices de los vectores x, y1 o y2% que cumplen que y1 = y2 con una precisión de 0.0005i=find(abs(y1-y2)<0.0005); % impresión de los índices de las solucionesdisp('índices de las soluciones:')i % impresión de las solucionesdisp('valores de las soluciones:')sol = x(i)

Page 10: Matlab2009b  -clase2

% trazado de los puntos de intersección de las 2 curvas % usando los valores de los índicesh = plot(x(i), y1(i), '*');set(h,'Linewidth',5) % leyendas de los ejesxlabel('variable x')ylabel('valores de las funciones y1 y y2')title('solución gráfica de un sistema de ecuaciones')

Page 11: Matlab2009b  -clase2

Funcionesfunction fact = factorial(n)% esta función calcula el factorial% de un numero entero n % comprueba que el argumento de entrada sea% un número entero y positivoif ~((fix(n)==n) &(n>=0)) error('el número debe ser entero positivo')end % cálculo del factorialfact = prod(1:n);

Page 12: Matlab2009b  -clase2

fix>> help fix FIX Round towards zero. FIX(X) rounds the elements of X to the nearest integers towards zero. See also floor, round, ceil.

Overloaded functions or methods (ones with the same name in other directories)

help darray/fix.m help sym/fix.m

Reference page in Help browser doc fix

Page 13: Matlab2009b  -clase2

Uso de la función>> factorial(5)

>> f5=factorial(5)

>> factorial(3.4)

>> factorial(-3)

>> help factorial

Page 14: Matlab2009b  -clase2

Recursividad

function fact = factorial2(n)% retorna el factorial de un número entero n% Si no es un entero o es negativo la función% muestra un mensaje de error if fix(n)~=n |n<0 help factorial2 error('la función solo acepta enteros naturales!')end % método recursivoif n==0 fact=1;else fact=n*factorial2(n-1);end

Page 15: Matlab2009b  -clase2

Bucle for% Instrucciones de control: bucle for

% inicialización vector=[];for i=1:inf % resto de la division de i por 5 if (rem(i,5)==0) % concatenación vector=[vector i]; end if length(vector)==10 % salida del bucle for break endend

>> bucle_for

>> vector

vector =

Columns 1 through 9

5 10 15 20 25 30 35 40 45

Column 10

50

Page 16: Matlab2009b  -clase2

Bucle while% Instrucciones de control: bucle

whilevector=[];i=1;while (length(vector)<10) i=i+1; if (rem(i,5)==0) vector=[vector i]; endend

>> bucle_while

>> vector

vector =

Columns 1 through 9

5 10 15 20 25 30 35 40 45

Column 10

50

Page 17: Matlab2009b  -clase2

Señal saturada• Tenemos una señal u(t)

• Limitar esta señal entre los valores– max– min

• min=0; max=10• satura(6.5, min, max) 6.5• satura(10.5, min, max) 10• Satura(-1.5, min, max) 0

Page 18: Matlab2009b  -clase2

Función saturarfunction limite = saturar(u, min, max) % limitación de una señal % si señal < min entonces señal = min, % si señal > max entonces señal = max, % si min <= señal <= max la señal no se modifica % expresiones lógicas retornan 0(F) ó 1(V) expr1 = (u >= max); expr2 = (u <= max); expr3 = ((u < max) & (u > min)); limite = expr1 .* max + expr2 .* min + expr3.*u;

Page 19: Matlab2009b  -clase2

Señal a saturarclose allclear all% los límites de la señalmin = 0; max = 10; % señal sinusoidal con ruidot = 0:100;ruido = 3*randn(size(t));u = 15*sin(0.1*t)+ ruido;

% la saturaciónsgn = saturar(u,min,max); % señal no saturadafigure(1)plot(t,u); % señal saturadahold onh=plot(t,sgn);set(h,'LineWidth',2)

Page 20: Matlab2009b  -clase2

• satura(6.5, min, max)6.5

• satura(10.5, min, max)10

• Satura(-1.5, min, max)0

Page 21: Matlab2009b  -clase2

Ejplo 1

• Escribir un programa que calcula media y la varianza de una serie de valores

Page 22: Matlab2009b  -clase2

% cierra todas las ventanas graficasclose all

% borra todas las variables del espacio de trabajoclear all

% calcular la media y la varianza de una serie de valores% sinusoide entre -2pi y +2pix=-2*pi:pi/10:2*pi;y=sin(x);

% ruido gaussiano del mismo tamaño que x e y% con varianza 1b=randn(size(x));

z=y+b;

Page 23: Matlab2009b  -clase2

% calculo de la media y la varianzamed_z=mean(z);var_z=std(z)^2;

% trazado de la señal ruidosa e impresion de resultados% trazado de los diferentes puntos con el simbolo '*'plot(x,z,'*')hold on % para trazar otra curva sobre el mismo grafico

% trazado de la curva que pasa por esos puntosplot(x,z)

% anotaciones en los ejesxlabel('variable x')ylabel('sinusoide ruidosa')title('media y varianza de una serie de valores')

% impresion de valores en la ventana graficagtext([' media : ' num2str(med_z)])gtext([' varianza : ' num2str(var_z)])

Page 24: Matlab2009b  -clase2

gtext

• Muestra un texto en una ventana en el lugar seleccionado con el mouse

• Acepta una cadena de caracteres o una tabla de cadenas con la transformación de caracteres a valor numérico por el comando num2str

Page 25: Matlab2009b  -clase2
Page 26: Matlab2009b  -clase2
Page 27: Matlab2009b  -clase2

Curvas en 3D• plot3(x,y,z)

Page 28: Matlab2009b  -clase2

clear all, close all x=-2*pi:pi/100:2*pi; % vector y (2da dimensión)y = 2*x; % vector z (3ra dimensión) z = sinc(x-y); % trazado de la función en 3D% retorna el puntero hh=plot3(x,y,z); % grosor del trazoset(h,'LineWidth',2)grid

Page 29: Matlab2009b  -clase2

Superficies

x=-1:0.1:1;y=2*x;[X,Y]=meshgrid(x,y);Z=sinc(X).*exp(-X.^2 -Y.^2);mesh(Z)

Page 30: Matlab2009b  -clase2

meshcx = -1:0.1:1;y = 2*x;[X,Y] = meshgrid(x,y);Z = exp(X.^2 - Y.^2);meshc(Z)axis([0 20 0 20 0 3])

Page 31: Matlab2009b  -clase2

surf, surfc, surfl

Page 32: Matlab2009b  -clase2

• contour3(X,Y,Z,100)

• contour(X,Y,Z)

Proyección sobreel plano xy

Page 33: Matlab2009b  -clase2

Programación estructurada

• La posibilidad de hacer llamadas a funciones permiten una modularidad y una estructuración de los programas

Page 34: Matlab2009b  -clase2

for, if

para n veces

for variable = inicio :paso :fin<<instrucciones>>

end

Page 35: Matlab2009b  -clase2

while

• Mientras que

while <condición><< instrucciones>>

end

Page 36: Matlab2009b  -clase2

break

• Permite salir de un bucle for o while

if i>nbreak

end

Page 37: Matlab2009b  -clase2

switch…case

switch <variable> case 1

case 2…case notherwise

end

Page 38: Matlab2009b  -clase2

>> n_par_impar_primo('impar', 20)

números impares entre 0 y 20

numeros_impares =

Columns 1 through 9

1 3 5 7 9 11 13 15 17

Column 10

19

Page 39: Matlab2009b  -clase2

>> n_par_impar_primo('impar',20)números impares entre 0 y 20

numeros_impares =

1 3 5 7 9 11 13 15 17 19

Page 40: Matlab2009b  -clase2

• return– Permite regresar al programa llamador

• error– Muestra mensajes de error e interrumpe el programa

error(‘mensaje de error’)

Page 41: Matlab2009b  -clase2

• >> earthmap

• traza1.m• traza2.m

Page 42: Matlab2009b  -clase2

traza1.m• x=-2*pi:pi/100:2*pi;• • % grafico de y=senx/x• y=sinc(x);• plot(x,y)• • % dimensiones de los ejes• axis([-7.5 7.5 -0.5 1.2])• grid

Page 43: Matlab2009b  -clase2

traza2.m• x=-2*pi:pi/100:2*pi;• • y=sinc(x);• • % retorna un manejador h• h=plot(x,y)• % grosor del trazo• set(h,'LineWidth',2)• • axis([-7.5 7.5 -0.5 1.2])• grid

Page 44: Matlab2009b  -clase2

• h =

• 159.0094

• >> get(h,'LineWidth')

• ans =

• 2

• >> get(h,'Markersize')

• ans =

• 6

Page 45: Matlab2009b  -clase2
Page 46: Matlab2009b  -clase2
Page 47: Matlab2009b  -clase2
Page 48: Matlab2009b  -clase2
Page 49: Matlab2009b  -clase2
Page 50: Matlab2009b  -clase2

Lenguaje Tex

• f1=texlabel('sin(sqrt(lambda^2+gamma^2))/sqrt(lambda^2+gamma^2)')

• f2='{\lambda}_{3} e^{sqrt}{\alpha})}'

Page 51: Matlab2009b  -clase2

• f1=texlabel('sin(sqrt(lambda^2+gamma^2))/sqrt(lambda^2+gamma^2)')

• f1 =

• {sin}({sqrt}({\lambda}^{2}+{\gamma}^{2}))/{sqrt}({\lambda}^{2}+{\gamma}^{2})

Page 52: Matlab2009b  -clase2

• f2='{\lambda}_{3} e^{-{sqrt}{(\alpha})}'

• f2 =

• {\lambda}_{3} e^{-{sqrt}{(\alpha})}

Page 53: Matlab2009b  -clase2
Page 54: Matlab2009b  -clase2

Histogramas

• >> x=[5 2 1; 3 1 8; 2 4 1]

• bar(x), grid• barh(x)• bar(… ‘stack’)

Page 55: Matlab2009b  -clase2

hist

• >> x=randn(1,1000); %normal• >> hist(x,100)• >> grid

• >> x=rand(1,1000); % uniforme• >> hist(x,100)• >> grid

Page 56: Matlab2009b  -clase2
Page 57: Matlab2009b  -clase2

Histogramas en superficies• x =

• 5 1 3• 6 3 8• 9 6 15

• >> area(x)• >> hold on• >> plot(cumsum(x')','*','LineWidth',3)• >> grid• >> set(gca,'Xtick',[1 2 3])

Page 58: Matlab2009b  -clase2
Page 59: Matlab2009b  -clase2
Page 60: Matlab2009b  -clase2
Page 61: Matlab2009b  -clase2

Diagramas circulares

• >> x=[100 10 25 45];• >> fuera=[1 0 0 1];• >> etiquetas={'A','B','C','D'};• >> pie(x,fuera,etiquetas)

Page 62: Matlab2009b  -clase2

fplot

• fplot('1-sinc(x)', [-2*pi 2*pi]), xlabel('x=[-2\pi 2\pi]')

• h=gca, set(h,'linewidth',2)

Page 63: Matlab2009b  -clase2

gca>> help gca

GCA Get handle to current axis. H = GCA returns the handle to the current axis in the current figure. The current axis is the axis that graphics commands like PLOT, TITLE, SURF, etc. draw to if issued. Use the commands AXES or SUBPLOT to change the current axis to a different axis, or to create new ones. See also axes, subplot, delete, cla, hold, gcf, gcbo, gco, gcbf.

Reference page in Help browser doc gca

Page 64: Matlab2009b  -clase2

openvar• Edita una variable en la ventana del editor

>> x=rand(5,10);>> openvar('x')

Page 65: Matlab2009b  -clase2

Curvas contínuas

• plot(x,y,cadena)• subplot(mnp)

– Sub-ventana p de m lineas y n columnas

Page 66: Matlab2009b  -clase2

Curvas contínuas

Page 67: Matlab2009b  -clase2

Curvas discretas

• stem(x,y)– Traza líneas verticales terminadas por un circulo

• stairs– Traza la curva en forma de escaleras

Page 68: Matlab2009b  -clase2

Curvas discretas

Page 69: Matlab2009b  -clase2

hndlgraf

Page 70: Matlab2009b  -clase2
Page 71: Matlab2009b  -clase2

Scripts .m

• No aceptan argumentos de llamada• No retornan valores• Operan únicamente sobre las variables del espacio

de trabajo

Page 72: Matlab2009b  -clase2

Funciones

• Pueden aceptar argumentos de llamada y re-envio de resultados

• Las variables internas son locales a menos que sean declaradas globales

• Las funciones son útiles porque extienden las posibilidades del lenguaje

Page 73: Matlab2009b  -clase2

Descripción de una Función

• La línea de definición con la palabra clave function• 1ra línea de comentario

– lookfor• Algunas lineas de comentario

– help mi_funcion• Cuerpo de la función

Page 74: Matlab2009b  -clase2

• Escriba una función para calcular el factorial de un número entero

• factorial.m

Page 75: Matlab2009b  -clase2

• >> f5=factorial(5)

• f5 =

• 120

• >> f5=feval('factorial',5)

• f5 =

• 120

• >>

Page 76: Matlab2009b  -clase2

Entrada interactiva

function volumenr=input('ingrese radio ')vol = (4/3)*pi*r^3;disp('volumen es ')disp(vol)

Page 77: Matlab2009b  -clase2

• Escribir un programa que calcula media y la varianza de una serie de valores

• El script llama a 3 funciones– Genera la señal ruidosa– Calcula la media y la varianza– Muestra la curva

Page 78: Matlab2009b  -clase2

• calcular.m– genera_serie.m– calcula_med_var.m– traza_serie.m

Page 79: Matlab2009b  -clase2

• genera_serie.mfunction z = genera_serie

– Retorna el vector z sin recibir parámetros de llamada

• calcula_med_var.mfunction [med, var]= calcula_med_var(w)

– Retorna un vector con la media y la mediana después de recibir la señal z

• traza_serie.mfunction traza_serie(x,z)

– Recibe los vectores x y z para el trazado y no regresa argumentos

Page 80: Matlab2009b  -clase2

• La variable x es declarada global en la función que la genera y las que la utilizan

• global x y z• isglobal(x)

– Regresa 1 si es global– 0 si no lo es

Page 81: Matlab2009b  -clase2

Derivada de una función

• >> x = [0 3 8 1];• >> diff(x)

• >> p= [ 1 0 -1]• >> p_derivada = polyder(p)

Page 82: Matlab2009b  -clase2

derivada.m

x = -1:.01:1; % intervalo de la variable xf = x.^2-1; % función a derivarplot(x,f); % trazado de la función f(x)dx = diff(x); % incrementos dx de la variable xdf = diff(f); % incrementos df de la función f(x)df_dx = df./dx; % derivada de f(x)hold onplot(x(1:length(x)-1),df_dx,':'); axis([-1 1 -2 2])grid

Page 83: Matlab2009b  -clase2

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-2

-1.5

-1

-0.5

0

0.5

1

1.5

2

Page 84: Matlab2009b  -clase2

integral.mdx = 0.001; % paso de integracióna = -1; b = 1; % limites del dominio de integraciónx = a:dx:b; y = x; g = cumsum(y.*dx); % suma acumulada de las áreas

% de los rectángulos% trazado de la integralplot(x,g), hold on% trazado de la función y = f(x)plot(x,y,'-.')

Page 85: Matlab2009b  -clase2

-1 -0.8 -0.6 -0.4 -0.2 0 0.2 0.4 0.6 0.8 1-1

-0.8

-0.6

-0.4

-0.2

0

0.2

0.4

0.6

0.8

1

Page 86: Matlab2009b  -clase2

• P_integral =polyquad([6 2 1])

Page 87: Matlab2009b  -clase2

Circuito RLC

• R = 100 ohmios• L = 0.1H• C = 1mF

• 0 a 5000 ciclos/s

Page 88: Matlab2009b  -clase2

Filtro de Butterworth

• Orden y frecuencia de corte• n=9; fc= 1.078e+004 Hz

• Atenuación en dB a las frecuencias f1 y f2• 1.0000 48.3172

Page 89: Matlab2009b  -clase2

Transformada de Fourier discreta

• función tfd– Calcula la TFD de una señal

• apl_tfd.m– programa