View
255
Download
0
Category
Preview:
Citation preview
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
Recommended