Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manual de Matlab2010i
Manual de Matlab2010i
% valorinicial: primer valor del tiempo para el que queremos representar la función
% intervalo: separación entre dos valores consecutivos del vector base de tiempos
% valorfinal: último valor del tiempo para el que queremos representar la función
La selección del intervalo está condicionada por dos requisitos contrapuestos. Por una parte, cuanto más
pequeño sea, más precisa será la representación de la función; en otras palabras, la representación tendrá un
aspecto más continuo, mientras que, cuanto más grande sea, la representación se parecerá más a un conjunto
de puntos (los valores de la función para los distintos instantes) unidos por líneas. La operación de unir los
diferentes puntos de la representación es ejecutada automáticamente por Matlab. Por otro lado, cuanto más
pequeño sea el intervalo, más tiempo tardará Matlab en completar la instrucción y mayor espacio de memoria
se ocupará en el ordenador. Para intervalos excesivamente pequeños, que den origen a un gran número de
valores en la base, la instrucción puede ser rechazada por el programa, ya que éste impone un límite máximo
(que depende de la versión concreta de Matlab de la que se trate) al número de elementos que puede contener
un vector.
Una forma equivalente para definir la base de tiempos consiste en utilizar la instrucción
Obsérvese que ambas formas son completamente equivalentes ya que existe una relación inmediata entre la
separación entre dos valores de la base de tiempos y el número de puntos incluidos en ella. Obviamente, en la
instrucción linspace los valores del tiempo están equiespaciados en la base.
Antes de continuar conviene precisar que estas formas de definir la base de tiempos se denominan lineales,
ya que la variación entre los distintos valores del tiempo incluidos en la base es lineal. Existen otras formas
de variar los valores del tiempo (o de otras variables) en la base, pero serán tratadas más adelante.
Relacionados con la base de tiempos hay otros aspectos que conviene destacar. El primero de ellos es cómo
determinar el número total de valores del tiempo incluidos en la base. Para ello puede usarse la instrucción
Para determinar en qué posición de la base se encuentra un determinado valor del tiempo puede usarse la
instrucción
De esta forma tendríamos en el eje de abscisas las posiciones del vector y en el eje de ordenadas los valores
correspondientes a dichas posiciones. Este tipo de representación gráfica apenas tiene interés con relación a
los objetivos del presente manual.
La forma habitual de representar gráficamente una función consiste en utilizar la instrucción
Así obtendríamos un conjunto de puntos, denotados por pequeños círculos, tales que cada uno está definido
por un par de valores de t y de y. La representación se completa con líneas verticales que unen los distintos
puntos con el eje de abscisas.
Con lo indicado hasta aquí basta para obtener una representación gráfica de cualquier función real continua.
Sin embargo, en numerosos casos de interés práctico conviene editar la representación (es decir, alterar
algunos aspectos adicionales de la misma) a fin de destacar ciertos detalles de aquélla o facilitar su
interpretación.
En principio, Matlab hace las representaciones con línea continua. Pero también es posible conseguir una
representación a puntos o a rayas discontinuas de la curva. En ese caso, la instrucción a utilizar es
También puede variarse el grosor de la línea representativa de la función y(t). Para ello puede utilizarse la
instrucción
A falta de indicación respecto al grosor a utilizar, Matlab representa la función automáticamente con un
grosor de 1 punto.
Con la curva representada en la gráfica Matlab asigna automáticamente los identificativos correspondientes a
los ejes de abscisas y de ordenadas (por ejemplo, “tiempo” y “corriente”, respectivamente), al igual que lo
hace con los números que han de figurar en tales ejes. Tales identificativos pueden ser modificados mediante
la instrucción
Para modificar las características de los números que aparecen en los ejes puede utilizarse la instrucción
set (gca, ‘FontName’, ‘f’, ‘Fontsize’, s) % Cambia las características de los números de los
ejes
% f: tipo de letra (Helvética, Times, Courier, etcétera)
% s: tamaño de letra (10, 12, 14,... puntos)
Las rectas que definen la malla parten de los puntos de los ejes a los que se ha asignado números en la
representación.
En ocasiones puede interesarnos tener, no una malla completa, sino una restringida. Es decir, se trata de
marcar determinados puntos especiales en los ejes y hacer que salgan únicamente de ellos las rectas de la
malla. Además, podemos querer etiquetar los puntos de los ejes desde los que parten las rectas de la malla.
Ambas funciones pueden realizarse de forma combinada mediante la instrucción
set (gca, ‘xtick’, [x1 x2 ... xn], % Etiqueta los ejes coordenados
‘XTickLabel’, {‘tx1’; ‘tx2’; ... ‘txn’}, % y define una malla
‘ytick’, [y1 y2 ... ym], % especificada por el usuario
‘YTickLabel’, {‘ty1’; ‘ty2’; ... ‘tym}’)
% x1 x2 ... xn: puntos del eje de abscisas de los cuales han de partir las rectas de la malla
% tx1 tx2 ... txn: textos asignados a los puntos del eje de abscisas de los cuales han de
partir las rectas de la malla
% y1 y2 ... ym: puntos del eje de ordenadas de los cuales han de partir las rectas de la malla
% ty1 ty2 ... tym: textos asignados a los puntos del eje de ordenadas de los cuales han de
partir las rectas de la malla
% Esta instrucción ha de ir precedida de la de grid on
Evidentemente, esta instrucción puede incluir las características de las letras (tipo y tamaño) que se desean.
Para ello basta incluir las especificaciones correspondientes, indicadas más arriba, a continuación de la
especificación de los textos de cada eje.
Obtención de distintas curvas con una sola rutina
En principio, si damos a Matlab las instrucciones para representar distintas curvas como resultado de la
ejecución de una única rutina, el programa nos presentará sólo la última. Para poder ver todas las curvas
generadas como consecuencia de la ejecución de la rutina hay distintas posibilidades.
figure % Permite obtener distintas figuras mediante la ejecución de una sola rutina
% La instrucción ha de insertarse separando los bloques
% correspondientes a las especificaciones de cada representación
Las distintas figuras son presentadas de forma agrupada, de modo que en principio sólo se ve la última.
Desplazando el cuadro correspondiente a ésta, aparece a la vista la figura precedente.
Una alternativa a esta posibilidad consiste en utilizar la instrucción
En este caso cada figura desaparece antes de ser presentada la siguiente, pero sólo cuando el usuario pulsa la
tecla de retorno; mientras no lo hace, se mantiene la imagen de la última figura generada. Para evitar la
interacción entre dos programas que contienen esta instrucción y que se ejecutan secuencialmente conviene
cerrar cada uno de ellos con la instrucción
Con esta instrucción todas las curvas generadas durante la ejecución de la rutina se presentan en una única
figura, cuyas características de ejes y enmallado son las definidas para la representación de la primera curva.
A este respecto debe tomarse la precaución de asegurar previamente que todas las funciones pueden
representarse en el cuadrado seleccionado por la definición de los ejes (si está presente) correspondientes a la
primera figura; si una de ellas cae fuera del área de dibujo (la definida por los ejes o la establecida
automáticamente por Matlab si tal definición no está presente), naturalmente no será representada.
Al igual que ocurría con la instrucción pause conviene terminar el programa con la instrucción
Una cuarta posibilidad de visualizar las distintas curvas generadas durante la ejecución de una rutina consiste
en dividir una figura en diversos recuadros y representar una o más curvas (mediante la aplicación de la
instrucción hold on) en cada uno de ellos. La definición de los recuadros se hace mediante la instrucción
La diferencia entre ambas posibilidades es que la primera permite observar claramente cualquier
discontinuidad que haya entre las funciones que se combinan, mientras que en la segunda Matlab añade una
línea de conexión entre aquéllas, con lo que las discontinuidades entre ellas, si existen, quedan enmascaradas.
Coseno
El código adjunto puede utilizarse para generar la función coseno mostrada en la figura.
Cabe observar que la curva no pasa por el origen de los ejes coordenados porque la fase de la función no es
nula.
También conviene destacar que no deben confundirse el periodo de la función (el de cualquier función
periódica), que es t0 en este caso, con el periodo de muestreo para efectuar la representación (lo que hemos
denominado intervalo más arriba), que vale 10-9 s en este caso.
Mediante el operador .* se multiplican elemento a elemento los componentes de los dos vectores que figuran
en la instrucción. Más adelante veremos otros casos en los que se utilizan operadores precedidos por puntos.
% Base de tiempos
tmin = -4;
tmax = 4;
puntos = 10000;
t = linspace (tmin, tmax, puntos);
y = zeros (1, length(t)); % Comienza anulando la función
A = 1; % Amplitud
T = 2; % Periodo
% Rango de valores de t para los que la función no es nula
t = 0:.1:10;
y = sin(t);
plot(t,y),
Primer armónico
y = sin(t) + sin(3*t)/3;
plot(t,y)
Adición de dos armónicos
plot(t,y)
t = 0:.02:3.14;
y = zeros(10,max(size(t))); %abriendo espacio para almacenar los valores de los
armónicos
x = zeros(size(t));
T = 1;
Wo = 2*pi/T;
t = 0:0.001:pi;
y = square(2*pi*t/T);
plot(t,y,'r-')
grid
hold on
x = 0;
for k = 1:2:10
x = x + (4*sin(k*Wo*t))/(pi*k);
y((k+1)/2,:) = x;
plot(t,x), pause
end
title('componentes armónicos')
xlabel('tiempo'), ylabel('amplitud')
% Leccion 1
clear;
close all;
nn=0:20;
x=2*pi*nn/20;
x1=sin(x);
x2=cos(x);
x3=tan(x);
figure(1)
subplot(311),stem(nn,x1)
subplot(312),stem(nn,x2)
subplot(313),stem(nn,x3)
% 1.2 USO DE exp(z),abs(z),real(z),imag(z),angle(x),conj(x)
clear;
close all;
nn=0:20;p=-1;
x=p*nn/20;
y=2*pi*nn/20;
z=x+j*y;
xx=exp(z);
xc=conj(xx);
x1=abs(xx);
x2=real(xx);
x3=imag(xx);
x4=imag(xc);
x5=angle(xx);
x6=angle(xc);
subplot(321),stem(nn,x1),grid
subplot(322),stem(nn,x2),grid
subplot(323),stem(nn,x3),grid
subplot(324),stem(nn,x4),grid
subplot(325),stem(nn,x5),grid
subplot(326),stem(nn,x6),grid
clear;
close all;
nn=0:5;p=-1;
x=p*nn/20;
y=2*pi*nn/20;
z=x+j*y;
xx=exp(z);
x1=real(xx)
x2=imag(xx)
xs=sum(xx)
xp=prod(xx)
% 1.4 USO DE log(x),log10(x),sqrt(x)
clear;
close all;
nn=0:20;p=-1;
x=p*nn/20;
y=2*pi*nn/20;
z=x+j*y;
xx=exp(z);
x1=abs(xx);
x2=sqrt(x1);
x3=log10(x1);
x4=log(x1);
x5=x;
subplot(321),stem(nn,x1),grid
subplot(322),stem(nn,x2),grid
subplot(323),stem(nn,x3),grid
subplot(324),stem(nn,x4),grid
subplot(325),stem(nn,x5),gris
% Leccion 2
clear;
close all;
nn=0:20;p=0;m=0;
x=p*nn/20;
y=2*pi*nn/20*m;
z=exp(x+j*y);
h=nn;
x1=z;
x2=h;
x3=conv(z,h)
figure(1)
subplot(311),stem(nn,x1)
subplot(312),stem(nn,x2)
nn=0:40;
subplot(313),stem(nn,x3)
% b0*y(n)+b1*y(n-1)+b2*y(n-2)+...+bN*y(n-N)=a0*x(n)+a1*x(n-1)+...+aM*x(n-M)
nn=0:20;
x=ones(nn);
b=[1 1 1];
a=[1 1 1];
y=filter(a,b,x);
x1=x;
x2=y;
figure(2)
subplot(211),stem(nn,x1)
subplot(212),stem(nn,x2)
% b0*y(n)+b1*y(n-1)+b2*y(n-2)+...+bN*y(n-N)=x(n)
nn=0:20;
x=ones(nn);
b=[1 1 1]
y=filter(1,b,x);
x1=x;
x2=y;
figure(3)
subplot(211),stem(nn,x1)
subplot(212),stem(nn,x2)
% y(n)=a0*x(n)+a1*x(n-1)+a2*x(n-2)+...+aM*x(n-M)
nn=0:20;
x=ones(nn);
a=[1 1 1]
y=filter(a,1,x);
x1=x;
x2=y;
figure(4)
subplot(211),stem(nn,x1)
subplot(212),stem(nn,x2)
% USO DE randn(1,N)
% y varianza 1
N=20;
nn=0:N-1;
x=rand(1,N);
y=randn(1,N);
x1=x;
x2=y;
figure(5)
subplot(211),stem(nn,x1)
subplot(212),stem(nn,x2)
% USO DE xcorr(x)
% Ejecuta la autocorrelación de x
% USO DE xcorr(x,y)
x3=xcorr(x);
x4=xcorr(y);
x5=xcorr(x,y);
figure(6)
subplot(311),stem(x3)
subplot(312),stem(x4)
subplot(313),stem(x5)