Вы находитесь на странице: 1из 84

1

MATLAB PARA INGENIERIA RICARDO CASTAEDA


2013


UNIVERSIDAD NACIONAL DE INGENIERA
FACULTAD DE INGENIERA MECNICA



































2
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
1 INTRODUCCION AL MATLAB
1.1 OPERACIONES BASICAS EN MATLAB......
1.1.1 Ingreso de datos a una matriz......
1.1.2 Operaciones con matrices.......
1.1.2.1 Operadores aritmticos...
1.1.2.2 Expresiones.
1.1.2.3 Manejo de nmeros complejos......
1.1.2.4 Adicin y substraccin....
1.1.2.5 Multiplicacin...
1.1.2.6 Divisin..
1.1.2.7 Potencia.
1.1.2.8 Operaciones entre elementos el operador ....
1.1.2.9 Operadores de comparacin..
1.1.2.10 Operadores Lgicos...
1.1.2.11 Operaciones diversas con matrices..
1.2 FUNCIONES......
1.3 CEROS Y MNIMOS DE UNA FUNCIN.........................................................
1.4 GRAFICOS...
1.5 INSTRUCCIONES DE CONTROL EN MATLAB....
1.5.1 La Sentencia if..
1.5.2 La sentencia switch.....
1.5.3 Sentencia FOR...............
1.5.4 Sentencia WHILE...
1.6 Caso de estudio. INTERPOLACION POLINOMICA..
1.7. Caso de Estudio. METODO DE LA BISECCION..
2 POLINOMIOS..
2.1 Representacin de polinomios.
2.2 Evaluacin de polinomios
2.3 Producto de Polinomios..
2.4 Fracciones parciales y derivadas.
3 MATLAB SIMBOLICO...
3.1 Definicin de Objetos Simblicos
3.2 Derivadas y primitivas
3.3 Operaciones con expresiones Simblicas.
3.4 Funcin subs.
Practica.
4 ALGEBRA LINEAL Y MATRICES
4.1 Matrices..
4.2 Sistema de Ecuaciones Lineales..
4.3 Mtodo de Eliminacin gaussiana
4.4 Descomposicin triangular
4.5 Mtodo Gauss-Jordan
4.6 Mtodo Iterativo de jacobi.
5 SOLUCION DE ECUACIONES DIFERENCIALES...
5.1 Definicin.
5.2 ODE de Primer Orden..
5.3 Valor Inicial El problema del valor inicial para las ODE de primer orden
5.4 Mtodo de paso simple.
5.5 Mtodo de la Serie de Taylor....
5.6 Mtodo de Euler...
5.7 Euler aplicado a un pndulo simple..
5.8 El mtodo de Heun Utiliza el mtodo Predictor Corrector.
04
04
04
05
05
05
06
06
06
06
06
06
06
07
07
07
08
08
09
09
10
11
13
14
15
17
17
17
18
18
19
19
19
20
21
23
24
24
24
24
26
27
29
30
30
30
30
31
31
33
34
37


3
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
5.9 Mtodo de Runge-Kutta..
5.9.1 Runge-Kutta de orden 2......
5.9.2 Runge-Kutta de orden 4...
6 PROCESAMIENTO DE SEALES...
6.1 Anlisis en el dominio del tiempo...
6.1.1 Funciones que actan sobre vectores..
6.2 Anlisis en el dominio de la frecuencia.
7 SISTEMAS DE CONTROL...
7.1 Modelado de sistemas........
7.1.1 Funciones de Transferencia..
7.1.2 Modelo de Espacios de Estados....
7.2 Conversin de modelos.
7.3 Funciones de diseo y anlisis..
7.3.1 Respuesta en el tiempo al escaln unitario.
7.3.2 Graficas de Bode.....
7.3.3 Lugar geomtrico de las races...



































39
39
40
42
42
42
50
60
60
61
62
62
69
69
78
81


































4
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
1: INTRODUCCIN AL MATLAB
Introduccin.- El matlab(MATrix LABoratory) es un lenguaje de alto nivel, escrito en gran parte en
lenguaje C , orientado para el clculo tcnico, su potencia radica en una gran cantidad de rutinas
de clculo aplicadas a las diferentes disciplinas de la ingeniera. En su ambiente integrado pude
realizar clculos, programacin y visualizacin, para esto en el matlab se utilizan tres ventanas:
Ventana de comandos. (Principal). Nos permite ingresar datos o ejecutar comandos o
funciones.
Ventana de grficos. Displaya los resultados (Forma grfica) que se indiquen con comandos o
programas.
Ventana del editor. Nos permite escribir nuevos programas (secuencia de comandos) y
funciones.
Su elemento bsico es una matriz numrica. Sus usos ms comunes son:
- Clculos matemticos (matriciales).
- Modelado y simulacin.
- Procesamiento de datos.
- Desarrollo de interfaces grficas.
1.1 Operaciones bsicas en matlab.-
1.1.1 Ingreso de datos a una matriz.- Las matrices y los vectores son variables que tienen
nombres. Recomendamos que se utilice letras maysculas para matrices y letras
minsculas para vectores y escalares el ingreso lo realizamos as:
>> mat = [ 1 2 3; 4 5 6; 7 8 9 ]
El matlab responde
mat = 1 2 3.
4 5 6 .
7 8 9
La matriz A ya puede ser trabajada, obtendremos la transpuesta haciendo lo siguiente:
>>A y la respuesta del sistema ser
ans = 1 4 7
. 2 5 8
. 3 6 9
Esto es porque el resultado no ha sido asignado a ninguna variable, veamos en matlab






Tambin podemos operar con estas matrices, hallando primero A*B y despus la inversa de A que
sera C y comprobar que C es la inversa de A. Se puede acceder a cualquier elemento de A o de B
con solo indicarlo con los subndices. El siguiente cuadro nos visualiza todo lo anteriormente dicho.
E
>> A= [1 2 3; 4 5 6; 7 8 9]
A =
1 2 3
4 5 6
7 8 9
>> B=A'
B =1 4 7
2 5 8
3 6 9


5
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013










Con la ltima operacin comprobamos la inversa. Para definir un vector fila es ms simple






1.1.2 Operaciones con matrices.-
1.1.2.1 Operadores aritmticos.- Tenemos los siguientes:
^ Potenciacin \ Divisin ( a la izquierda)
/ Divisin ( a la derecha)
* Producto
.* Producto elemento a elemento
./ y .\ divisin elemento a elemento
.^elevar a una potencia elemento a elemento
+ Adicin o suma
- Substraccin o resta
transpuesta
Veamos un ejemplo de lo mostrado:
1.1.2.2 Expresiones.-Es una Secuencia de operandos y operadores
>> raiz2 = sqrt(2);
>> raiz3 = sqrt(3);
>>det1 = det(mat);
>>det2 = det(mat2);
% Escribiendo una expresin en 2 lneas
>> x = 0.5;
>>expx = 1 + x +(x^2)/2+ (x^3)/6+ ...
(x^4)/24 + (x^5)/120
1.1.2.3 Manejo de nmeros complejos.- En este caso se considera -1 a i o j
>> c1 = 2 4*j
>> A = [1 4 -3; 2 1 5; -2 5 3]
A =1 4 -3
2 1 5
-2 5 3
>> C=inv(A)
C =
0.1803 0.2213 -0.1885
0.1311 0.0246 0.0902
-0.0984 0.1066 0.0574
>> C*A
ans =
1.0000 0.0000 -0.0000
0 1.0000 0.0000
0 -0.0000 1.0000
>> f1 = [0 1 4] ; % El ; evita la respuesta
>> f2 = [9 16 25] ;
>> f3 = [ 36 49 64] ;
>> mat2 = [f1 ; f2 ; f3]
mat2 =
0 1 4
9 16 25
36 49 64



6
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
>> c2 = 3 + 3*i
>> t = abs(c1 +c2);
>> s = [1 2 3 ; 4 5 6] + i*[ 3 2 1 ; 6 5 4]
1.1.2.4 Adicin y substraccin
>> M1 = [ 1 1 1 ; 1 1 1; 1 1 1]
>> M2 = [ 1 2 3 ; 4 5 6 ; 7 8 9]
>> M3 = M1 + M2
>>M4 = M1 M2
Por un escalar
>> M5 = M2 + 1
El matlab responde
M5 = 2 3 4
. 5 6 7
. 8 9 10
1.1.2.5 Multiplicacin
>>multi = M1 * M2 % Si columnas de M1 igual a filas de M2
1.1.2.6 Divisin
X = A\B % Solucin de A*X = B
X = B\A % Solucin de X*A = B
1.1.2.7 Potencia
>> p2 = mat ^2
>> p3 = mat ^3
1.1.2.8 Operaciones entre elementos. El operador .
Si tenemos que
>> x1 = [ 1 2 3 ]
>> x2 = [ 4 5 6 ]
>> r1 = x1 . * x2
>> r1 = 4 10 18 % Efecto el termino correspondiente de x1 por el de x2
>>r2 = x1. /x2
>>r2 = 0.25 0.40 0.50
>>r3 = x1.^x2
>>r3 = 1 32 729
1.1.2.9 Operadores de comparacin
< menor < = menor o igual
> mayor > = mayor o igual
= = igual ~ = diferente
considerando 1 -> Verdadero y 0 -> Falso
1.1.2.10 Operadores lgicos
Tenemos que and & or |


7
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
>> 1 == 1 & 4 == -3 (ans = 0)
>> 1 == 1 | 4 ==-3 (ans = 1)
1.1.2.11 Operaciones diversas con matrices.- La forma general para asignar rangos a una
variable ser
variable = inferior : variacin : superior
por ejemplo:
>> x = 4: 2: 22
x = 4 6 8 10 12 14 16 18 20 22
>>beta = 0 : pi/4 : pi
>> beta = 0.000 0.7854 1.5708 2.3566 3.1416
>> ndice = 8: -1: 1
ndice = 8 7 6 5 4 3 2 1
Se puede generar un vector linealmente espaciado
>> w = linspace(100,1000, 10)
w = 100 200 300 400 500 600 700 800 900 1000
Se puede generar tambin matrices de la siguiente forma
>> uno = ones(5)
>> cero = zeros(4)
>> RR = rand(3)
>> I=eye(4)
1.2 Funciones.- Para crear una funcin seguir los siguientes pasos
En men archivo opcin new
Guardar como f1.m
Escribir en el editor
function y = f1(x)
y = x.^2 -x -2
En la ventana de comandos
>> x= -3:0.1: 3
>> plot( x, f1(x))
o>> x= -3:0.1: 3
>> y1 = f1(x)
>>plot( x, y1)
1.3 Ceros y Mnimos de una funcin.- Algunos comandos adicionales que nos permiten hallar
ceros y mnimos de una funcin son.
fmin Halla mnimo para funciones de una variable por ejemplo podemos considerar
>>xmin = fmin(f1,-1,1)
fmins Minimiza funcin de varias variables
fzero Encuentra los ceros de una funcin por ejemplo podemos hallar el cero cercano a 2
y a +2, ojo aqu no hay intervalo sino valor inicial o punto de arranque >> raiz1 = fzero(f1,-2)
>> raiz1 = fzero(f1,-2) Ahora si queremos visualizar estos resultados los comandos serian as


8
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
>> raiz1 = fzero(f1,-2)
>> raiz2 = fzero(f1, 2)
>> x= -3:0.01:3
>> plot(x,f1(x),raiz1,f1(raiz1),X,raiz2,f1(raiz2),X),
>>grid
1.4 Grficos.- Para complementar esta introduccin al matlab veremos los comandos que nos
permite mostrar grficos de las funciones, estos comandos son:
Grficos Bidimensionales
plot ploteo lineal
loglogplotear en esta escala
semilogxplotear en escala semilog
semilogyplotear en escala semilog
fill disear polgono 2d
polar plotear en coordenadas polares
bar grfico de barras
stem seales discretas
stairsplotear en grados
errorbarplotear error
histplotear histograma
rose plotear histograma en ngulo
compassplotear en forma de flechas
featherplotear en forma de pluma
fplotplotear funcin
cometPlotear con trayectoria de cometa
Grficos tridimensionales y contornos
plot3 plotear en espacio 3d
fill3 disear polgono 3d
comet3 plotear en 3d con trayectoria de cometa
contourplotear contorno 2d
contour3 plotear contorno 3d
clabelplotear contorno con valores
quiverplotear gradiente
meshplotear malla 3d
meshc combinar mesh y contour
surf plotear superficie 3d
surfc combinar surf y contour
surfilplotear superficie 3d con iluminacin
sliceplotear visualizacin volumtrica
cylinder genera cilindro
sphere genera esfera


9
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
tenemos que considerar inicialmente que plot (y) plotea los valores de y versus la variacin de un
ndice:
>> y = 0.0 0.25 0.50 1.00 1.50 1.25 0.75 0.50
>>plot(y)
1.5. INSTRUCCIONES DE CONTROL EN MATLAB
1.5.1. Sentencia if: Tenemos la forma simple,
If Condicin
Sentencias
End
Funcionamiento.- Se evala la condicin si esta se cumple, se ejecuta el bloque de
sentencias, veamos un ejemplo con matrices.















Sentencia if con bifurcacin mltiple
Si queremos ejecutar un bloque entre varios bloques, podemos utilizar la forma siguiente de la
sentencia if.
If condicion1
Bloque1
elseif condicion2
Bloque2
elseif condicion3
Bloque3
else
Bloque por defecto %Se ejecuta cuando no se cumple ninguna condicin
EJECUCION
>> sep01
Las matrices A y B son iguales
Las matrices A y C son diferentes
>>
PROGRAMA
A= [1 2 3; 4 5 6;7 8 9];
B= [1 2 3; 4 5 6;7 8 9];
C= [1 2 3; 4 5 6;7 8 8];
if ( A==B)
fprintf('Las matrices A y B son iguales\n');
else
fprintf('Las matrices A y B son diferentes \n');
end
if ( A==C)
fprintf('Las matrices A y C son iguales \n');
else
fprintf('Las matrices A y C son diferentes \n');
end


10
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
end



















1.5.2. Sentencia SWITCH Nos permite derivar el control hacia uno de varios puntos
Sintaxis de la sentencia switch
switchexpresion
casecase_expresion1 ,
bloque 1
casecase_expresion2 ,
bloque2
casecase_expresion3 ,
bloque3
..
Otherwise,
Bloque
End
Veamos un ejemplo


PROGRAMA
nota = input ('Ingrese una nota --> ');
if nota >= 16
fprintf('Aprobado con excelencia\n')
elseif nota >=10
fprintf('Aprobado\n')
elseif nota >= 6
fprintf('Desaprobado\n')
else
fprintf('Reprobado\n')
end
>> sep02
Ingrese una nota --> 14
Aprobado
>> sep02
Ingrese una nota --> 8
Desaprobado
>> sep02
Ingrese una nota --> 5
Reprobado
>> sep02
Ingrese una nota --> 19
Aprobado con excelencia


11
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013























1.5.3. Sentencia FOR
Repite un conjunto de sentencias un nmero predeterminado de veces
Su sintaxis es: for i= 1:n
Sentencias
end
Ejemplo:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Entrega una vector con la seal limpia
% Lee archivo cas.wav
%Archivo tiempo01
%yc1 vector original componentes
%y1cas vector sin silencios componentes
PROGRAMA
digito = input('Ingrese un digito');
switch digito
case 1,
fprintf('Uno\n');
case 2,
fprintf('Dos\n');
case 3,
fprintf('Tres\n');
case 4,
fprintf('Cuatro\n');
case 5,
fprintf('Cinco\n');
case 6,
fprintf('Seis\n');
case 7,
fprintf('Siete\n');
case 8,
fprintf('Ocho\n');
case 9,
fprintf('Nueve\n');
otherwise,
fprintf('No es un digito');
end
>> sep03
Ingrese un digito6
Seis
>> sep03
Ingrese un digito25
No es un digito>>


12
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
%y1casn vector sin silencios y normalizado componentes
clc;
echo off;
%************PROCEDIMIENTO DE LECTURA*******************
[yc1, Fs, Bits] = wavread ('a:cas1.wav');
lon = size(yc1);
fprintf('\nLongitud del vector: %d\n',lon(1));pause;
%**********CALCULA MAYOR MENOR Y MAYOR ABSOLUTO********
[mayor,jj]=max(yc1);
[menor,jj]=min(yc1);
if abs(mayor) > abs(menor)
mayabs = abs(mayor);
else
mayabs = abs (menor);
end;
%**************HALLA ARCHIVOS SIN SILENCIOS******************
des = (mayabs/100)*20;
a= size(yc1);
for i=1:lon(1);
if abs(yc1(i)) > des
lima = i;
break
end;
end;
limb=lima+3000
k= 0:(limb-lima);
y1cas = yc1(lima :limb);
b = size(y1cas);
fprintf('\nLongitud del vector: %d\n',b(1));
y1casn = y1cas;
%***********NORMALIZA DIGITOS DOS****************
for i=1:(limb - lima)+1;
y1casn(i)=y1casn(i)/mayabs;
end;
%***********GRAFICA DE LOS VECTORES ****************
subplot(3,1,1);
t=1:lon(1);
plot(t,yc1);
grid;
ylabel('yc1');
title('Digito dos de castaeda');


13
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
axis([0 a(1) menor mayor]);
subplot(3,1,2);t=k;
plot(t,y1cas);grid;
axis([0 (limb-lima) menor mayor]);
ylabel('y1cas');
subplot(3,1,3);plot(t,y1casn);grid;
axis([0 (limb-lima) -1 1]);
ylabel('y1casn');
xlabel('Numero de muestras');
fprintf('\n\n Presione una tecla para terminar...');
pause;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1.5.4. Sentencia WHILE
WHILE Repite un grupo de sentencias un nmero indefinido de veces.
La forma general de una sentencia while es:
WHILE condicin
Sentencias
END
Las sentencias son ejecutadas mientras la condicin es verdadera. La condicin es usualmente el
resultado de una comparacin que utiliza los siguientes operadores. ==, <, >, <=, >=, or ~=.
La sentencia BREAK puede ser usada para terminar el lazo prematuramente.
Ejemplo
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
while(abs(b-a)/2 > error)
m = (a+b)/2;
dif=b-a;
fxm=feval(fx,m);
fprintf('%2d%8.5f%8.5f%8.5f%8.5f \n',k,a,b,m,dif);
k=k+1;
iffxa*fxm<=0
b=m;
fxb=fxm;
else
a=m;
fxa=fxm;
end
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
1.6. Caso de Estudio.- (Interpolacin Polinmica) Forma de Lagrange; considerando un par de
puntos (x
0
,f(x
0
)) y (x
1
,f(x
1
)) entonces para un x entre x
0
yx
1
tendremos un polinomio de
interpolacin
0 1
0
1
1 0
1
0
) ( ) ( ) (
x x
x x
x f
x x
x x
x f x P

= Entonces el polinomio de grado <= n que


interpola a f(x) en x
0
, x
1
, x
2
, x
3
,. x
n
. es :


14
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013

=
=
n
k
k k
x L x f x P
0
) ( ) ( ) ( Cuando tenemos (n+1) puntos y entonces
[
= =

=
n
k i i i k
i
k
x x
x x
x L
, 0
) (

Por ejemplo para n = 3,
) )( )( (
) )( )( (
) (
3 0 2 0 1 0
3 2 1
0
x x x x x x
x x x x x x
x L


=
) )( )( (
) )( )( (
) (
3 1 2 1 0 1
3 2 0
1
x x x x x x
x x x x x x
x L


=

Ejemplo 2:
function p=lagrange(x,y,x0)
%*******datos******
%x, es el vector x
%y, es el vectorf(x)
%n, es el orden de la matriz
%*******resultados****
%L, es el polinomio de la lagrange
%p, es el valor interpolado
n= length(x);
L= zeros(n,1);
fprintf(' k x y L\n');
for k= 1:n
prod1 = 1;
prod2=1;
for i=1:n
if(i~=k)
prod1=prod1*(x0-x(i));
prod2=prod2*(x(k)-x(i));
end
end
L(k)=prod1/prod2;
end
p= 0;
for k=1:n
p = p+L(k)*y(k);
fprintf('%5d%10.6f%10.6f%10.6f \n',k,x(k),y(k),L(k));
end
Ejemplo de ejecucin:
















1.7. Caso de Estudio.- (Calculo de una raz usando el mtodo de la biseccin)
function raiz = biseccion(fx,a,b )
% fx es la funcin
% a y b son los valores extremos del intervalo
%raz es el valor de la solucin
error=0.0005;
>> x= 1:10
>> y =[ 3 5 7 6 5 6 7 5 8 14 ]
>> t= lagrange(x,y, 7.5)
k x y L
1 1.000000 3.000000 0.000839
2 2.000000 5.000000 -0.008926
3 3.000000 7.000000 0.043640
4 4.000000 6.000000 -0.130920
5 5.000000 5.000000 0.274933
6 6.000000 6.000000 -0.458221
7 7.000000 7.000000 0.916443
8 8.000000 5.000000 0.392761
9 9.000000 8.000000 -0.032730
10 10.00000 14.00000 0.002182
t = 6.2508


15
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
k = 0 ;
fxa = feval(fx,a);
fxb = feval(fx,b);
iffxa*fxb<= 0
while(abs(b-a)/2 > error)
m = (a+b)/2;
dif=b-a;
fxm=feval(fx,m);
fprintf('%2d%8.5f%8.5f%8.5f%8.5f \n',k,a,b,m,dif);
k=k+1;
iffxa*fxm<=0
b=m;
fxb=fxm;
else
a=m;
fxa=fxm;
end
end
raiz = m;
else
fprintf('CAMBIAR LIMITES');
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%% FUNCION QUE VAMOS A UTILIZAR%%%%%%%%%%%%%%%%
function y= ff(x)
y = x^2-x-2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


















>>biseccion('ff',0,3)
0 0.00000 3.00000 1.50000 3.00000
1 1.50000 3.00000 2.25000 1.50000
2 1.50000 2.25000 1.87500 0.75000
3 1.87500 2.25000 2.06250 0.37500
4 1.87500 2.06250 1.96875 0.18750
5 1.96875 2.06250 2.01563 0.09375
6 1.96875 2.01563 1.99219 0.04688
7 1.99219 2.01563 2.00391 0.02344
8 1.99219 2.00391 1.99805 0.01172
9 1.99805 2.00391 2.00098 0.00586
10 1.99805 2.00098 1.99951 0.00293
11 1.99951 2.00098 2.00024 0.00146

ans =



16
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013










































01

2. POLINOMIOS
2.1. REPRESENTACION DE POLINOMIOS.- Los polinomios son representados en matlab como
vectores fila conteniendo los coeficientes 1ordenados por potencias descendentes, veamos un
ejemplo: 24 50 35 10
2 3 4
+ + x x x x





>> p1=[1 -10 35 -50 24]
p1 =
1 -10 35 -50 24

>>roots(p1)
ans =
4.0000
3.0000
2.0000
1.0000


17
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013




Hemos ingresado el polinomio y calculado sus races con el comando roots, notar que el polinomio se
ha originado por: 24 50 35 10 ) 4 )( 3 )( 2 )( 1 (
2 3 4
+ + = x x x x x x x x

2.2. EVALUACION DE POLINOMIOS.-
Podemos evaluar el polinomio para un valor de x = 0, 1, 5, 6.







X tambin puede ser un vector, por ejemplo que vari de 0 a 6 con incrementos de 0.5.








2.3. PRODUCTO DE POLINOMIOS.-
Podemos hallar el producto de dos polinomios como conv (convolucion)





La divisin se realiza con deconv(pol1,pol2), o sea la divisin polinomio1 entre polinomio 2, esto lo
comprobaremos

>>polyval(p1,0)
ans = 24
>>polyval(p1,1)
ans = 0
>>polyval(p1,5)
ans = 24
>>polyval(p1,6)
ans = 120
>> x=0:0.5:6
x = Columns 1 through 7
0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000
Columns 8 through 13
3.5000 4.0000 4.5000 5.0000 5.5000 6.0000
>>polyval(p1,x)
ans = Columns 1 through 7
24.0000 6.5625 0 -0.9375 0 0.5625 0
Columns 8 through 13
-0.9375 0 6.5625 24.0000 59.0625 120.0000
>>
>> p2= [1 -3 4]
p2 =
1 -3 4
>>conv(p1,p2)
ans = 1 -13 69 -195 314 -272 96
>> p3=conv(p1,p2)
p3 =
1 -13 69 -195 314 -272 96
>>deconv(p3,p1)
ans =
1 -3 4


18
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013





2.3. FRACCIONES PARCIALES Y DERIVADAS.-
Se puede descomponer en fracciones parciales, como vemos en el ejemplo:






Realizaremos el clculo de la derivada del polinomio,









3. MATLAB- SIMBOLICO.- El matlab tambin tiene un mdulo Symbolic Math Toolbox, que permite
manejar perfectamente el clculo matemtico simblico, manipular con facilidad y rapidez las
formulas y expresiones algebraicas y realizar la mayora de operaciones con las mismas. Es
posible expandir, factorizar y simplificar polinomios y expresiones racionales y trigonomtricas;
encontrar soluciones algebraicas de ecuaciones polinmicas y sistema de ecuaciones; evaluar
derivadas e integrales simblicas y encontrar soluciones de ecuaciones difernciales; manipular
series de potencias, lmites y otras operaciones.
3.1. DEFINICIN DE OBJETOS SIMBOLICOS
Para Realizar clculos simblicos, MATLAB requiere que todas las variables(o expresiones
algebraicas) sean declaradas como simblicas previamente con el comando syms( o con sym).
Por ejemplo si queremos simplificar la expresin 6ab+3.a
2
+2ab, realizamos lo siguiente:
>>syms a b
>> [r,p]=residue(num,den)
r = 1
2
p = 3
-2
Donde la respuesta ser:
2
2
3
1
) 2 (
) 2 (
) 1 (
) 1 (
6
4 3
2
+
+

=
x x p x
r
p x
r
x x
x
den
num

>>polyder(p1)
ans =
4 -30 70 -50



19
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
>>simplify(6*a*b+3*a^2+2*a*b)
ans =
8*a*b+3*a^2

3.2. DERIVADAS Y PRIMITIVAS
>>symx
>> f = sin(x)
f =
sin(x)
Se pueden calcular derivadas
>>diff( f,x )
ans=
cos(x)
>>diff(diff( f,x ),x)
ans=
-sin(x)
Tambin se pueden encontrar primitivas:
>>int(log(x)) % Primitiva de la funcin logaritmo
ans=
x*log(x)-x
>>diff(x*log(x)-x ,x) % Comprobacin
ans=
log(x)
3.3. OPERACIONES CON EXPRESIONES SIMBOLICAS
Al igual que en el caso de variables numricas se pueden sumar, restar, multiplicar, dividir y elevar
apotencias las expresiones simblicas. Por ejemplo, dadas las siguientes funciones
, 7 ) ( , 5 3 2 ) (
2 2
+ = = x x x g x x x f hallar las expresiones de f+g, f-g, f*g , f/g y f
3
.
>>syms x
>> f = 2*x^2-3*x-5
f=
2*x^2-3*x-5
>> g = x^2-x+7;
>>pretty(f+g)
2 4 3
2
+ x x
>>pretty(f-g)
12 2
2
x x
>>pretty(f*g)


20
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
) 7 )( 5 3 2 (
2 2
+ x x x x
Tambin
>>h= f *g
h=
(2*x^2-3*x-5)*( x^2-x+7)
>>pretty(expand(f*g))
35 16 12 5 2
2 3 4
+ x x x x
>>pretty(f/g)
7
5 3 2
2
2
+

x x
x x

>>pretty(f^3)
3 2
) 5 3 2 ( x x
>>pret(expand(f^3))
225 15 153 6 36 8
2 3 4 5 6
+ + x x x x x

Realice lo siguiente
>>p=3*x*exp(4*x)
>>diff(p,x)
>>diff(sin(x),x)
>>diff(diff(p,x),x)
>>diff(p,x,2)
A continuacin resolvemos la ecuacin x
4
+1=0 y presentamos el resultado en escritura matemtica
habitual.
>>S=solve(x^4+1=0)
S=
[1/2*2^(1/2)+1/2*i*2^(1/2)]
[-1/2*2^(1/2)-1/2*i*2^(1/2)]
[1/2*2^(1/2)-1/2*i*2^(1/2)]
[-1/2*2^(1/2)+1/2*i*2^(1/2)]
>>numeric(S)

ans=
0.7071+0.7071i
-0.7071-0.7071i
0.7071-0.7071i


21
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
-0.7071+0.7071i
En el ejemplo siguiente definimos una matriz simblica y calculamos su determinante
>>syms a x
>> A = [cos(a* x),sin(a* x);-sin((a* x),cos(a* x)]
A =
[cos(a* x) sin(a* x)]
[-sin((a* x) cos(a* x)]
>>det(A)
ans =
cos(a*x)^2+sin(a*x) ^2
>>pretty(inv(A))
......................................

3.4. FUNCION subs
Una vez definida explcitamente una funcin simblica, es posible sustituir valores de las variables
en la funcin, es decir calcular el valor de la funcin en un punto dado, mediante los comandos que
se indican a continuacin.
subs(f,a) Aplica la funcin f en el punto a
subs(f,a,b) Sustituye en f el valor de a por el valor de b
subs(f,variable,valor) Sustituye en la ecuacin de f la variable por el
valor
subs(f,{x,y,...},{a, b,...}) Sustituye en la ecuacin de f las variables {x,y,...}
por los valores {a,b,...}
Como ejemplo definamos la funcin f(x) = x
3
y calculamos f(2) y f(b+2)
>> f =x^3
f =
x^3
>> A = subs(f,2)
A =
8
>>syms b
>> B = subs(f,b+2)
B =
(b+2)^3
En el ejemplo siguiente consideramos la funcin de dos variables f(a, b) = a+ b, y sustituimos
primeramente a por 4, y posteriormente a por 3 y b por 5.

>>syms a b
>>subs(a+b,a,4)
ans=


22
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
4+b
>>subs(a+b,{a,b},{3,5})
ans =
8

























PRACTICA
1. REALIZA LAS DERIVADAS DE LAS SIGUIENTES FUNCIONES
a. log(sen(2x))
2
2
1 1 log( ,
1
1
x
x
+ +
+

2. Aplica la orden pretty al resultado para verla de una forma mas clara.
3. CALCULA LA SEGUNDA DERIVADA, RESPECTO DE SU VARIABLE DE LAS FUNCIONES
ANTERIORES
4. CALCULA EL VALOR DE LA SEGUNDA DERIVADA EN X=0 DE LA FUNCION
a. 2
1
1
x



23
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
5. PARA LA FUNCION
1 , 0
2
/ , ) ( ) , (
= =
c c
c
=
y x
y
y x
f
calcula e x sen y x f
6. Usando el comando int resolver.
7. Calcule }

dx
x 1
1
2
8. Calcule la integral
}
parametros b y a siendo dx bx a , ) 1 ln(
9. Calcule la integral definida dx bx a
}

1
0
) 1 ln(















4. ALGEBRA LINEAL Y MATRICES
4.1. MATRICES Repasaremos el concepto de matrices consideremos el concepto de suma y
producto de matrices.
La suma de matrices la podemos representar como
j i j i j i
b a c donde B A C
, , ,
+ = + = .
La multiplicacin de matrices tambin la podemos representar como

=
= =
n
k
j k k i j i
b a c donde B A C
1
. , ,
*
Veamos un programa que calcula una multiplicacin de matrices:


24
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
4.2. SISTEMA DE ECUACIONES LINEALES El objetivo de este tema es resolver sistemas de
ecuaciones de la forma A.x = b, Donde:
(
(
(
(

=
(
(
(
(

=
(
(
(
(

=
n n nn n n
n
n
x
x
x
x
b
b
b
b
a a a
a a a
a a a
A
.
,
..
,
.....
. ..... . .
.....
....
2
1
2
1
2 1
2 22 21
1 12 11

Las celdas de una matriz pueden ser diagonales o extradiagonales. Es extradiagonal del tipo superior
o superdiagonal cuando el nmero de fila es menor que el nmero de la columna 0 i< j, y es
subdiagonal cuando i>j.
Cuando en una matriz cuadrada sus entradas extradiagonales son cero, se denomina matriz diagonal.
Si las entradas subdiagonales son cero se denomina matriz triangular superior, en tanto que las
entradas superdiagonales cero dan origen a la matriz triangular inferior.
Ejemplos
(
(
(

>
(
(
(

>
(
(
(

>
2 1 2
0 2 1
0 0 1
inf
2 0 0
4 1 0
3 1 2
sup
3 0 0
0 2 0
0 0 1
erior Triangular erior Triangular Diagonal

4.3. METODO DE ELIMINACION GAUSSIANA Es un mtodo para resolver un sistema de
ecuaciones, Ax = b; la matriz A,es transformada a una matriz triangular superior por efecto de las
operaciones elementales. Sea el sistema triangular superior:
bn x a
b x a x a x a
b x a x a x a x a
n nn
n n
n n
=
= + + + +
= + + + +
........ .......... .......... .......... .......... .......... ..........
.. ..........
.. ..........
2 2 3 23 2 22
1 1 3 13 2 12 1 11

Con n k a
kk
......., , 2 , 1 , 0 = =
La solucin ser:


25
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
1 ,....., 2 , 1 , :
1
2 , 2
, 2 1 1 , 2 2
2
1 , 1
, 1 1
1
=

=

=

=
=

+ =

n n k
a
x a b
x general En
a
x a x a b
x
a
x a b
x
a
b
x
kk
n
k j
j kj k
k
n n
n n n n n n n
n
n n
n n n n
n
nn
n
n

















Utilicemos este mtodo para resolver el sistema de ecuaciones:
4 2
4
6 2
8 2
4
4 3
4 3 2
4 3 2 1
=
=
= +
= +
x
x x
x x x
x x x x

Hallar su solucin con el programa anterior.

function x=backsubs(A,b)
% backsubs
% Datos
% A = es la matriz
% b = vector de la mano derecha
% n = el orden de la matriz
% Resultados
% x = vector solucion
n = length(b);
x = zeros(n,1);
x(n) = b(n)/ A(n,n);
for k= n-1:-1:1
x(k) = b(k);
for j = k+1:n
x(k)=x(k)-A(k,j)*x(j);
end
x(k) = x(k)/A(k,k);
end


26
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
4.4. DESCOMPOSICION TRIANGULAR: El sistema de ecuaciones Ax =b es almacenado en un
arreglo de n x (n+1), los coeficientes del vector b se almacenan en la columna (n+1), conocida
como la matriz aumentada y se representa [A,b] :
| |
(
(
(
(
(
(

= =
n nn n n
n
n
b a a a
b a a a
b a a a
b A W
.
. . . . .
. . . . .
.
.
,
2 1
2 2 22 21
1 1 12 11

Para realizar este procedimiento presentamos el programa que realiza el mtodo de eliminacin y
tambin de clculo del vector x:
Como el mtodo realiza una serie de intercambios tambin presentamos la funcin intercambio:








Finalmente la funcin que realiza el mtodo de eliminacin de Gauss
lo utilizaremos para resolver el siguiente sistema de ecuaciones:
2
3 2 4
2 2
3 2 1
3 2 1
3 2 1
= + +
= + +
= + +
x x x
x x x
x x x

La matriz ampliada ser:
(
(
(

2 1 1 1
3 1 2 4
2 1 1 2




function A=intercambio(A,i)
[n n1]= size(A);
k=i+1;
while(k<=n)&(A(k,i)==0)
k=k+1;
end
if k<=n
temp=A(i, : );
A(i, : )= A(k, : );
A(k, : )= temp;
end


27
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013





























4.5. MTODO DE GAUSS-JORDAN Para invertir una matriz, el mtodo de Gauss-Jordan es el
ms eficiente; esto quiere decir, que para el sistema Ax =b; usando la matriz aumentada el mtodo
de Gauss-Jordan reduce el nmero de operaciones, obtiene prcticamente la respuesta
directamente.
(
(
(

'
'
'
(
(
(

3
2
1
3 33 32 31
2 23 22 21
1 13 12 11
1 0 0
0 1 0
0 0 1
b
b
b
en transf orma se
b a a a
b a a a
b a a a

Y finalmente la solucin es
3 3
2 2
1 1
b x
b x
b x
'
=
'
=
'
=


function x=eliminacion(AA,b)
%datos
% AA = es la matriz
% A = es la matriz aumentada
% b = es el vector derecho
% Resultados
% x = vector solucion
[n n1 ] = size(AA);
x = zeros(n,1);
A = [AA b'];
n1 = n+1;
for i=1:n
if A(i,i) ==0
A= intercambio(A,i);
end
for k= i+1:n
pivote = A(k,i)/A(i,i);
for j= i:n1
A(k,j)= A(k,j)-pivote*A(i,j);
end
end
end
x= backsubs(A, A(:,n1));


28
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013


























Ejecucin:





function x=GaussJordan(AA,b)
%Datos
%AA = es la matriz
% A = es la matriz aumentada
% b = es el vector excitacin
% n = orden de la matriz
% Resultados
% x = vector solucion
[ n n]= size(AA);
x = zeros(n,1);
A = [AA b'];
n1=n+1
for i=1:n
if A(i,i)==0
A=intercambio(A,i);
end
piv=A(i,i)
for j= i:n1
A(i,j)= A(i,j)/piv;
end
for k=1:n
if (k>i)||(k<i)
pivote=A(k,i);
for j=i:n1
A(k,j) = A(k,j)-pivote*A(i,j);
end
end
end
end
for i=1:n
x(i)=A(i,n1);
end
>> AA=[2 1 1;4 2 1;1 1 1]
>> b=[2 3 2]
>>GaussJordan(AA,b)
n1 = 4
ans = 0
1
1


29
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
4.6. METODO ITERATIVO DE JACOBI Los mtodos iterativos se basan en lo siguiente: sea f(x) =
x g(x)=0 .La solucin al vector x viene dada por la sucesin x
0
,x
1
,x
2
..y evaluada por punto
fijo, como
...... 2 , 1 , 0 ), (
) ( ) 1 (
= =
+
m x g x
m m





























function x=jacobi(A,b)
%DatosA = es la matriz, b = es el vector del lado derecho, n = el orden de la matriz
%RESULTADOSx = vector solucin
[n n]=size(A);x = zeros(n,1);y = zeros(n,1);
error = 0.0005;NTOL = 50; flag = 1;k = 0;
fprintf('%5d',k);
for m =1:n
fprintf('%10.5f',x(m));
end
%prueba de diagonalizacion
i=1;
while ( i<=n) & (flag == 1)
suma = 0;
for j=1:n
if (i>j)||(i<j)
suma = suma + abs(A(i,j));
end
end
if abs(A(i,i))<= suma
fprintf('\n error de diagonalizacion');
flag = 0;
end
i=i+1;
if flag ==0
break
end
end
while 1
flag = 1;
for i=1:n
suma = 0;
for j=1:n
if (i>j)||(i<j)
suma = suma+A(i,j)*x(j)/A(i,i);
end
end
y(i)=b(i)/A(i,i)-suma;
end
k=k+1;
fprintf('\n %5d',k);
for i= 1:n
if abs(y(i)-x(i))>error
flag=0;
end
x(i) = y(i);
fprintf('%10.5f',x(i));
end
if(NTOL==k)|(flag==1)
break
end
end


30
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
5. SOLUCION DE ECUACIONES DIFERENCIALES
5.1. Definicin.-Una ecuacin diferencial es una ecuacin que envuelve derivadas de una o ms
variables independientes.
Las Ecuaciones :
0 4 2
2
2
= + +
= '
= + ' '
dx
dy
dx
y d
e y
x sen y y
x

Son ecuaciones diferenciales por que envuelven derivadas de la variable independiente x.
Una ecuacin diferencial que envuelve derivadas con respecto a una simple variable independiente es
llamada ECUACION DIFERENCIAL ORDINARIA o ODE(En ingles Ordinal Diferential Equation);
y
y
1
= '
en cambio, cuando envuelve derivadas con respecto a dos o mas variables es llamada
ecuacin diferencial parcial
V
y
V
x
V
=
c
c
+
c
c
2
2
2
2
2

5.2. ODE de Primer Orden Una ecuacin de primer orden tiene la forma:
0 ) , ( ) , ( ) , ( = + = dy y x N dx y x M o y x f
dx
dy

Por ejemplo: (2xy+3x
2
)dx + x
2
dy = 0 Una ODE es exacta cuando se cumple que:
x
N
y
M
c
c
=
c
c

En el mtodo de separacin de variables se tiene la forma F(x) dx+G(y)dy=0. Por ejemplo:
) 1 (
) 3 ( 3
2
2
2
2
x y
y x
y x y
xy x
dx
dy
+
+
=
+
+
=
De donde
2 2
1 3 x
xdx
y
ydy
+
=
+
y la solucin general
C
x
y
=
|
|
.
|

\
|
+
+
2
2
1
3
ln

5.3. Valor Inicial El problema del valor inicial para las ODE de primer orden: Una ecuacin de
primer orden tiene la forma: ) , ( y x f
dx
dy
= plantea una curva de solucin y=y(x) en la regin R,
que pasa por el punto inicial (x
0
,y
0
) en R, tal que y(x
0
) = y
0
. cuando la ODE es separable, lineal o
exacta, entonces el problema del valor inicial tiene solucin nica. Que puede ser determinada
por integracin indirecta.
C
x
y
=
|
|
.
|

\
|
+
+
2
2
1
3
ln C
x
y
=
|
|
.
|

\
|
+
+
2
2
1
3
ln



31
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
5.4. Mtodo de paso simple Sea la grfica, donde se destaca que el valor Y
k+1
es estimado como
h y y
k k
| + =
+1






|

x
k
x
k+1

De acuerdo a esta ecuacin, el valor de la pendiente | es usado para extrapolar a partir del valor y
k

en una distancia h (llamada tamao del paso). La aplicacin de la formula es punto a punto o a un
paso; es decir
Nuevo valor = Valor antiguo + paso *pendiente
5.5. Mtodo de la serie de Taylor.- El mtodo de la serie de Taylor tiene una aplicabilidad general
y estndar; permitiendo ser comparado con otros mtodos:
Sea una ecuacin diferencial de la forma:
0 0
) ( ) , ( y x y con y x f y = = '
Reformulando el teorema de Taylor tenemos que
n
a b
h b x a x
y
f
x
P y x y x f P y donde
n
h k y h k y h k y h k y
y y
n
m m
n n
k k
) (
, ,
)) ( , (
!
) (
.....
! 3
) (
! 2
) (
1
) (
0
) 1 ( ) (
) ( 3 ) 3 ( 2 ) 2 ( ) 1 (
1

= = =
(

c
c
+
c
c
= =
+ + + + + =

+

Utilizando el matlab








Programa de clculo
function d=derivTaylor(x,y)
% DerivTaylor
% Calculo de las cuatro primeras derivadas
% d es el vector de derivadas
d(1)=(x-y)/2;
d(2)=(2-x+y)/4;
d(3)=(-2+x-y)/8;
d(4)=(2-x+y)/16;


32
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013























Resultados de la ejecucin del programa de Taylor para
2
) ( y x
y

= '
, y(0) = 1 .a = 0 , b = 2, n
= 4 , h = 0.5






functionODETaylor (a,b,y0,n)
% ODE por Taylor 4
% Usando la serie de Taylor
% Datos
% a =lmite inferior
% b =lmite superior
% h =longitud del segmento
% y0 =f(a);
% x =es el vector x
% n =nmero de segmentos
% Resultados
% y =es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
d=zeros(4,1);
x(1) =a;
y(1)=y0;
fprintf(' x y \n');
fprintf ('=======================\n');
fprintf('%10.6f %10.6f\n',x(1),y(1));
for i=1:n-1
x(i+1)=a+h*i;
d=derivTaylor(x(i),y(i));
y(i+1)=y(i)+h*(d(1)+h*(d(2)/2+h*(d(3)/6+h*d(4)/24)));
fprintf('%10.6f %10.6f \n',x(i+1),y(i+1));
end
fprintf('=======================\n');
>>ODETaylor(0,2,1,4)
x y
=======================
0.000000 1.000000
0.500000 0.836426
1.000000 0.819628
1.500000 0.917142
2.000000 1.103683
=======================
>>


33
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
5.6. Mtodo de Euler.- Sea y
k
la aproximacin a los valores y(x
k
) para puntos x
k
x
0
+kh, k=
1,2,3..luego:
y
0
= y(x
0
)
..
y
k+1 =
y
k
+ hf(x
k
,y
k
)
x
k+1
= x
k
+ h
La ecuacin diferencial 1 ) 0 ( ) 1 (
2
= = ' y con x y y
Si tomamos el tamao de paso h=1, desde x=0 hasta x=2 hallamos:
x = 0, y = 1
y= 1 + 1*f(x,y) = 0
x=1, y=0
y= 0 + 1*f(x,y) = 0
El programa ser mostrado pero envuelve errores muy grandes, por eso su uso es limitado. La
funcin ser:





















function z=fe(x,y)
z= y*(x.*x-1);
functioneuler(f,a,b,n,y0)
% Euler ODE
% Mtodo de Euler
%Datos
% f =el nombre de la funcin como string
% a =limite inferior
% b =limite superior
% h =longitud del segmento
% y0 =f(a);
% x =es el vector x
% n =numero de segmentos
% Resultados
% y =es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
x(1)=a;
y(1)=y0;
fprintf(' x y \n');
fprintf('=======================\n');
fprintf('%10.6f %10.6f\n',x(1),y(1));
for i=1:n-1
x(i+1)=a+h*i;
y(i+1)=y(i)+h*feval(f,x(i),y(i));
fprintf('%10.6f %10.6f\n',x(i+1),y(i+1));
end
fprintf('=======================\n');
% grafico
plot(x,y)
grid on
title('plot de dy/dx=f()')
xlabel('x')
ylabel('y')


34
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013









5.7. Euler aplicado a un pndulo simple.-
Un pndulo simple sujeto por una cuerda de Longitud L, gobernado por la
ecuacin : u
u
u sen
L
g
d
wdw
ODE la y sen mg
dt
x d
m = + :
2
2






>>euler('fe',0,2,4,0.5)
x y
=======================
0.000000 0.500000
0.500000 0.250000
1.000000 0.156250
1.500000 0.156250
2.000000 0.253906
=======================
>>
functionderiv = dwdfi(fi,w)
%Movimiento de un pndulo simple
global L;
g=32.2014;
%wLdw/dfi = -gsin(fi)
deriv=(-g/L)*sin(fi)/w;


35
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013

































functionEulerDemo()
% Euler ODE Demo
% Caso del pendulo simple
% Datos
% a =lmite inferior (79)
% b =lmite superior
% h =longitud del segmento
% y0 =f(a);
% x =es el vector x
% n =nmero de segmentos
% Resultados
% y =es el vector f(x)
global L;
n=28;
L=2.5;
a=79*pi/180;
b=65*pi/180;
y0=0.66488546;
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
x(1)=a;
y(1)=y0;
fprintf(' x y \n');
fprintf('=======================\n');
fprintf('%10.6f %10.6f\n',x(1)*180/pi,y(1));
for i=1:n-1
x(i+1)=a+h*i;
y(i+1)=y(i)+h*feval('dwdfi',x(i),y(i));
fprintf('%10.6f %10.6f\n',x(i+1)*180/pi,y(i+1));
end
fprintf('=======================\n');
% grafico
plot(x,y)
gridon
title('plot de un pendulo simple')
xlabel('fi(angulo)')
ylabel('w(rad/seg)')


36
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
RESULTADOS
Tenemos dos resultados
a) Los clculos
b) El grafico.
Los clculos





































>>EulerDemo()
x y
=======================
79.000000 0.664885
78.500000 0.830837
78.000000 0.963411
77.500000 1.077535
77.000000 1.179378
76.500000 1.272243
76.000000 1.358153
75.500000 1.438457
75.000000 1.514110
74.500000 1.585818
74.000000 1.654121
73.500000 1.719443
73.000000 1.782123
72.500000 1.842440
72.000000 1.900625
71.500000 1.956871
71.000000 2.011343
70.500000 2.064184
70.000000 2.115515
69.500000 2.165444
69.000000 2.214065
68.500000 2.261461
68.000000 2.307707
67.500000 2.352868
67.000000 2.397005
66.500000 2.440170
66.000000 2.482414
65.500000 2.523779
65.000000 2.564307
=======================
>>


37
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
El grafico

5.8. El mtodo de Heun Utiliza el mtodo Predictor Corrector
| | )) ( , ( )) ( , (
2
1 1 1 0 0 0
x y x f x y x f
h
y y + + ~
es una aproximacin
Pero tenemos
| | )) , ( , ( ) , (
2
0 0 0 1 0 0 0
y x hf y x f y x f
h
y y + + + =

El proceso de Euler es usado como prediccin, y la regla del trapezoide como de correccin.
Resumiendo el mtodo de Heun es:






| | ) , ( ) , (
2
) , (
1 1 1
1
1
+ + +
+
+
+ + =
+ =
+ =
k k k k k k
k k
k k k k
p x f y x f
h
y y
h x x
y x hf y p



38
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013















Ejecucin:

















functionHeun(f,a,b,n,y0)
% Heun ODE
% Datos
% f = el nombre de la funcin como string
% a = limite inferior
% b = limite superior
% h = longitud del segmento
% y0 = f(a)
% x = es el vector x
% n = numero de segmentos
% Resultados
% y = es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
p=zeros(n,1);
x(1)=a;
y(1)=y0;
p(1)=0;
fprintf(' x p y \n');
fprintf('==============================================\n');
fprintf('%10.6f %10.6f \n',x(1),y(1));
for i=1:n-1
p(i+1)=y(i)+h*feval(f,x(i),y(i));
x(i+1)=a+h*i;
y(i+1)=y(i)+0.5*h*(feval(f,x(i),y(i))+feval(f,x(i+1),p(i+1)));
fprintf('%10.6f%10.6f%10.6f\n',x(i+1),p(i+1),y(i+1));
end
>> f=inline('y*(x*x-1)','x','y')

f =
Inline function:
f(x,y) = y*(x*x-1)

>>Heun(f,0,2,4,1)
x p y
==============================================
0.000000 1.000000
0.500000 0.500000 0.656250
1.000000 0.410156 0.533203
1.500000 0.533203 0.699829
2.000000 1.137222 1.771442
>>


39
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
5.9. Mtodo de Runge-Kutta.- Son los mtodos ms utilizados, son muy simples pues calculan
y
n+1
con y
n

5.9.1. Runge-Kutta de orden 2.-Utilizan la tcnica
n n n
y y y A + =
+1
donde
| | donde x y
n
; A = A es una pendiente promedio, basada en los coeficientes de
Runge. Para RK a 2 etapas tenemos,
)
2
,
2
(
) , (
1 2
1
2 1
k
h
y
h
x f k
y x f k
hk y y
n n
n n
n n
+ + =
=
+ =
+


























function [x, y]= RK2(f,a,b,n,y0)
% RUNGE KUTTA 2
% Datos
% f = el nombre de la funcin como string
% a = limite inferior
% b = limite superior
% h = longitud del segmento
% y0 = f(a)
% x = es el vector x
% n = numero de segmentos
% Resultados
% y = es el vector f(x)
h=(b-a)/n;
n=n+1;
y=zeros(n,1);
x=zeros(n,1);
x(1)=a;
y(1)=y0;
fprintf(' x y \n');
fprintf('==============================================\n');
fprintf('%10.6f%10.6f \n',x(1),y(1));
for i=1:n-1
k1=feval(f,x(i),y(i));
k2=feval(f,x(i)+h/2,y(i)+h*k1/2);
x(i+1)=a+h*i;
y(i+1)=y(i)+h*k2;
fprintf('%10.6f%10.6f\n',x(i+1),y(i+1));
end


40
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013







5.9.2. Runge-Kutta de orden 4.- Maneja una combinacin mayor de pendientes, la forma
generalizada es la siguiente
| |
) , (
)
2
,
2
(
)
2
,
2
(
) , (
:
, 2 2
6
3 4
2 3
1 2
1
4 3 2 1 1
hk y h x f k
k
h
y
h
x f k
k
h
y
h
x f k
y x f k
donde
k k k k
h
y y
k k
k k
k k
k k
k k
+ + =
+ + =
+ + =
=
+ + + + =
+

















>> f=inline('y*(x*x-1)')
f = Inline function:
f(x,y) = y*(x*x-1)
>> a=0;b=2;n=2;y0=1;
>>RK2(f,a,b,n,y0);
x y
==============================================
0.000000 1.000000
1.000000 0.625000
2.000000 1.406250
>>
function [x, y]= RK4(f,a,b,n,y0)
% RUNGE KUTTA 4
% Datos
% f = el nombre de la funcin como string
% a = lmite inferior
% b = lmite superior
% h = longitud del segmento
% y0 = f(a)
% x = es el vector x
% n = nmero de segmentos
% Resultados
% y = es el vector f(x)
h=(b-a)/n;n=n+1;y=zeros(n,1);x=zeros(n,1);
x(1)=a; y(1)=y0;
fprintf(' x y \n');
fprintf('==============================================\n');
fprintf('%10.6f%10.6f \n',x(1),y(1));
for i=1:n-1
k1=feval(f,x(i),y(i));
k2=feval(f,x(i)+h/2,y(i)+h*k1/2);
k3=feval(f,x(i)+h/2,y(i)+h*k2/2);
k4=feval(f,x(i)+h,y(i)+h*k3);
x(i+1)=a+h*i;
y(i+1)=y(i)+h*(k1+2*k2+2*k3+k4)/6;
fprintf('%10.6f%10.6f\n',x(i+1),y(i+1));


41
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013




















































>> f=inline('4*exp(0.8*x)-0.5*y')

f =

Inline function:
f(x,y) = 4*exp(0.8*x)-0.5*y

>> a=0;b=2;n=4;y0=2;
>>RK4(f,a,b,n,y0);
x y
==============================================
0.000000 2.000000
0.500000 3.751699
1.000000 6.195042
1.500000 9.707772
2.000000 14.845106
>>


42
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
6. PROCESAMIENTO DE SEALES En este captulo veremos varias de las funciones que estn
relacionadas con el procesamiento de seales. Primero veremos en el dominio del tiempo y
despus en el dominio de la frecuencia:
6.1. Anlisis en el dominio del tiempo
6.1.1. Funciones que actan sobre vectores: Las funciones que veremos a continuacin
solamente actan sobre vectores:
- [xmax, ind] = max(x) donde: x es el vector que contiene n elementos y xmax ser el
mximo e ind la posicin que ocupa xmax.
- [xmin, ind] = min(x) donde: x es el vector que contiene n elementos y xmin ser el mnimo
e ind la posicin que ocupa xmin.
- suma =sum(x) donde: x es un vector y sum nos devuelve la suma de los elementos de
ese vector.
- vecsum = cumsum(x) donde: x es el vector que contiene n elementos y vecsum
contendr la suma acumulativa de los elementos de x.
- promedio = mean(x) donde: mean es el promedio de los elementos de x.
- desviacin= std(x) retorna la desviacin estndar de los valores del vector x.
- producto = prod(x) producto de los elementos del vector x.
- sort(x) ordena los elementos del vector x
Programa 1.- Procesamiento en el dominio del tiempo
% Entrega una vector con la seal limpia
% Lee archivo cas.wav
%Archivo tiempo01
%yc1 vector original componentes
%y1cas vector sin silencios componentes
%y1casn vector sin silencios y normalizado componentes
clc;
echo off;
%************PROCEDIMIENTO DE LECTURA*******************
[yc1, Fs, Bits] = wavread ('d:cas2.wav');
lon = size(yc1);
fprintf('\nLongitud del vector: %d\n',lon(1));pause;
%**********CALCULA MAYOR MENOR Y MAYOR ABSOLUTO********
[mayor,jj]=max(yc1);
[menor,jj]=min(yc1);
if abs(mayor) > abs(menor)
mayabs = abs(mayor);
else
mayabs = abs(menor);
end;


43
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
%**************HALLA ARCHIVOS SIN SILENCIOS******************
des = (mayabs/100)*20;
a= size(yc1);
for i=1:lon(1);
if abs(yc1(i)) > des
limitea = i;
break
end;
end;
limiteb=limitea+3000
k= 0:(limiteb-limitea);
y1cas = yc1(limitea :limiteb);
b = size(y1cas);
fprintf('\nLongitud del vector: %d\n',b(1));
y1casn = y1cas;
%***********NORMALIZA DIGITOS DOS****************
for i=1:(limb - lima)+1;
y1casn(i)=y1casn(i)/mayabs;
end;
%***********GRAFICA DE LOS VECTORES ****************
subplot(3,1,1);
t=1:lon(1);
plot(t,yc1);
grid;
ylabel('yc1');
title('Digito dos de castaeda');
axis([0 a(1) menor mayor]);
subplot(3,1,2);t=k;
plot(t,y1cas);grid;
axis([0 (limb-lima) menor mayor]);
ylabel('y1cas');
subplot(3,1,3);plot(t,y1casn);grid;
axis([0 (limb-lima) -1 1]);
ylabel('y1casn');
xlabel('Numero de muestras');
fprintf('\n\n Presione una tecla para terminar...');
pause;

Tarea :Halle la media de los valores de x y la desviacin estndar.





44
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
Programa 2.- Procesamiento en el dominio del tiempo
% Lee 5 archivos de voz. Tiempo2
% Visualiza los 5 archivos de voz sin silencios y normalizados
% Los archivos procesados son cas1, cas2,cas3,cas4 y cas5.wav
% Todos los archivos son del locutor castaeda
clc;
echo off;
%************PROCEDIMIENTO DE LECTURA*******************
[yc1, Fs, Bits] = wavread ('a:cas1.wav');
[yc2, Fs, Bits] = wavread ('a:cas2.wav');
[yc3, Fs, Bits] = wavread ('a:cas3.wav');
[yc4, Fs, Bits] = wavread ('a:cas4.wav');
[yc5, Fs, Bits] = wavread ('a:cas5.wav');
lon1 = size(yc1);
lon2 = size(yc2);
lon3 = size(yc3);
lon4 = size(yc4);
lon5 = size(yc5);
fprintf('\nLongitud del vector yc1: %d \n',lon1(1));
fprintf('\nLongitud del vector yc2: %d \n',lon2(1));
fprintf('\nLongitud del vector yc3: %d \n',lon3(1));
fprintf('\nLongitud del vector yc4: %d \n',lon4(1));
fprintf('\nLongitud del vector yc5: %d \n',lon5(1));
%**********CALCULA MAYOR MENOR Y MAYOR ABSOLUTO********
[mayor1,jj]= max(yc1);
[menor1,jj]= min(yc1);
if abs(mayor1) > abs(menor1)
mayabs1= abs(mayor1);
else
mayabs1 = abs(menor1);
end;
[mayor2,jj]= max(yc2);
[menor2,jj]= min(yc2);
if abs(mayor2) > abs(menor2)
mayabs2= abs(mayor2);
else
mayabs2 = abs(menor2);
end;
[mayor3,jj]= max(yc3);
[menor3,jj]= min(yc3);
if abs(mayor3) > abs(menor3)


45
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
mayabs3= abs(mayor3);
else
mayabs3 = abs(menor3);
end;
[mayor4,jj]= max(yc4);
[menor4,jj]= min(yc4);
if abs(mayor4) > abs(menor4)
mayabs4= abs(mayor4);
else
mayabs4 = abs(menor4);
end;
[mayor5,jj]= max(yc5);
[menor5,jj]= min(yc5);
if abs(mayor5) > abs(menor5)
mayabs5= abs(mayor5);
else
mayabs5 = abs(menor5);
end;
%**************HALLA ARCHIVOS SIN SILENCIOS******************
des = (mayabs1/100)*20;
for i=1:lon1(1);
if abs(yc1(i)) > des
lima1 = i;
break
end;
end;
limb1=lima1+3000;
k1= 0:(limb1-lima1);
y1cas = yc1(lima1 :limb1);
y1casn = y1cas;
%******************************************************************
des = (mayabs2/100)*20;
for i=1:lon2(1);
if abs(yc2(i)) > des
lima2 = i;
break
end;
end;
limb2=lima2+3000 ;
k2= 0:(limb2-lima2);
y2cas = yc2(lima2 :limb2);


46
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
y2casn = y2cas;
% ******************************************************************
des = (mayabs3/100)*20;
for i=1:lon3(1);
if abs(yc3(i)) > des
lima3 = i;
break
end;
end;
limb3=lima3+3000;
k3= 0:(limb3-lima3);
y3cas = yc3(lima3 :limb3);
y3casn = y3cas;
% **************************************************************
des = (mayabs4/100)*20;
for i=1:lon4(1);
if abs(yc4(i)) > des
lima4 = i;
break
end;
end;
limb4= lima4+3000;
k4= 0:(limb4-lima4);
y4cas = yc4(lima4 :limb4);
y4casn = y4cas;
% **************************************************************
des = (mayabs5/100)*20;
for i=1:lon5(1);
if abs(yc5(i)) > des
lima5 = i;
break
end;
end;
limb5= lima5+3000;
k5= 0:(limb5-lima5);
y5cas = yc5(lima5 :limb5);
y5casn = y5cas;
%***********NORMALIZA DIGITOS DOS****************
for i=1:(limb1 - lima1)+1;
y1casn(i)=y1casn(i)/mayabs1;
end;


47
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
for i=1:(limb2 - lima2)+1;
y2casn(i)=y2casn(i)/mayabs2;
end;
for i=1:(limb3 - lima3)+1;
y3casn(i)=y3casn(i)/mayabs3;
end;
for i=1:(limb4 - lima4)+1;
y4casn(i)=y4casn(i)/mayabs4;
end;
for i=1:(limb5 - lima5)+1;
y5casn(i)=y5casn(i)/mayabs5;
end;
%***********GRAFICA DE LOS VECTORES ****************
% ***vector1***
subplot(5,1,1);
t=k1;
plot(t,y1casn);grid;
axis([0 (limb1-lima1) -1 1]);
ylabel('y1casn');
xlabel('Numero de muestras');
% ***vector2***
subplot(5,1,2);
t=k2;
plot(t,y2casn);grid;
axis([0 (limb2-lima2) -1 1]);
ylabel('y2casn');
xlabel('Numero de muestras');
% ***vector3***
subplot(5,1,3);
t=k3;
plot(t,y3casn);grid;
axis([0 (limb3-lima3) -1 1]);
ylabel('y3casn');
xlabel('Numero de muestras');
% ***vector4***
subplot(5,1,4);
t=k4;
plot(t,y4casn);grid;
axis([0 (limb4-lima4) -1 1]);
ylabel('y4casn');
xlabel('Numero de muestras');


48
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
% ***vector5***
subplot(5,1,5);
t=k5;
plot(t,y5casn);grid;
axis([0 (limb5-lima5) -1 1]);
ylabel('y5casn');
xlabel('Numero de muestras');
fprintf('\n\n Presione una tecla para terminar...');
pause;
Programa 3.- Procesamiento en el dominio del tiempo
%PROGRAMA QUE MUESTRA UN DIGITO CON VENTANAS DE ANCHO VARIABLE
%PROGRAMA TIEMPO03
%UTILIZA ARCHIVO NORMALIZADO: Y1CASN
clc;
tv =1000;
tv =input('ingrese ancho de la ventana ==> ');
figure(1);
tam = size(y1casn);
tamano = tam(1);
cont = 0;
for v= 1 : 2*tv :tamano;
cont = cont + 1;
v1 = v; %VALOR INFERIOR DE LA VENTANA
v2 = v + tv; %VALOR SUPERIOR DE LA VENTANA
if v2 >tamano
fprintf('\n Fin de la seal\n');
pause;
break;
end;
cont = cont +1;
subplot(2,1,1); plot([v1:v2],y1casn(v1:v2));
grid; title('Observando la seal por ventanas');
axis([v1 v2 -1 1]);
ylabel('Ventana ');
v1 = v2; %VALOR INFERIOR DE LA VENTANA
v2 = v2+ tv ; %VALOR SUPERIOR DE LA VENTANA
if v2 >tamano
fprintf('\n Fin de la senal\n');
pause;
break;
end;


49
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
subplot(2,1,2); plot([v1:v2],y1casn(v1:v2));
grid;
axis([v1 v2 -1 1]);
ylabel('Ventana sgte');
fprintf('\n Presione una tecla para continuar \n');
pause;
end;
Programa 4.- Procesamiento en el dominio del tiempo
%PROGRAMA TIEMPO05-CALCULA PARAMETRO MEDIA.
%UTILIZA ARCHIVO NORMALIZADO: Y1CASN
%CONSIDERA TAMAO DE VENTANA E INCREMENTO DE VENTANA
clc;
fprintf('Inicio de programa \n');
vtam = input('ingrese tamao de la ventana ==> ');
vinc = input('ingrese incremento de la ventana ==> ');
%figure(1);
tam = size(y1casn);
tamano = tam(1);
j1=1;
j2=vtam;
for i= 1 :100;
if(j2 >tamano)
fprintf('\n FIN DEL PROGRAMA \n');
fprintf('\n Presione enter para mostrar tabla...\n');
pause;
break;
end;
media = 0;
for j=j1 : j2;
media = media + y1casn(j);
end;
medias(i) = media/vtam;
j1 = j1 + vinc;
j2 = j2 + vinc;
end;
m=i-1;
clc;
fprintf('\n \t\t\t MEDIAS \n');
fprintf('\t\t\t =======\n\n');
fprintf(' \t\t\t[Indice] \t[Mag]\n');
for i=1:m;


50
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
fprintf(' \t\t\t %d \t%8.2f\n',i,medias(i));
end;
Programa 4.- Procesamiento en el dominio del tiempo
%CALCULA ENERGIA DE UNA SEAL DE VOZ . TIEMPO6
%UTILIZA ARCHIVO NORMALIZADO: Y1CASN
%CONSIDERA TAMAO DE VENTANA E INCREMENTO DE VENTANA
clc;
fprintf('Inicio de programa \n');
vtam = input('ingrese tamao de la ventana ==> ');
vinc = input('ingrese incremento de la ventana ==> ');
tam = size(y1casn);
tamano = tam(1);
j1=1;
j2=vtam;
for i= 1 :100;
if(j2 >tamano)
fprintf('\n \n Presione enter para visualizar tabla...\n');
pause;
break;
end;
energia = 0;
for j=j1 : j2;
energia = energia + y1casn(j)*y1casn(j);
end;
energias(i) = energia/vtam;
j1 = j1 + vinc;
j2 = j2 + vinc;
end;
m=i-1;
fprintf('\n\t\t\t ENERGIAS \n');
fprintf('\t\t\t========\n\n');
fprintf(' \t\t\t[Indice] \t[Energa]\n');
for i=1:m;
fprintf(' \t\t\t %d \t %6.2f\n',i,energias(i));
end;

6.2. Anlisis en el dominio de la frecuencia.- Una seal analgica es una seal continua que
representa informacin, en nuestro caso una seal de voz. A fin de procesar esta seal en la
computadora, la seal analgica puede muestrearse varias veces por segundo, generando as una
seal digital que es una sucesin de valores tomados de la seal analgica original.


51
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
Espectro de frecuencias.- El contenido de frecuencias de una seal se denomina espectro de
frecuencias.Trasformada discreta de Fourier.- Se usa para convertir una seal digital en el
dominio del tiempo en un conjunto de puntos en el dominio de la frecuencia, para esto se utiliza un
algoritmo especial que acorta el clculo y se llama la trasformada rpida de Fourier
Programa 6.2.1.- Utiliza la FFT y pasa la seal del tiempo al dominio de la frecuencia
% Programa halla la transformada de fourier
% Programa frec01
% Vector y1casn
clc; echo off;
%************PROCEDIMIENTO DE LECTURA*******************
[yc1, Fs, Bits] = wavread ('d:cas2.wav');
lon = size(yc1);
fprintf('\nLongitud del vector: %d\n',lon(1));pause;
%**********CALCULA MAYOR MENOR Y MAYOR ABSOLUTO********
[mayor,jj]=max(yc1); [menor,jj]=min(yc1);
if abs(mayor) > abs(menor)
mayabs = abs(mayor);
else
mayabs = abs (menor);
end;
%**************HALLA ARCHIVOS SIN SILENCIOS******************
des = (mayabs/100)*20;
a= size(yc1);
for i=1:lon(1);
if abs(yc1(i)) > des
lima = i; break
end;
end;
limb=lima+3000
k= 0:(limb-lima);
y1cas = yc1(lima :limb);
b = size(y1cas);
fprintf('\nLongitud del vector: %d\n',b(1));
y1casn = y1cas;
%***********NORMALIZA DIGITOS DOS****************
for i=1:(limb - lima)+1;
y1casn(i)=y1casn(i)/mayabs;
end; clc; tam= size(y1casn); tamano = tam(1);
fprintf('\n Inicio del programa \n');
% *********MOSTRAMOS LA SEAL*****************


52
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
figure(1);fs =Fs;
subplot(2,1,1);plot([1:tamano],y1casn);grid;
title('Dgito dos de Castaeda');ylabel('y1casn');zoom on;
%****Mostramos la transformada de Fourier*****
Fy1casn=fft(y1casn,512); w=(0:255)/512*fs;
subplot(2,1,2);plot(w, abs(Fy1casn(1:256)));grid;
ylabel('Fourier de y1casn');zoom on;
%********TERMINA PROCESO***********
fprintf('transformada generada, Presione tecla para terminar......');


Fig.6.1 (a) Digito dos de castaeda seal en el tiempo (b) Transformada deFourier,seal en el dominio
de la frecuencia.

- Programa 6.2.2.- Muestra el espectrograma de el digito dos de castaeda
% Programa grafica espectrograma
% Programa frec02
% Vector y1casn
clc;
%*********Mostramos la seal*****************
figure(1); subplot(2,1,1);plot(y1casn);grid;
title('Espectrograma del Dgito dos de Castaeda');
ylabel('y1casn');zoom on;


53
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
%****Mostramos espectrograma****************
subplot(2,1,2);
specgram(y1casn,256, Fs,256, 250);
%********Termina proceso***********
fprintf('Espectrograma mostrado, Presione tecla para terminar......');

Fig.6.3 (a) Seal de voz en el tiempo (b) Espectrograma en la frecuencia

- Programa 6.2.3.- Filtra el dgito dos para frecuencias de 100 a 1800 Hz.
% Programa filtra digito Programa frec03
% vector y1casn
clc; vc= y1casn'; % vc es voz de Castaeda
%*********FILTRAMOS LA SEAL****************
figure(1);
[b,a]=butter(4,[100 1800]*2/Fs);
[H, w]= freqz(b,a,512);
subplot(2,1,1);
plot(w*Fs/(2*pi),abs(H));
title('Filtro Butterworth 100 -1800 Hz');grid;zoom on;
vcf= filter(b,a,vc);


54
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
VC= fft(vc,512);VCF= fft(vcf,512);
w=(0:255)/256*(Fs/2);
subplot(2,1,2);plot(w, abs([VC(1:256)' VCF(1:256)']));
title('Dgito dos ');ylabel('Castaeda');zoom on; grid;
y1casnf=vcf';
%********TERMINA PROCESO***********
fprintf('Seal filtrada , Presione tecla para terminar......');


Fig.6.3 (a) Grafico del filtro butterworth de 101 a 11800 Hz. (b) Transformada deFourier de la seal
(azul) y la seal filtrada (verde).
- Programa 6.2.4.- Filtra el dgito dos con filtro tipo elptico
% Aplicacin de filtro elptico a vector de voz
% Archivo frec04.m, Vector: y1casn
clc; vc= y1casn';
figure(1);
[b,a]= ellip(4,0.005,40,[100 1800]*2/Fs);
[H,w]=freqz(b,a,512);
subplot(2,1,1); plot(w*Fs/(2*pi), abs(H));
title('FiltroElpticopasabanda'); grid; zoom on;
vcf= filter(b,a,vc); VC= fft(vc,512); VCF= fft(vcf,512);
w=(0:255)/256*(Fs/2);subplot(2,1,2);
plot(w, abs([VC(1:256)' VCF(1:256)']));


55
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
axis([0 6000 0 50]); title('Dgito dos de Castaeda');
xlabel('Frecuencia'); ylabel('Magnitud'); zoom on; grid; pause;
y1casnf=vcf';fprintf('\n Seales filtradas: \n\n');



Fig. 6.4 (a) Filtro elptico de 100 a 1800 (b) Voz sin filtro(azul), con filtro (verde).

- Programa 6.2.5.- Aplica filtro chebychev a seal de voz dgito dos
% Filtrando frecuencias formantes
% Archivo frec05.m
% Aplica filtros pasabajo a y1casn
clc;
vc=y1casn'; figure(1);
[b,a]=cheby1(12,0.005,2000*2/Fs);
[H,w]=freqz(b,a,512);
subplot(2,1,1);plot(w*Fs/(2*pi),abs(H));
title('FILTRO CHEBYSHEV PASABAJOS'); grid; zoom on;
vcf = filter(b,a,vc);VC= fft(vc,512); VCF= fft(vcf,512);
w=(0:255)/256*(Fs/2);
subplot(2,1,2);plot(w, abs([ VC(1:256)' VCF(1:256)']));


56
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
title('Dgito dos Castaeda'); ylabel('Magnitud');
zoom on; grid; pause;
y1casnf=vcf';

Fig.6.5 (a) Filtro chebyshev de 100 a 1800 (b) Voz sin filtro(azul), con filtro (verde).

- Programa 6.2.6.- Halla mximos del dgito dos pero en la frecuencia
%Hallo mximos de frecuencia
% Archivo frec06.m
% Vector: y1casn
% *********************************************
clc;
vc=y1casn';
[b,a]=butter(4,[100 1800]*2/Fs);
[H,w]=freqz(b,a,512);
vcf= filter(b,a,vc);
figure(1);
VC= fft(vc,512); VCF= fft(vcf,512);
w=(0:255)/256*(Fs/2);
stem(w, abs(VC(1:256)'));
axis ([0 1800 0 30]);


57
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
title('Digito dos ');
ylabel('CASTAEDA');zoom on;grid;
y1casnf = vcf';
Fynf = fft(y1casnf,512);
pause;
%*****HALLO MAXIMOS DE FRECUENCIA*****
clc;
fprintf('Inicio de programa \n');
estado = -1;
anterior = Fynf(1);
contmax=0;
for i=2 : 256;
if ((Fynf(i)<anterior)&(estado ==1))
contmax =contmax +1;
vcon(contmax)=i-1;
estado = -1;
else
if((Fynf(i)> anterior)& (estado ==-1))
estado = 1;
end;
end;
anterior = Fynf(i);
end;
for i= 1:contmax;
kk=vcon(i);
mayores(i)=abs(Fynf(kk));
frec(i)=w(kk);
end;
[mayor,jj]=max(mayores);
K1=0;
for i=1:contmax;
ifmayores(i)>0.20*mayor;
K1=K1+1;
mayores1(K1)=mayores(i);
frec1(K1)=frec(i);
end;
end;
fprintf('\n MAXIMOS DE LA SENAL \n');
fprintf(' ===================\n');
fprintf(' [ndice] \t[Frecuencia]\t[Magnitud]\n');
for i=1:K1;


58
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
fprintf(' %d\t \t%8.2f\t%6.2f\n',i,frec1(i),mayores1(i));
end;
Ejecucin del programa frec06:









- Programa 6.2.7.- Halla promedio de frecuencias
% Filtra digito dos y halla promedio de frecuencias **
% Archivo frec07.m
% Vectores:
% y1casn
% y1casnf
% vc y vc
% vcf y vcf
% *********************************************
clc;
vc=y1casn';
[b,a]=butter(4,[100 1800]*2/Fs);
[H,w]= freqz (b,a,512);
vcf= filter (b,a,vc);
figure(1);
VC= fft (vc,512); VCF= fft (vcf,512);
w=(0:255)/256*(Fs/2);
%subplot(3,1,1);
stem(w, abs(VC(1:256)'));axis([0 1800 0 30]);
title('Dgito dos ');
ylabel('CASTAEDA');zoom on;grid;y1casnf=vcf';
Fynf = fft(y1casnf,512);pause;
%*****HALLO PROMEDIO DE FRECUENCIA*****
clc;
fprintf('Inicio de programa \n');promedio = mean(abs(Fynf))*100;
Inicio de programa

MAXIMOS DE LA SENAL
===================
[ndice] [Frecuencia] [Magnitud]
1 129.20 21.89
2 215.33 21.58
3 387.60 24.71
4 559.86 6.99
5 775.20 6.22
6 1119.73 5.38


59
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
fprintf('\n Promedio = %8.2f\n',promedio);
fprintf(' \n=======FIN============\n');
%******************************************************

Ejecucin del programa frec07:




















































Inicio de programa
Promedio = 160.04
=======FIN============



60
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
7. SISTEMAS DE CONTROLEn este captulo veremos tres temas que son
Modelado de Sistemas
Conversin de modelos
Funciones de diseo y anlisis
Estos temas no los trataremos a fondo pero nos servir para tener una visin de las aplicaciones del
matlab.
7.1. MODELADO DE SISTEMAS El anlisis y diseo de sistemas lineales empieza con el modelado
de sistemas reales. Estos modelos que son representaciones matemticas de sistemas
qumicos, sistemas mecnicos y electrnicos, sirven para estudiar la respuesta dinmica de los
sistemas reales. Las tcnicas matemticas empleadas por matlab para disear y analizar estos
sistemas suponen procesos que son fsicamente realizables, lineales e invariantes en el tiempo.
(LTI). El matlab utiliza modelos en la forma de FUNCIONES DE TRANSFERENCIA o
ECUACIONES DE ESPACIO DE ESTADOS, haciendo posible as el empleo de tcnicas de
diseo y anlisis de sistemas de control tanto clsicas como modernas. Estas formas se pueden
expresar en tiempo continuo o discreto. Las funciones de transferencia se pueden expresar como
un polinomio, un cociente de polinomios o una de las dos formas factorizadas: cero-polo-ganancia
o fracciones parciales. Los modelos de sistema de espacio de estados son idneos para matlab
porque son una expresin basada en matrices. Veamos un ejemplo: tenemos un sistema, tiene
tres fuerzas que actan

K p y (t)

M u(t)

B

x(t)

Sistema de resorte- masa amortiguador
Tenemos tres fuerzas que actan sobre una masa m: una fuerza de entrada que depende del tiempo
u(t), un resorte con constante de resorte k y un amortiguador viscoso con constante de amortiguacin
b. la posicin de la masa en funcin del tiempo est representada por x(t). Conectamos a la masa un
potencimetro de medicin p que proporciona un voltaje de salida y(t) proporcional a x(t) .

La ecuacin de movimiento de la masa est dada por la ecuacin diferencial de segundo orden:
) (t u kx x b x m = + ' + ' '
y la ecuacin del potencimetro es:
y (t) = px(t)


61
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
7.1.1. FUNCIONES DE TRANSFERENCIA.-El anlisis de los sistemas lineales y de control con frecuencia
implica determinar ciertas propiedades dinmicas, como estabilidad y respuesta en frecuencia, que
no es fcil determinar usando anlisis en el dominio del tiempo. Para este anlisis obtenemos una
transformada de Laplace de la ecuacin y pasamos del dominio del tiempo al dominio de la
frecuencia. La transformada de Laplace del anterior sistema es
) ( ) ( ) (
2
s u s x k bs ms = + +
donde s es una variable compleja (o+jw), llamada variable de
Laplace. Si llamamos H(s) a la funcin de transferencia que relaciona el movimiento de salida del
sistema x(s) con la fuerza de entrada u(s):
k bs ms s u
s x
s H
+ +
= =
2
1
) (
) (
) ( y la funcin del potencimetro es p
s x
s y
=
) (
) (

Usemos un diagrama de bloque, considerando el valor de los parmetros m=1, b= 4, k= 3, y p= 10,
tendremos:
Planta Medicin
U(s) X(s) Y(s)

Y finalmente

Sistema
U(s) Y(s)


Normalmente el numerador y el denominador de una funcin de transferencia se factorizan para
obtener la forma cero polo ganancia, por ejemplo si tenemos
15 23 9
24 18 3
) (
2 3
2
+ + +
+ +
=
s s s
s s
s H lo
expresamos como
) 5 )( 3 )( 1 (
) 4 )( 2 ( 3
) (
+ + +
+ +
=
s s s
s s
s H en esta forma estamos mostrando los polos y los
ceros del sistema respectivamente. Y finalmente podemos escribir la ltima expresin como una
expansin en fracciones parciales ) ( ...... ) (
2
2
1
1
s k
p s
r
p s
r
p s
r
s H
n
n
+

+ +

=
.
Que en nuestro caso seria:
k
s
r
s
r
s
r
s H +
+
+
+
+
+
=
5 3 1
) (
3 2 1





3 4
1
2
+ + s s

10
3 4
10
2
+ + s s



62
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
7.1.2. MODELOS DE ESPACIO DE ESTADOS.-Usando nuestro ejemplo anterior tenemos la
ecuacin:
) (t u kx x b x m = + ' + ' '
que define el movimiento, basado en esto podemos definir:
x x
x x
' =
=
2
1

A continuacin reescribimos la ecuacin diferencial de segundo orden como un conjunto de
ecuaciones diferenciales de primer orden acopladas:
u x x
m
u
x
m
b
x
m
k
x
x x
+ = + = '
= '
2 1 2 1 2
2 1
4 3

Y la ecuacin de medicin como:
y=g(x, u)=10x, utilizando la notacin matricial este modelo puede escribirse como un modelo de
espacio de estados
Du Cx y
Bu Ax x
+ =
+ = '

Que para este ejemplo representa
| | | |u
x
x
y
u
x
x
x
x
0 0 10
1
0
4 3
1 0
2
1
2
1
2
1
+
(

=
(

+
(


=
(

'
'

7.2. CONVERSION DE MODELOS
El matlab cuenta con varias funciones que facilitan la conversin de una forma de modelo a otra y
son las siguientes:






Funcin residue.-La funcin residue convierte la funcin de transferencia polinmica:
[r, p, k] = residue (B, A) Determina los vectores r, p y k, que contienen los valores de residuo, los
polos y los trminos directos de la expansin de fracciones parciales. Las entradas son los coeficientes
de los polinomios B y A del numerador y denominador de la funcin de transferencia, respectivamente.
residueExpansin de fracciones parciales.
ss2tf Espacio de estados a funcin de transferencia
ss2zp Espacio de estados a cero-polo-ganancia
tf2ss Funcin de transferencia a espacio de estados.
tf2zp Funcin de transferencia a cero-polo-ganancia.
zp2ss Cero polo ganancia a espacio de estados.
zp2tf cero polo - Espacio de estados a funcin de transferencia






63
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
Mtodo en fracciones parciales para encontrar las transformadas inversas de Laplace.-
Para encontrar la transformada inversa de Laplace debemos desarrollar un mtodo para expresar F(s)
como una suma de fracciones parciales o sea F(s) = F
1
(s) + F
2
(s) + F
3
(s) + F
4
(s) ...... y por lo tanto L
-
1
(F(s)) = L
-1
(F
1
(s) + L
-1
(F
2
(s) + L
-1
(F
3
(s) + L
-1
(F
4
(s)..
= f
1
(t) + f
2
(t) + f
3
(t) + f
4
(t) +.
Desarrollo en fracciones simples con matlab.- MATLAB tiene una orden para obtener el desarrollo
en fracciones simples de B(s) /A(s).
En primer lugar se presentar el enfoque de MATLAB para detener el desarrollo en fracciones simples
de B(s)/A(s). Despus se analiza el procedimiento que sigue MATLAB para obtener los ceros y los
polos de B(s)/A(s).
Desarrollo en fracciones simples con MATLAB. Considrese la funcin de transferencia B(s)/A(s):

den
num
s A
s B
=
) (
) (
=
n
n n
n
n n
a s a s
b s b s b
+ + +
+ + +

....
....
1
1
1
1 0

donde algunos a
i
y b
i
pueden ser cero. En MATLAB, los vectores fila num y den especificar los
coeficientes del numerador y del denominador en la funcin de transferencia. Es decir,
num = |b
0
b
1
b
n
|
den = |1 a
1
a
n
|
El comando
|r, p, k| = residue (num, den)
encuentra los residuos (r), los polos (p) y los trminos directos (k) de una desarrollo en fracciones
simples del cociente de dos polinomios B(s) y A(s).
El desarrollo en fracciones simples de B(s)/A(s) se obtiene mediante


) (
) (
) (
....
) 2 (
) 2 (
) 1 (
) 1 (
) (
) (
s k
n p s
n r
p s
r
p s
r
s A
s B
+

+ +

=

Comparando las Ecuaciones se observa que p(1) = -p
1,
p(2) = -p
2
, p(n) = -p
n
; r(1) = a
1,
r(2) = a
2
, .,
r(n) = a
n
.|K(s) es un trmino directo|.
Ejemplo: Considere la siguiente funcin de transferencia:

6 11 6
6 3 5 2
) (
) (
2 3
2 3
+ + +
+ + +
=
s s s
s s s
s A
s B

Para esta funcin,
num = |2 5 3 6|
den = |1 6 11 6|
La orden
|r , p, k| = residue (num, den)
Proporciona el resultado siguiente:











|r, p, k| = residue (num, den)
r =- 6.0000
- 4.0000
3.0000
p =- 3.0000
- 2.0000
- 1.0000
k = 2



64
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
Observe que los residuos se devuelven en el vector columna r, las posiciones de los polos en el vector
columna p y el trmino directo en el vector fila (k). Esta es la representacin en MATLAB del siguiente
desarrollo en fracciones simples de B(s)/A(s):


6 11 6
6 3 5 2
) (
) (
2 3
2 3
+ + +
+ + +
=
s s s
s s s
s A
s B


= 2
1
3
2
4
3
6
+
+
+
+

+
+

s s s



La funcin residue tambin se puede utilizar para obtener los polinomios (numerador y denominador) a
partir de su desarrollo en fracciones simples. Esto es, el comando,

|num, den| = residue (r, p, k)

donde r, p y k estn como se obtienen en el resultado de MATLAB anterior, convierte el desarrollo en
fracciones simples en la razn de polinomios B(s)/A(s) del modo siguiente:













La funcin: printsys (nun, den, s)
imprime num/den en trminos del cociente de los polinomios en s:
Observe que si p(j) = p(j+1) = . = p(j+m-1) |esto es, p
j+1
= = p
j+m-1
|, el polo p(j) es un polo del
multiplicidad m. En este caso, el desarrollo incluye trminos en la forma


| | | |
m
j p s
m j r
j p s
j r
) (
) 1 (
....
) (
) 1 (
p(j) - s
r(j)
2

+
+ +

+
+

Consltense los detalles en el Ejemplo

Ejemplo: Obtenga el desarrollo B(s)/A(s) siguiente en fracciones simples utilizando MATLAB.


( )
| |
m
j p s
m j r
s
s s
s A
s B
) (
1
.....
) 1 (
3 2
) (
) (
3
2

+
+ +
+
+ +
=
Consltense los detalles en el ejemplo 2.7.

Ejemplo: Obtenga el desarrollo B(s) A(s) siguiente en fracciones simples utilizando MATLAB.

|num, den| = residue (r, p, k);
printsys (num, den, s)
num/den =

6 11 2 6 3
6 3 2 5 3 2
+ + +
+ + +
. .
. .
s s s
s s s



65
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013

| |
m
j p s
s s
s
s s
s A
s B
) (
3 2
) 1 (
3 2
) (
) (
2
3
2

+ +
=
+
+ +
=

Para esta funcin, se tiene
num = |0 1 2 3|
den = |1 3 3 1|
La orden
|r , p, k| = residue (num, den)
Proporciona el resultado que se muestra en la pgina siguiente. Es la representacin en MATLAB del
desarrollo en fracciones simples de B(s)/A(s):

3 2
) 1 (
2
) 1 (
0
1
1
) (
) (
+
+
+
+
+
=
s s s s A
s B


















Observe que el trmino directo k es cero.
Para obtener la funcin original B(s)/A(s) a partir de r, p y k se introducen las siguientes lneas en el
computador:
Entonces el computador mostrar el num/den siguiente:

num/den =
s s s s 48 44 12
12 16s 4s
2 3 4
2
+ + +
+ +


Para obtener los ceros (z), polos (p) y ganancia (K), e introduce el siguiente programa de MATLAB en
el computador:










num = |0 1 2 3|;
den = |1 3 3 1|;
|r, p, k| = residue (num, den)
r = 1.0000
0.0000
2.0000
p =-1.0000
-1.0000
-1.0000
k=[ ]
num = |0 0 4 16 12|;
den = |1 12 44 48 0|;
|z, p, K| = tf2zp (num, den)
s = -3
-1
p = 0
-6.0000
-4.0000
-2.0000
K = 4




66
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
Entonces el computador generar la siguiente salida en la pantalla:
Los ceros son -3 y -1. Los polos estn en s = 0, -6, -4 y -2. La ganancia K es 4.
Si los ceros, los polos y la ganancia K estn dados, entonces el siguiente programa en MATLAB
generar num/den:









La funcin ss2tf convierte las ecuaciones de espacio de estados de tiempo continuo.
Du Cx y
Bu Ax x
+ =
+ = '

En la funcin de transferencia:
m m
m m
n n
n n
a s a s a s a
b b s b s b
s H
+ + + +
+ + + +
=

1
1
1 0
1
1
1 0
..........
... ..........
) (

[num, den] = ss2tf(A,B,C,D) calcula la funcin de transferencia de :
D B A sI C
s den
s num
s H + = =
1
) (
) (
) (
) (
Del sistema
Du Cx y
Bu Ax x
+ =
+ = '

El vector den contiene los coeficientes de le denominador en potencias descendientes de s. Los
coeficientes del numerador son retornados en num.
Ejemplo: Las ecuaciones de espacios de estados para nuestro sistema:
| | | |u
x
x
y
u
x
x
x
x
0 0 10
1
0
4 3
1 0
2
1
2
1
2
1
+
(

=
(

+
(


=
(

'
'

Usamos el programa:









z = |-1; -3|;
p = |-1; -2; -4; -6|;
K = 4
|num, den| = zp2tf(z,p,K);
Printsys (num, den, s)
num / den =
s s s s
s s
48 2 44 3 12 4
12 16 2 4
+ + +
+ +
. . .
.


%convertir modelo de espacio de estados en funcin de transferencia
A=[0,1;-3,-4];
B=[0,1]';
C=[10,0];
D=0;
[num,den]= ss2tf(A,B,C,D)


67
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013

RESULTADO:
cap601
num =
0 0 10
den =
1 4 3
Que significa:
3 4
10
) (
) (
) (
2
+ +
= =
s s s u
s y
S H


La funcin ss2zp convierte las ecuaciones de espacio de estados de tiempo continuo.
Du Cx y
Bu Ax x
+ =
+ = '

En la funcin de transferencia de cero-polo-ganancia:
) ).......( )( (
) ( )......... )( (
) (
2 1
2 1
m
n
p s p s p s
z s z s z s
k s H


=
Ejemplo: Las ecuaciones de espacios de estados para nuestro sistema:
| | | |u
x
x
y
u
x
x
x
x
0 0 10
1
0
4 3
1 0
2
1
2
1
2
1
+
(

=
(

+
(


=
(

'
'

Usamos el programa:









RESULTADO:
>> cap602
z = Emptymatrix: 0-by-1
p =
-1
-3
k = 10
Que significa:
) 3 )( 1 (
10
) (
) (
) (
+ +
= =
s s s u
s y
S H


%convertir modelo de espacio de estados al cero-polo-ganancia
A= [0, 1;-3,-4];
B= [0, 1]';
C= [10, 0];
D=0;
[z, p, k]= ss2zp(A,B,C,D)


68
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
La funcin tf2zp convierte la funcin de transferencia polinmica
m m
m m
n n
n n
a s a s a s a
b b s b s b
s H
+ + + +
+ + + +
=

1
1
1 0
1
1
1 0
..........
... ..........
) (
En la funcin de transferencia de cero-polo-ganancia:
) ).......( )( (
) ( )......... )( (
) (
2 1
2 1
m
n
p s p s p s
z s z s z s
k s H


=
Ejemplo: La funcin de transferencia polinmica:
3 4
10
) (
) (
) (
2
+ +
= =
s s s u
s y
S H
Se convierte en una funcin de transferencia cero-polo-ganancia usando el programa:








RESULTADO:
>> cap603
z = Emptymatrix: 0-by-1
p =
-1
-3
k = 10
Que significa:
) 3 )( 1 (
10
) (
) (
) (
+ +
= =
s s s u
s y
S H


















%convierte funcin de transferencia en cero-polo-ganancia
num=10;
den=[1,4,3];
[z, p, k]= tf2zp(num,den)


69
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
7.3. FUNCIONES DE DISEO Y ANALISIS El anlisis y diseo de sistemas lineales empieza con el
modelado de sistemas reales, Como esta parte ya la vimos ahora nos dedicaremos a ver algunas
rutinas y funciones que nos pueden ayudar a disear y analizar sistemas lineales. Estas funciones
nos servirn en el dominio del tiempo y de la frecuencia. Estas funciones son :
1. step.. respuesta de tiempo de escaln unitario.
2. bode..graficas de frecuencia-respuesta de magnitud y fase.
3. nyquist.grafica de frecuencia respuesta de nyquist.
4. rlocus..grafico del lugar geomtrica de las races
7.3.1. Respuesta en el tiempo al escaln unitario
Los sistemas los vamos a analizar en el tiempo y en la frecuencia, inicialmente los analizaremos en el
tiempo veremos sistemas de primer orden y de segundo orden:
Sistemas de primer orden.- En un sistema de primer orden la relacin entrada salida ser
representa por:
1
1
) (
) (
+
=
Ts s R
s C

Si este sistema de primer orden es excitado por un escaln unitario la respuesta ser
s Ts
s C
1
1
1
) (
+
=
en fracciones parciales ser
T
s s
s C
1
1 1
) (
+
= y tomando la transformada inversa de Laplace tenemos
T
t
e t c

=1 ) (

Ejemplo 1
Si consideramos un circuito RC como el mostrado
R


I(t)
V
i
(t) C V
o
(t)





v
i
(t) = i(t) R + v
o
(t) como i(t) en el condensador es igual a
i(t) = C (dv
o
(t) / dt) entonces tenemos v
i
(t) = RC (dv
o
(t)/dt) + v
o
(t), tomando transformada de Laplace
tenemos Vi(s) = RCsV
o
(t) + V
o
(t)
de donde
RCs s V
s V
i
o
+
=
1
1
) (
) (

por lo tanto
RC
t
e t c

=1 ) (
y el diagrama de bloques sera


V
i
(s) V
o
(s)


RCs + 1
1



70
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
La grafica ser





V entrada

V salida



t


5.1. Sistemas de segundo orden.- Considerando la funcin de transferencia simple de lazo cerrado
2 2
2
2
2
n n
n
N
s s
T
e ,e
e
+ +
=
Dnde:
natural frecuencia es y iento amortiguam de relacion
n
e ,

LAS RAICES SON
1
2
2 , 1
= , e ,e
n n
S

Analizaremos tres casos:
1.-
uado subamortig caso 1 0 < <,

2
2
1
) )( ( ) (
) (
, e e
e ,e e ,e
e
=
+ + +
=
n d
d n d n
n
donde
j s j s s R
s C


de donde




2.-
o amortiguad te criticamen caso 1 = ,

) 1 ( 1 ) (
) (
) (
2
2
t e t c donde de
s s
s C
n
t
n
n
n
e
e
e
e
+ =
+
=


3.-
iguado sobreamort caso 1 > ,

s s s
s C
n n n n
n
) 1 )( 1 (
) (
2 2
2
+ + +
=
, e ,e , e ,e
e







Dnde:
n
s e , , ) 1 (
2
1
+ = y
n
s e , , ) 1 (
2
2
=
Respuesta transitoria
)
1
(cos 1 ) (
2
t sen t e t c
d d
t
n
e
,
,
e
,e

+ =


) (
1 2
1 ) (
2 1
2
2 1
s
e
s
e
t c
t s t s
n

+ =
,
e



71
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013

Consideremos un sistema de segundo orden, debido a que las especificaciones de funcionamiento
de los sistemas estn definidas para este tipo de sistema. Para sistemas de orden mayor, utilizando
el concepto de polos dominantes se aproxima el sistema a uno de segundo orden. Su FT es:
Sus polos o races caractersticas son:
El diagrama de bloques de un sistema de segundo orden se muestra en la figura




Para el caso subamortiguado, la respuesta a un escaln unitario tiene oscilaciones amortiguadas, aqui
se definen algunas especificaciones de funcionamiento que son utilizadas como criterios de diseo:
* Porcentaje de sobreimpulso (overshoot)M
p

* Tiempo de asentamiento o establecimiento (settling time)t
s

* Tiempo de subida o de crecimiento (rise time)t
r

* Tiempo de pico mximo (peak time)t
p

* Tiempo de retardo (delay time) t
d




























2 2
2
2
) (
n n
n
s s
s G
e ,e
e
+ +
=
2
2 , 1
1 , e ,e =
n n
s
2 2
2
2
n n
n
s s e ,e
e
+ +
E(s)
0.05
o bien
0.02

1
0.5
0
C(t)
Tolerancia admisible
0.05
o bien
0.02
P
M
d
t
r
t
p
t
s
t
Figura 1.19: Curva de respuesta al escaln unitario.
1
0.5
0
C(t)
Tolerancia admisible
0.05
o bien
0.02
P
M
d
t
r
t
p
t
s
t
Figura 1.19: Curva de respuesta al escaln unitario.


72
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013

1.- Tiempo de subida: el tiempo que se demora de 0 a 100%
)
1
(cos 1 1 ) (
2
r d r d
t
r
t sen t e t c
r n
e
,
,
e
,e

+ = =

Resolviendo
d n
d
d
r
t
e
| t
,e
e
e

= =

) ( tan
1
1
n
d
,e
e
|
1
tan

=

2.- Tiempo pico (t
p
) Cuando la derivada de C(t)/dt = 0 se halla la solucin para t
p
= t/e
d


3.- La sobreelongacion mxima se obtiene en el tiempo pico

M
p
= c(t
p
) 1 Resolviendo
t
,
,
)
1
(
2

= e M
p
4.- Tiempo de asentamiento t
s

Con el criterio del 2% ser t
s
= 4/,e
n
y del 5% es t
s
= 3/,e
n

Ejemplo 1: Si un sistema de segundo orden tiene las siguientes caractersticas , = 0.6 y e
n
= 5
rad/seg. Hallar los valores de merito
Solucin:
1.- Hallando t
r
= t-|/e
d
, como
4 1
2
= = , e e
n d
y
3 = =
n
,e o

radianes
d
93 . 0
3
4
tan tan
1 1
= = =

o
e
|


t
r
= 3.14 0.93/4 = 0.55 seg.
2.- Hallando t
p
= t/e
d
= 3.14/4 = 0.785 seg.
3.- Sobreelongacin mxima
( )
% 5 . 9 095 . 0
14 . 3 *
4
3 ) (
sea o e e M
d
p
= = =

t
e
o

4.- Tiempo de asentamiento t
s
Con el2% ser t
s
= 4/o = 4/3 = 1.33 seg. o con el 5% t
s
= 3/3 = 1 seg.

PROGRAMAS EN MATLAB PARA EL ANALISIS EN EL TIEMPO
1) Primer caso 2 races reales distintas (D>1) Sobreamortiguado
t=[0:0.2:20]';
wn=1;
d=2;
num=[wn^2];
den=[1,2*d*wn,wn^2];
ye=step(num,den,t);
plot(t,ye);
title('respuesta a un escalon unitario caso 2 raices reales distintas');
xlabel('tiempo(seg)');
grid;


73
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013


2) Segundo caso crticamente amortiguado.-
t=[0:0.2:20]';
wn=1;
d=1;
num=[wn^2];
den=[1,2*d*wn,wn^2];
ye=step(num,den,t);
plot(t,ye);
title('respuesta a un escalon unitario caso 2 raices reales iguales');
xlabel('tiempo(seg)');
grid;


3) Tercer caso d=0 punto crtico de oscilacin
t=[0:0.2:20]';
wn=1;
d=0;
num=[wn^2];
den=[1,2*d*wn,wn^2];


74
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
ye=step(num,den,t);
plot(t,ye);
title('respuesta a un escalon unitario caso punto critico de oscilacion');
xlabel('tiempo(seg)');
grid;


4) Sistema inestable

t=[0:0.2:20]';
wn=1;
d=-0.1;
num=[wn^2];
den=[1,2*d*wn,wn^2];
ye=step(num,den,t);
plot(t,ye);
title('respuesta a un escaln unitario caso Sistema Inestable');
xlabel('tiempo(seg.)');grid;

5) Caso 2 races complejas conjugadas
t=[0:0.2:20]';
wn=1;


75
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
vectord=[0.1:0.1:0.9];
Y=[];
num=[wn^2];
for i= 1:length(vectord)
d=vectord(i);
den=[1,2*d*wn,wn^2];
y=step(num,den,t);
Y=[Y,y];
end
plot(t,Y);
title('respuesta a un escalon unitario caso Sistema Subamoertiguado');
xlabel('tiempo(seg)');
grid;

6) Mostrando las envolventes para d=0.2

t=[0:0.2:20]';
wn=1;
d=0.2;
num=[wn^2];
den=[1,2*d*wn,wn^2];
ev1=1+(exp(-d*wn*t)/sqrt(1-d^2));
ev2=1-(exp(-d*wn*t)/sqrt(1-d^2));
ye=step(num,den,t);
plot(t,ye,t,ev1,t,ev2);
title('SISTEMA DE SEGUNDO ORDEN');
xlabel('tiempo(seg)');
ylabel('Salida');
grid;


76
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013



7) Programa que calcula los parmetros de un sistema de segundo orden

RESUMEN DE FORMULAS (caso subamortiguado)

La salida del sistema viene dada por:
) (
1
1 ) (
2
) (
| e
,
,e
+

=

t sen
e
t y
d
t
n

Con:
,
,
| , e e
) 1 (
) 1 (
2
2

= = arctg y
n d

Los parmetros caractersticos del sistema sern:
1. Tiempo de subida : )
1
(
2
,
,
|
| t
=

= arctg con
w
t
d
r

2. Tiempo de pico:
2
1 , e
t
e
t

= =
n
d
p
t
3. Sobreelongacin (Sobreoscilacin)
2
1 ,
,t

= e M
p

%Programa:Realiza los clculos tericos con las formulas utilizando
%los resultados y la grafica de MATLAB
%DATOS DE ENTRADA
%wn=1
%d=0.2
%RESULTADOS
%tr = tiempo de subida
%tp = tiempo de pico
%mp = sobreoscilacion
yp=1;%valor de salida en rgimen permanente
t=[0:0.2:20]';


77
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
wn=1;
d=0.2;
num=[wn^2];
den=[1,2*d*wn,wn^2];
ye=step(num,den,t);
%calculando el tiempo de subida
%terico
fi=atan(sqrt(1-d^2)/d);
tra=(pi-fi)/(wn*sqrt(1-d^2));
%con la respuesta de matlab
for i=1:length(t)
if((ye(i)<=yp)&(ye(i+1)>=yp))
tr=t(i);
break;
end
end
%Calculando tiempo de pico
%terico
tpa=pi/(wn*sqrt(1-d^2));
%Con la respuesta de matlab
for i=1:length(ye)
if (ye(i)==max(ye))
tp=t(i);
break;
end
end
%Calculando Sobrepaso Mp
%terico
mpa=exp(-(d*pi)/(sqrt(1-d^2)));
%Con la respuesta
mp=max(ye)-yp;
display'Tiempo de subida';[tratr]
display'Tiempo de pico'; [tpatp]
display'Sobrepaso'; [mpamp]
Respuesta







>> anat07
Tiempo de subida
ans = 1.8087 1.8000
Tiempo de pico
ans = 3.2064 3.2000
Sobrepaso
ans = 0.5266 0.5266


78
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
7.3.2. Graficas de Bode: Esta grafica nos permite visualizar la amplitud y el ngulo de fase de una
funcin de transferencia contra la frecuencia. Para tener una visin mayor se grafica esta
amplitud y ngulo de fase versus el log
10
de la frecuencia.La funcin BODE su sintaxis es:
[mag,fase]=bode(num,den,w).. Halla la magnitud y fase de la funcin de transferencia definida
por num y den, w es un argumento opcional de frecuencia especificada por le usuario.
Ejemplo:




Ejemplo 2 La misma grafica especificando las frecuencias




Ejemplo 3.- Utilizando las ecuaciones de espacio de estados para el ejemplo anterior



%Genera grafica de Bode
num=10;
den=[1,1,3];
bode(num,den);
num=10;
den=[1,1,3];
w=logspace(-1,2,100);%genera 100 puntos entre 10^-1 y 10^2 logaritmicamente espaciados
bode(num,den,w);
| | 0 0 10
1
0
1 3
1 0
2
1
2
1
2
1
+
(

=
(

+
(


=
(

'
'
x
x
y
u
x
x
x
x


79
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013







Ejjemplo 4:
Generando bode con instrucciones adicionales:


























%Bode utilizando espacio de estados
A=[0,1;-3,-1];
B=[0,1]';
C=[10,0];
D=0;
bode(A,B,C,D);
grid;
%Graficas de bode y grafica de Nichols
w=logspace(-1,2,100);
A=[0,1;-3,-1];
B=[0,1]';
C=[10,0];
D=0;
[magnitud,fase]= bode(A,B,C,D,1,w);
subplot(2,1,1),semilogx(w,20*log10(magnitud)),...
title('Grafica de Bode'),...
ylabel('Ganancia, dB'),grid,...
subplot(2,1,2),semilogx(w,fase),...
xlabel('Frecuencia, rps'),ylabel('Fase,Grados'),...
grid,pause
subplot(1,1,1),plot(fase,20*log10(magnitud)),...
title('Grafica de Nichols'),axis([-180,180,-20,20]),...
xlabel('fase, grados'),ylabel('Ganancia,dB'),grid


80
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013









81
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
7.3.3. Lugar Geomtrico de las Races: Esta grafica nos permite visualizar el lugar geomtrico
de las races y verificar la estabilidad o no del sistema.
Caso 1:
Sea
) 4 )( 2 (
) (
+ +
=
s s
K
s GH
Hallar el L.G.R:
Programa









Grfico:





num=1;
den=[1 6 8];
rlocus(num,den);
axis([-10 0 -10 10]);
sgrid;



82
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
Caso 2:
Sea
) 10 )( 4 (
) 1 (
+ +
+
=
s s s
s K
GH

Hallar el L.G.R:

Programa









Grfico








num=[1 1];
den=[1 14 40 0];
rlocus(num,den);
axis([-20 0 -100 100]);
sgrid;



83
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013
Caso 3:
Sea
) 10 (
) 1 (
2
2
+
+
=
s s
s K
GH
Hallar el L.G.R:
Programa









Grfico




Caso4:
Sea
) 20 )( 2 (
) 1 (
) (
2
+ +
+
=
s s s
s K
s GH
Hallar el L.G.R:
Programa





Grfico





num=[1 2 1];
den=[1 10 0 0];
rlocus(num,den);
axis([-15 0 -15 15]);
sgrid;


num=[1 1];
den=[1 22 40 0 0];
rlocus(num,den);
axis([-16 16 -16 16]);
sgrid;




84
MATLAB PARA INGENIERIA RICARDO CASTAEDA
2013

Grfico


Caso 5: Con variacin de K






num=[1 1];
den=[1 14 40 0];
rlocus(num,den);
axis([-15 0 -15 15]);
sgrid;
for k=11:30
ec=[1 14 40+k k];
r=roots(ec)
k
end

Вам также может понравиться