Matlab2009b -clase2

Post on 12-Apr-2017

255 views 0 download

Transcript of Matlab2009b -clase2

Matlab & Simulink

Prof. Arturo Vilca Román avilca@uni.edu.pe

uni-fiee postgrado

clase2

2

Funciones y gráficos

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

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

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')

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);

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

% 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)

% 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')

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);

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

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

>> f5=factorial(5)

>> factorial(3.4)

>> factorial(-3)

>> help factorial

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

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

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

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

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;

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)

• satura(6.5, min, max)6.5

• satura(10.5, min, max)10

• Satura(-1.5, min, max)0

Ejplo 1

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

% 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;

% 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)])

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

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

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

Superficies

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

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])

surf, surfc, surfl

• contour3(X,Y,Z,100)

• contour(X,Y,Z)

Proyección sobreel plano xy

Programación estructurada

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

for, if

para n veces

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

end

while

• Mientras que

while <condición><< instrucciones>>

end

break

• Permite salir de un bucle for o while

if i>nbreak

end

switch…case

switch <variable> case 1

case 2…case notherwise

end

>> 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

>> 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

• return– Permite regresar al programa llamador

• error– Muestra mensajes de error e interrumpe el programa

error(‘mensaje de error’)

• >> earthmap

• traza1.m• traza2.m

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

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

• h =

• 159.0094

• >> get(h,'LineWidth')

• ans =

• 2

• >> get(h,'Markersize')

• ans =

• 6

Lenguaje Tex

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

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

• 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})

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

• f2 =

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

Histogramas

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

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

hist

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

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

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])

Diagramas circulares

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

fplot

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

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

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

openvar• Edita una variable en la ventana del editor

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

Curvas contínuas

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

– Sub-ventana p de m lineas y n columnas

Curvas contínuas

Curvas discretas

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

• stairs– Traza la curva en forma de escaleras

Curvas discretas

hndlgraf

Scripts .m

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

de trabajo

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

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

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

• factorial.m

• >> f5=factorial(5)

• f5 =

• 120

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

• f5 =

• 120

• >>

Entrada interactiva

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

• 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

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

• 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

• 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

Derivada de una función

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

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

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

-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

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,'-.')

-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

• P_integral =polyquad([6 2 1])

Circuito RLC

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

• 0 a 5000 ciclos/s

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

Transformada de Fourier discreta

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

• apl_tfd.m– programa