Sunteți pe pagina 1din 87

UNIVERSIDAD NACIONAL DE INGENIERÍA

FACULTAD DE INGENIERÍA MECÁNICA

APLICACIONES DE INGENIERIA
CON MATLAB

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

AUTOR: ING. RICARDO CASTAÑEDA DE LA ROSA


2013

1 INTRODUCCION AL MATLAB…………………………………………………………………………… 04
1.1 OPERACIONES BASICAS EN MATLAB…..………………………………………..……….….… 04
1.1.1 Ingreso de datos a una matriz..………….….…………………………………..…… 04
1.1.2 Operaciones con matrices………….…………………………………………..….…... 05
1.1.2.1 Operadores aritméticos…………………………………………………………..….… 05

84
1.1.2.2 Expresiones…………………………….…………………………………………………… 05
1.1.2.3 Manejo de números complejos……………..……………………………..…..… 06
1.1.2.4 Adición y substracción……………….…………………………………………….….. 06
1.1.2.5 Multiplicación………………………………………..……………………………………. 06
1.1.2.6 División………………………………………………….………………………………….… 06
1.1.2.7 Potencia……………………………………….……………………………………………… 06
1.1.2.8 Operaciones entre elementos el operador “.”………………….………..… 06
1.1.2.9 Operadores de comparación……………………………………………..………… 06
1.1.2.10 Operadores Lógicos……………………………………………………….………..… 07
1.1.2.11 Operaciones diversas con matrices………………………….……….……… 07
1.2 FUNCIONES………………………………………………………………………………....……..……… 07
1.3 CEROS Y MÍNIMOS DE UNA FUNCIÓN…......................................................... 08
1.4 GRAFICOS…………………………………………………………………………………………………... 08
1.5 INSTRUCCIONES DE CONTROL EN MATLAB………………………………………...………. 09
1.5.1 La Sentencia if…………………………………………………………………….…….…… 09
1.5.2 La sentencia switch………………………………….………………………..……….…. 10
1.5.3 Sentencia FOR…………………………………..………………………………............. 11
1.5.4 Sentencia WHILE…………………………………………………..………………………. 13
1.6 Caso de estudio. INTERPOLACION POLINOMICA…………………………………….………. 14
1.7. Caso de Estudio. METODO DE LA BISECCION……………………………………………….. 15
2 POLINOMIOS…………………………………………………………..……………………………………… 17
2.1 Representación de polinomios…….…………………………………………………………… 17
2.2 Evaluación de polinomios………………………………………………………………………… 17
2.3 Producto de Polinomios……………………………………………..…………………………… 18
2.4 Fracciones parciales y derivadas……………………………………………………….……… 18
3 MATLAB SIMBOLICO………………………………………………………………………..….…………… 19
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
3.1 Definición de Objetos Simbólicos………………………………………………………………… 2013
19
3.2 Derivadas y primitivas………………………………………………………………………………… 19
3.3 Operaciones con expresiones Simbólicas……………………………………………………. 20
3.4 Función subs………………………………………………………………………………………………. 21
Practica…………………………………………………….………………………………………………… 23
4 ALGEBRA LINEAL Y MATRICES…………………………………………………………………………… 24
4.1 Matrices……………………………………..…………………………………………………………… 24
4.2 Sistema de Ecuaciones Lineales……………………………………….…………………………. 24
4.3 Método de Eliminación gaussiana……………………………………………………………… 24
4.4 Descomposición triangular…………………………………………………………………………… 26
4.5 Método Gauss-Jordan………………………………………………………………………………… 27
4.6 Método Iterativo de jacobi…………………………….…………………………………………… 29
5 SOLUCION DE ECUACIONES DIFERENCIALES…..…………………….………………… 30
5.1 Definición……………………………………………………………………….…………………………… 30
5.2 ODE de Primer Orden……..………………………………………………………………………… 30
5.3 Valor Inicial El problema del valor inicial para las ODE de primer orden … 30
5.4 Método de paso simple………………………………….…………………………………………… 31
5.5 Método de la Serie de Taylor………..……………………….………………………….…… 31
5.6 Método de Euler..………………………………………………………….…………………………… 33
5.7 Euler aplicado a un péndulo simple…….………….…………………………………………… 34
5.8 El método de Heun Utiliza el método Predictor Corrector………………….…… 37
5.9 Método de Runge-Kutta.……………………………………………….…………………………… 39
5.9.1 Runge-Kutta de orden 2..……..……………………….………………………….…… 39
5.9.2 Runge-Kutta de orden 4..………………………………….…………………………… 40
6 PROCESAMIENTO DE SEÑALES..…………………….…………………………………………… 42
42

84
6.1 Análisis en el dominio del tiempo….……………………….………………………….…… 42
6.1.1 Funciones que actúan sobre vectores……..…………………………………… 50
6.2 Análisis en el dominio de la frecuencia………………………………………………………. 60
7 SISTEMAS DE CONTROL…………………………….……………………………………………..……… 60
7.1 Modelado de sistemas………..……..………………..…………………………………….….… 61
7.1.1 Funciones de Transferencia……………….……………………………………….…… 62
7.1.2 Modelo de Espacios de Estados…………….…………………………….……..…… 62
7.2 Conversión de modelos…………………….………………………………………………………… 69
7.3 Funciones de diseño y análisis…………………………………..………………………………… 69
7.3.1 Respuesta en el tiempo al escalón unitario………………………………….…… 78
7.3.2 Graficas de Bode…………………………….……….…………………………….……..…… 81
7.3.3 Lugar geométrico de las raíces.…………….……………………………………….……

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

1: INTRODUCCIÓN AL MATLAB

84
 Introducción.- El matlab (MATrix LABoratory) es un lenguaje de alto nivel, escrito en gran parte en
lenguaje “C” , orientado para el cálculo técnico, su potencia radica en una gran cantidad de rutinas
de cálculo aplicadas a las diferentes disciplinas de la ingeniería. En su ambiente integrado pude
realizar cálculos, programación y visualización, para esto en el matlab se utilizan tres ventanas:
 Ventana de comandos. (Principal). Nos permite ingresar datos o ejecutar comandos o
funciones.
 Ventana de gráficos. Displaya los resultados (Forma gráfica) que se indiquen con comandos o
programas.
 Ventana del editor. Nos permite escribir nuevos programas (secuencia de comandos) y
funciones.
Su elemento básico es una matriz numérica. Sus usos más comunes son:
 Cálculos matemáticos (matriciales).
 Modelado y simulación.
 Procesamiento de datos.
 Desarrollo de interfaces gráficas.
1.1 Operaciones básicas 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 mayúsculas para matrices y letras
minúsculas para vectores y escalares el ingreso lo realizamos así:
>> mat = [ 1 2 3; 4 5 6; 7 8 9 ] E
MATLAB PARA INGENIERIA
El matlab responde – RICARDO CASTAÑEDA 2013
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
. 258
. 369
Esto es porque el resultado no ha sido asignado a ninguna variable, veamos en matlab

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

También podemos operar con estas matrices, hallando primero A*B y después la inversa de A que
sería C y comprobar que C es la inversa de A. Se puede acceder a cualquier elemento de A o de B

84
con solo indicarlo con los subíndices. El siguiente cuadro nos visualizara todo lo anteriormente
dicho.
>> 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

Con la última operación comprobamos la inversa. Para definir un vector fila es más simple
>> 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

1.1.2 Operaciones con matrices.-


MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
1.1.2.1 Operadores aritméticos.- Tenemos los siguientes:
2013
^ Potenciación
\ División ( a la izquierda)
/ División ( a la derecha)
* Producto
.* Producto elemento a elemento
./ y .\ división elemento a
elemento .^ elevar a una potencia
elemento a elemento +
Adición o suma
- Substracción 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 expresión en 2 líneas
>> x = 0.5;

84
>>expx = 1 + x +(x^2)/2+ (x^3)/6+ ...
(x^4)/24 + (x^5)/120
1.1.2.3 Manejo de números complejos.- En este caso se considera √-1 a i o j
>> c1 = 2 – 4*j
>> 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 Adición y substracción
>> 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 Multiplicación
>>multi = M1 * M2 % Si columnas de M1 igual a filas de M2
MATLAB PARA INGENIERIA
1.1.2.6 División – RICARDO CASTAÑEDA 2013
X = A\B % Solución de A*X = B
X = B\A % Solución 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 % Efectúo 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 comparación
< menor <= menor o igual
> mayor >= mayor o igual

84
= = igual ~= diferente
considerando 1 -> Verdadero y 0 -> Falso
1.1.2.10Operadores lógicos
Tenemos que and & or |
>> 1 == 1 & 4 == -3 (ans = 0)
>> 1 == 1 | 4 ==-3 (ans = 1)
1.1.2.11Operaciones diversas con matrices.- La forma general para asignar rangos a una
variable será
variable = inferior : variación : 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 también matrices de la siguiente forma
MATLAB PARA INGENIERIA
>> uno = ones(5) – RICARDO CASTAÑEDA 2013
>> cero = zeros(4)
>> RR = rand(3)
>> I=eye(4)
1.2 Funciones.- Para crear una función seguir los siguientes pasos
 En menú archivo opción 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 Mínimos de una función.- Algunos comandos adicionales que nos permiten hallar
ceros y mínimos de una función son.
 fmin Halla mínimo para funciones de una variable por ejemplo podemos considerar
>>xmin = fmin(‘f1’,-1,1)

84
 fmins Minimiza función de varias variables
 fzero Encuentra los ceros de una función 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í
>> 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 Gráficos.- Para complementar esta introducción al matlab veremos los comandos que nos
permite mostrar gráficos de las funciones, estos comandos son:
 Gráficos Bidimensionales
 plot ploteo lineal
 loglogplotear en esta escala
 semilogxplotear en escala semilog
 semilogyplotear en escala semilog
 fill diseñar polígono 2d
 polar plotear en coordenadas polares
 bar gráfico de barras
 stem señales discretas
 stairsplotear en grados
MATLAB PARA INGENIERIA
 errorbarplotear error – RICARDO CASTAÑEDA 2013
 histplotear histograma
 rose plotear histograma en ángulo
 compassplotear en forma de flechas
 featherplotear en forma de pluma
 fplotplotear función
 cometPlotear con trayectoria de cometa
 Gráficos tridimensionales y contornos
 plot3 plotear en espacio 3d
 fill3 diseñar polígono 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 iluminación

84
 sliceplotear visualización volumétrica
 cylinder genera cilindro
 sphere genera esfera
tenemos que considerar inicialmente que plot (y) plotea los valores de y versus la variación 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 Condición
Sentencias
end
Funcionamiento.- Se evalúa la condición si esta se cumple, se ejecuta el bloque de
sentencias, veamos un ejemplo con matrices.
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');
MATLAB
else PARA INGENIERIA – RICARDO CASTAÑEDA 2013
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

EJECUCION
>> sep01
Las matrices A y B son iguales
Las matrices A y C son diferentes
Sentencia if con bifurcación múltiple
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

84
Bloque3
else
Bloque por defecto %Se ejecuta cuando no se cumple ninguna condición
end
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
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
Desaprobado
>> sep02
Ingrese una nota --> 5
Reprobado
>> sep02
Ingrese una nota --> 19
Aprobado con excelencia
1.5.2.Sentencia SWITCH Nos permite derivar el control hacia uno de varios puntos
Sintaxis de la sentencia switch
Switch expresion
case case_expresion1 ,
bloque 1
case case_expresion2 ,
bloque2
case case_expresion3 ,
bloque3
…………………………..
Otherwise,
Bloque
End

84
Veamos un ejemplo

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');
MATLABcase
PARA9, INGENIERIA – RICARDO CASTAÑEDA 2013
fprintf('Nueve\n');
otherwise,
fprintf('No es un digito');
end
>> sep03
Ingrese un digito6
Seis
>> sep03
Ingrese un digito25
No es un digito>>

1.5.3.Sentencia FOR
Repite un conjunto de sentencias un número predeterminado de veces
Su sintaxis es: for i= 1:n
Sentencias
end
Ejemplo:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Entrega una vector con la señal limpia
% Lee archivo cas.wav

84
%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 ('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;
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
a= size(yc1); 2013
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);

84
plot(t,yc1);
grid;
ylabel('yc1');
title('Digito dos de castañeda');
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 número indefinido de veces.
La forma general de una sentencia while es:
while condición
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
Sentencias 2013
end
Las sentencias son ejecutadas mientras la condición es verdadera. La condición es usualmente el
resultado de una comparación 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.- (Interpolación Polinómica) Forma de Lagrange; considerando un par de
puntos (x0,f(x0)) y (x1,f(x1)) entonces para un x entre x0 yx1 tendremos un polinomio de

84
x −x1 x−x 0
P( x )=f ( x 0 ) +f ( x1 )
interpolación x 0−x 1 x 1 −x 0 Entonces el polinomio de grado <= n que
interpola a f(x) en x0, x1, x2, x3,………. xn. es :

n n
x−x i
P( x )= ∑ f ( x k ) Lk ( x ) Lk ( x )= ∏
k =0 Cuando tenemos (n+1) puntos y entonces i=0 ,i≠k x k −x i

( x−x 1 )( x−x 2 )( x−x 3 ) (x −x 0 )( x−x 2 )( x−x 3 )


L0 ( x )= L1 ( x )=
Por ejemplo para n = 3, ( x 0− x1 )( x 0 −x2 )( x 0 −x 3 ) ( x1 −x 0 )( x1 −x 2 )(x 1 −x 3 )

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)
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
prod1=prod1*(x0-x(i)); 2013
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 ejecución:
>> 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
1.7. Caso de Estudio.- (Calculo de una raíz usando el método de la bisección)
function raiz = biseccion(fx,a,b )

84
% fx es la función
% a y b son los valores extremos del intervalo
%raíz es el valor de la solución
error=0.0005;
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;
MATLAB
endPARA INGENIERIA – RICARDO CASTAÑEDA 2013
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

84
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 = 2.0002

>>biseccion('ff',-2,0)
0-2.00000 0.00000-1.00000 2.00000
1-2.00000-1.00000-1.50000 1.00000
2-1.50000-1.00000-1.25000 0.50000
3-1.25000-1.00000-1.12500 0.25000
4-1.12500-1.00000-1.06250 0.12500
5-1.06250-1.00000-1.03125 0.06250
6-1.03125-1.00000-1.01563 0.03125
7-1.01563-1.00000-1.00781 0.01563
8-1.00781-1.00000-1.00391 0.00781
9-1.00391-1.00000-1.00195 0.00391
10-1.00195-1.00000-1.00098 0.00195
ans = -1.0010

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

84
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

4 3 2
ejemplo: x −10 x +35 x −50 x +24

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


p1 =
1 -10 35 -50 24

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

roots, notar que el polinomio se


Hemos ingresado el polinomio y calculado sus raíces con el comando

ha originado por: ( x−1)( x−2 )(x −3)( x−4 )=x 4 −10 x 3 +35 x 2 −50 x +24
MATLAB2.2.
PARA INGENIERIA
EVALUACION – RICARDO CASTAÑEDA
DE POLINOMIOS.- 2013
Podemos evaluar el polinomio para un valor de x = 0, 1, 5, 6.

>>polyval(p1,0)
ans = 24
>>polyval(p1,1)
ans = 0
>>polyval(p1,5)
ans = 24
>>polyval(p1,6)
ans = 120
X también puede ser un vector, por ejemplo que varié de 0 a 6 con incrementos de 0.5.

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

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

>> p2= [1 -3 4]
p2 =
1 -3 4
>>conv(p1,p2)
ans = 1 -13 69 -195 314 -272 96

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

>> p3=conv(p1,p2)
p3 =
1 -13 69 -195 314 -272 96
>>deconv(p3,p1)
ans =
1 -3 4

2.3. FRACCIONES PARCIALES Y DERIVADAS.-


MATLAB
Se PARA INGENIERIA
puede descomponer – RICARDO
en fracciones parciales, CASTAÑEDA
como vemos en el ejemplo: 2013
>> [r,p]=residue(num,den)
r=1
2
p=3
-2
num 3 x−4 r ( 1) r (2) 1 2
= 2 = + = +
Donde la respuesta será: den x −x−6 x −p ( 1) x− p(2 ) x−3 x+2

Realizaremos el cálculo de la derivada del polinomio,

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

84
3. MATLAB- SIMBOLICO.- El matlab también tiene un módulo Symbolic Math Toolbox, que permite
manejar perfectamente el cálculo matemático simbólico, manipular con facilidad y rapidez las
formulas y expresiones algebraicas y realizar la mayoría de operaciones con las mismas. Es
posible expandir, factorizar y simplificar polinomios y expresiones racionales y trigonométricas;
encontrar soluciones algebraicas de ecuaciones polinómicas y sistema de ecuaciones; evaluar
derivadas e integrales simbólicas y encontrar soluciones de ecuaciones diferénciales; manipular
series de potencias, límites y otras operaciones.
3.1. DEFINICIÓN DE OBJETOS SIMBOLICOS
Para Realizar cálculos simbólicos, MATLAB requiere que todas las variables(o expresiones
algebraicas) sean declaradas como simbólicas previamente con el comando syms( o con sym).
Por ejemplo si queremos simplificar la expresión 6ab+3.a 2 +2ab, realizamos lo siguiente:
>>syms a b
>>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=
MATLAB PARA
sin(x) INGENIERIA – RICARDO CASTAÑEDA 2013
Se pueden calcular derivadas
>>diff( f,x )
ans=
cos(x)
>>diff(diff( f, x ),x)
ans=
-sin(x)
También se pueden encontrar primitivas:
>>int(‘log(x)’) % Primitiva de la función logaritmo
ans=
x*log(x)-x
>>diff(‘x*log(x)-x ’,x) % Comprobación
ans=
log(x)
3.3. OPERACIONES CON EXPRESIONES SIMBOLICAS
Al igual que en el caso de variables numéricas se pueden sumar, restar, multiplicar, dividir y elevar a
potencias las expresiones simbólicas. Por ejemplo, dadas las siguientes funciones

2 2
f (x )=2 x −3 x−5 , g ( x )=x −x+7 , hallar las expresiones de f+g, f-g, f*g , f/g y f 3 .

84
>>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
3 x −4 x+ 2
>>pretty(f-g)

2
x −2 x−12
>>pretty(f*g)

2 2
(2 x −3 x−5)( x −x+7)
También
>>h= f *g
h=
(2*x^2-3*x-5)*( x^2-x+7)
>>pretty(expand(f*g))
4 3 2
2 x −5 x +12 x −16 x−35
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
>>pretty(f/g)

2
2 x −3 x−5
x 2 −x+7
>>pretty(f^3)

2 3
(2 x −3 x−5)
>>pretty(expand(f^3))

6 5 4 3 2
8 x −36 x −6 x +153 x +15 x −225

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 continuación resolvemos la ecuación x4+1=0 y presentamos el resultado en escritura matemática
habitual.

84
>>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
-0.7071+0.7071i
En el ejemplo siguiente definimos una matriz simbólica 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)
MATLAB
ans PARA
= INGENIERIA – RICARDO CASTAÑEDA 2013
cos(a*x)^2+sin(a*x) ^2
>>pretty(inv(A))
......................................

3.4. FUNCION subs


Una vez definida explícitamente una función simbólica, es posible sustituir valores de las variables
en la función, es decir calcular el valor de la función en un punto dado, mediante los comandos que
se indican a continuación.
subs(f,a) Aplica la función 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 ecuación de f la variable por el


valor

subs(f,{x,y,...},{a, b,...}) Sustituye en la ecuación de f las variables {x,y,...}


por los valores {a,b,...}

Como ejemplo definamos la función f(x) = x3 y calculamos f(2) y f(b+2)


>> f =’x^3’
f=
x^3
>> A = subs(f,2)

84
A=
8
>>syms b
>> B = subs(f,b+2)
B=
(b+2)^3
En el ejemplo siguiente consideramos la función 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=
4+b
>>subs(a+b,{a,b},{3,5})
ans =
8

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

84
PRACTICA
1. REALIZA LAS DERIVADAS DE LAS SIGUIENTES FUNCIONES
1
, log ( 1+ √ 1+ x 2
a. log(sen(2x)) 1+ x 2
2. Aplica la orden pretty al resultado para verla de una forma más 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

1
a. 1− x2
y ∂2 f
f (x , y)=sen( x )e ,calcula / ¿¿
5. PARA LA FUNCION ∂ x ∂ y x =0, y=1
Usando el comando int resolver.

1
∫ x 2−1 dx
6. Calcule
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
7. Calcule la integral ∫ a ln(1−bx )dx , siendo a y b parametros
1

8. Calcule la integral definida


∫0 a ln(1−bx )dx

84
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

C=A +B donde c i, j=a i, j +bi , j .

La multiplicación de matrices también la podemos representar como


n
C=A∗B donde ci , j =∑ ai , k bk . j
k =1

Veamos un programa que calcula una multiplicación de matrices:


4.2. SISTEMA DE ECUACIONES LINEALES El objetivo de este tema es resolver sistemas de
ecuaciones de la forma A.x = b, Donde:

a11 a12 .. .. a1 n b1 x1

MATLAB
.
[
A= a21 a22
.
an 1 a n2
.. .. . .
.. .. . ann
PARA INGENIERIA – RICARDO CASTAÑEDA
] [] []
.. .. . a 2n , b= b 2 , x= x 2
..
bn
.
xn
2013
Las celdas de una matriz pueden ser diagonales o extradiagonales. Es extradiagonal del tipo superior
o superdiagonal cuando el número de fila es menor que el número 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

1 0 0 2 1 3 1 0 0

[ ] [ ]
Diagonal−−¿ 0 2 0 Triangular superior−−¿ 0 1 4 Triangular inf erior−−¿ 1 2 0
0 0 3 0 0 2 2 1 2 [ ]
4.3. METODO DE ELIMINACION GAUSSIANA Es un método 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:

a11 x 1+a 12 x 2+a 13 x 3+............+a1n x n = b1


+a22 x 2+a23 x 3+............+a 2n x n = b 2
....................................................................
ann xn = bn

84
Con
a kk ≠0,k=1 , 2 , .......,n

La solución será:

bn
x n=
ann
b −a x
x n−1 = n−1 n−1, n n
an−1, n−1
b −a x −a x
x n−2 = n−2 n−2, n−1 n−1 n−2, n n
a n−2 ,n−2
n
bk − ∑ akj x j
j=k +1
En general : x k = , k =n−1, n−2 ,. .. . . ,1
akk

function x=backsubs(A,b)
% backsubs
% Datos
% A = es la matriz
% b = vector de la mano derecha
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
% n = el orden de la matriz
2013
% 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

Utilicemos este método para resolver el sistema de ecuaciones:


x 1−x 2 +2 x 3 −x 4 =−8
2 x2 − x 3 + x 4 =6
−x 3 −x 4 = −4
2 x 4 =4

84
Hallar su solución con el programa anterior.

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

a11 a12 . a 1n b1
a21
W= [ A ,b ] = .
.
a n1
[ a 22
.
.
an 2
.
.
.
.
a 2n
.
.
ann
b2
.
.
bn
]
Para realizar este procedimiento presentamos el programa que realiza el método de eliminación y
también de cálculo del vector x:
Como el método realiza una serie de intercambios también presentamos la función intercambio:

function A=intercambio(A,i)
[n n1]= size(A);
MATLABk=i+1;
PARA INGENIERIA – RICARDO CASTAÑEDA 2013
while(k<=n)&(A(k,i)==0)
k=k+1;
end
if k<=n
temp=A(i, : );
A(i, : )= A(k, : );
A(k, : )= temp;
Finalmente
end la función que realiza el método de eliminación de Gauss
lo utilizaremos para resolver el siguiente sistema de ecuaciones:

2 x 1 + x 2 + x3 =2
4 x 1 + 2 x 2 + x 3 =3
x 1 + x 2 +x 3 =2
La matriz ampliada será:

84
2 1 1 2

[ 4 2 1 3
1 1 1 2 ]
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
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
if A(i,i) ==0
2013
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
4.5. MÉTODO DE GAUSS-JORDAN Para invertir una matriz, el método de Gauss-Jordan es el más
eficiente; esto quiere decir, que para el sistema Ax = b; usando la matriz aumentada el método de
Gauss-Jordan reduce el número de operaciones, obtiene prácticamente la respuesta directamente.

a11 a12 a13 b1

[ a21
a31
1 0
a22
a32
0
a23
a33
b'1
b3]
b 2 se transforma en

[ 0
0
1
0
0
1

Y finalmente la solución es
b'2
b3
' ]
84
'
x1 ¿ b1
x2 ¿ b'2
'
x 3 = b3

function x=GaussJordan(AA,b)
%Datos
%AA = es la matriz
% A = es la matriz aumentada
% b = es el vector excitación
% 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
MATLAB PARA
if A(i,i)==0 INGENIERIA – RICARDO CASTAÑEDA 2013
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

Ejecución:
>> AA=[2 1 1;4 2 1;1 1 1]
>> b=[2 3 2]
>>GaussJordan(AA,b) 84
n1 = 4
4.6. METODO ITERATIVO DE JACOBI Los métodos iterativos se basan en lo siguiente: sea f(x) = x
– g(x)=0 .La solución al vector x viene dada por la sucesión x0,x1,x2…..y evaluada por punto fijo,
como

x( m+1)=g( x( m ) ), m=0,1,2 .. . .. .
function x=jacobi(A,b)
%DatosA = es la matriz, b = es el vector del lado derecho, n = el orden de la matriz
%RESULTADOSx = vector solución
[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)
MATLABsuma
PARA
for j=1:n
= 0; INGENIERIA – RICARDO CASTAÑEDA 2013
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
84
5. SOLUCION DE ECUACIONES DIFERENCIALES
5.1. Definición.-Una ecuación diferencial es una ecuación que envuelve derivadas de una o más
variables independientes.
Las Ecuaciones :
''
y + y=sen x
y' = ex
d 2 y dy
+ 2 +4 = 0
dx 2 dx
Son ecuaciones diferenciales por que envuelven derivadas de la variable independiente x.
Una ecuación diferencial que envuelve derivadas con respecto a una simple variable independiente es
llamada ECUACION DIFERENCIAL ORDINARIA o ODE(En ingles Ordinal Diferential Equation);

' 1
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
y=
y en cambio, cuando envuelve derivadas con respecto a dos o más variables es llamada

∂2 V ∂2 V
2
+ 2 2 =V
ecuación diferencial parcial ∂x ∂y
5.2. ODE de Primer Orden Una ecuación de primer orden tiene la forma:
dy
= f (x , y ) o M ( x , y )dx + N ( x , y )dy = 0
dx
Por ejemplo: (2xy+3x2)dx + x2dy = 0 Una ODE es exacta cuando se cumple que:
∂M ∂N
=
∂ y ∂x En el método de separación de variables se tiene la forma F(x) dx+G(y)dy=0.
2
dy 3 x +xy 2 x (3+ y )
= =
Por ejemplo:
dx y +x 2 y y (1+x 2 )

3+ y 2
De donde
ydy
=
xdx
3+ y 1+ x 2
2
y la solución general
( )
ln
1+x 2
=C

84
5.3. Valor Inicial El problema del valor inicial para las ODE de primer orden: Una ecuación de

dy
= f (x , y)
primer orden tiene la forma: dx plantea una curva de solución y=y(x) en la región R,
que pasa por el punto inicial (x0,y0) en R, tal que y(x0 ) = y0. cuando la ODE es separable, lineal o
exacta, entonces el problema del valor inicial tiene solución única. Que puede ser determinada
por integración indirecta.

3+ y 2 3+ y 2
ln
( )
1+x 2
=C ln
( )
1+x 2
=C

5.4. Método de paso simple Sea la gráfica, donde se destaca que el valor Y k+1 es estimado como
y k +1= y k +φh


MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
xk xk+1

De acuerdo a esta ecuación, el valor de la pendiente  es usado para extrapolar a partir del valor yk
en una distancia h (llamada tamaño del paso). La aplicación de la formula es punto a punto o a un
paso; es decir
Nuevo valor = Valor antiguo + paso *pendiente

5.5. Método de la serie de Taylor.- El método de la serie de Taylor tiene una aplicabilidad general
y estándar; permitiendo ser comparado con otros métodos:
Sea una ecuación diferencial de la forma:
'
y = f ( x , y ) con y ( x 0 ) = y 0

84
Reformulando el teorema de Taylor tenemos que

y( 1)( k )h y ( 2)(k )h2 y (3 )(k )h3 y( n )(k )h n


y k +1 = y k + + + + . . .. .+
1 2! 3! n!
∂ ∂
(m )
donde y =P (m−1)
f ( x , y ( x )) y P=
[ +f
∂x ∂ y ]
(b−a )
x 0=a , x n =b , h=
n
Utilizando el matlab
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;

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA


Programa de cálculo 2013
functionODETaylor (a,b,y0,n)
% ODE por Taylor 4
% Usando la serie de Taylor
% Datos
%a =límite inferior
%b =límite superior
%h =longitud del segmento
% y0 =f(a);
%x =es el vector x
%n =número 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 84
' ( x− y )
y=
Resultados de la ejecución del programa de Taylor para 2 , y(0) = 1 .a = 0 , b = 2,
n = 4 , h = 0.5
>>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
=======================
>>
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
5.6. Método de Euler.- Sea yk la aproximación a los valores y(xk) para puntos xk x0 +kh, k=
2013
1,2,3………..luego:
y0 = y(x0)
..
yk+1 = yk + hf(xk,yk)
xk+1 = xk + h
' 2
La ecuación diferencial y = y ( x −1 ) con y (0 )=1
Si tomamos el tamaño 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
función será:
function z=fe(x,y)
z= y*(x.*x-1);

functioneuler(f,a,b,n,y0)
% Euler ODE
% Método de Euler
%Datos
% f =el nombre de la función como string
% a =limite inferior
% b =limite superior
% h =longitud del segmento
% y0 =f(a); 84
% x =es el vector x
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
>>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
=======================

84
MATLAB5.7.
PARA INGENIERIA
Euler aplicado – RICARDO
a un péndulo simple.- CASTAÑEDA 2013
Un péndulo simple sujeto por una cuerda de Longitud L, gobernado por la

d2 x wdw g
m 2 + mg sen θ y la ODE: =− sen θ
ecuación : dt dθ L
functionderiv = dwdfi(fi,w)
%Movimiento de un péndulo simple
global L;
g=32.2014;
%wLdw/dfi = -gsin(fi)
deriv=(-g/L)*sin(fi)/w;
functionEulerDemo()
% Euler ODE Demo
% Caso del pendulo simple
% Datos
%a =límite inferior (79)
%b =límite superior
%h =longitud del segmento
% y0 =f(a);
%x =es el vector x
%n =número de segmentos
% Resultados
%y =es el vector f(x)
global L;
n=28; 84
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

RESULTADOS
Tenemos dos resultados
a) Los cálculos
b) El grafico.
Los cálculos

>>EulerDemo()
x y
=======================
79.000000 0.664885
78.500000 0.830837
78.000000 0.963411
77.500000 1.077535
77.000000 1.179378 84
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

El grafico

84
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
5.8. El método de Heun Utiliza el método Predictor Corrector

h
y≃ y 0 + f ( x0 , y( x 0 ))+ f ( x 1 , y 1 ( x 1 ) ) ]
2[ es una aproximación

Pero tenemos

h
y= y 0 + [ f ( x 0 , y 0 )+f ( x 1 , y 0+hf (x 0 , y 0 ))]
2
El proceso de Euler es usado como predicción, y la regla del trapezoide como de corrección.
Resumiendo el método de Heun es:

pk +1= y k + hf (x k , y k )
x k +1=x k +h
h
y k +1= y k + [ f ( x k , y k )+f ( x k +1 , pk +1 ) ]
2

functionHeun(f,a,b,n,y0)
% Heun ODE
% Datos
% f = el nombre de la función como string
% a = limite inferior 84
% b = limite superior
Ejecución:

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

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

84
5.9. Método de Runge-Kutta.- Son los métodos más utilizados, son muy simples pues calculan
yn+1 con yn

5.9.1.Runge-Kutta de orden 2.-Utilizan la técnica


y n+1= y n +Δy n donde

Δy n=φΔx ; donde φ es una pendiente promedio, basada en los coeficientes de

y n+1= y n +hk 2
k 1 =f ( x n , y n )
h h
k 2 =f ( x n + , y n + k 1 )
Runge. Para RK a 2 etapas tenemos, 2 2
function [x, y]= RK2(f,a,b,n,y0)
% RUNGE KUTTA 2
% Datos
% f = el nombre de la función como string
% a = limite inferior
% b = limite superior
% h = longitud del segmento
% y0 = f(a)
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
% x = es el vector x
2013
% 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

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

5.9.2.Runge-Kutta de orden 4.- Maneja una combinación mayor de pendientes, la forma


generalizada es la siguiente
h
y k +1= y k + k +2 k 2 +2 k 3 +k 4 ] ,
6[ 1
donde :
k 1 =f ( x k , y k )
h h
k 2 =f ( x k + , y k + k 1 )
2 2
h h
k 3 =f ( x k + , y k + k 2 )
MATLAB PARA INGENIERIA 2 2 – RICARDO CASTAÑEDA 2013
k 4 =f ( x k +h , y k +hk 3 )
function [x, y]= RK4(f,a,b,n,y0)
% RUNGE KUTTA 4
% Datos
% f = el nombre de la función como string
% a = límite inferior
% b = límite superior
% h = longitud del segmento
% y0 = f(a)
% x = es el vector x
% n = número 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); 84
>> 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
>>
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

84
6. PROCESAMIENTO DE SEÑALES En este capítulo veremos varias de las funciones que están
relacionadas con el procesamiento de señales. Primero veremos en el dominio del tiempo y
después en el dominio de la frecuencia:
6.1. Análisis en el dominio del tiempo
6.1.1. Funciones que actúan sobre vectores: Las funciones que veremos a continuación
solamente actúan sobre vectores:
 [xmax, ind] = max(x) donde: x es el vector que contiene n elementos y xmax será el
máximo e ind la posición que ocupa xmax.
 [xmin, ind] = min(x) donde: x es el vector que contiene n elementos y xmin será el mínimo
e ind la posición 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.
 desviación= std(x) retorna la desviación estándar de los valores del vector x.
 producto = prod(x) producto de los elementos del vector x.
MATLAB PARA INGENIERIA
 sort(x) – RICARDO
ordena los elementos CASTAÑEDA
del vector x 2013
Programa 1.- Procesamiento en el dominio del tiempo
% Entrega una vector con la señal 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

84
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
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;
MATLAB
end; PARA INGENIERIA – RICARDO CASTAÑEDA 2013
%***********GRAFICA DE LOS VECTORES ****************
subplot(3,1,1);
t=1:lon(1);
plot(t,yc1);
grid;
ylabel('yc1');
title('Digito dos de castañeda');
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 desviación estándar.

84
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 castañeda
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);
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
fprintf('\nLongitud del vector yc1: %d \n',lon1(1)); 2013
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;

84
[mayor3,jj]= max(yc3);
[menor3,jj]= min(yc3);
if abs(mayor3) > abs(menor3)
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);
MATLAB
end; PARA INGENIERIA – RICARDO CASTAÑEDA 2013
%**************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;

84
end;
limb2=lima2+3000 ;
k2= 0:(limb2-lima2);
y2cas = yc2(lima2 :limb2);
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);
MATLAB PARA> des
if abs(yc4(i)) INGENIERIA – RICARDO CASTAÑEDA 2013
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);

84
y5casn = y5cas;
%***********NORMALIZA DIGITOS DOS****************
for i=1:(limb1 - lima1)+1;
y1casn(i)=y1casn(i)/mayabs1;
end;
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);
MATLAB
t=k1;PARA INGENIERIA – RICARDO CASTAÑEDA 2013
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***

84
subplot(5,1,4);
t=k4;
plot(t,y4casn);grid;
axis([0 (limb4-lima4) -1 1]);
ylabel('y4casn');
xlabel('Numero de muestras');
% ***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;
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
tv =1000; 2013
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 señal\n');
pause;
break;
end;
cont = cont +1;
subplot(2,1,1); plot([v1:v2],y1casn(v1:v2));
grid; title('Observando la señal por ventanas');
axis([v1 v2 -1 1]);
ylabel('Ventana ');

84
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;
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 TAMAÑO DE VENTANA E INCREMENTO DE VENTANA
clc;
fprintf('Inicio de programa \n');
MATLAB
vtamPARA INGENIERIA
= input('ingrese – RICARDO
tamaño de la ventana ==> '); CASTAÑEDA 2013
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;

84
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;
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 SEÑAL DE VOZ . TIEMPO6
%UTILIZA ARCHIVO NORMALIZADO: Y1CASN
%CONSIDERA TAMAÑO DE VENTANA E INCREMENTO DE VENTANA
clc;
fprintf('Inicio de programa \n');
vtam = input('ingrese tamaño de la ventana ==> ');
vinc = input('ingrese incremento de la ventana ==> ');
tam = size(y1casn);
tamano = tam(1);
MATLAB
j1=1;PARA INGENIERIA – RICARDO CASTAÑEDA 2013
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[Energía]\n');

84
for i=1:m;
fprintf(' \t\t\t %d \t %6.2f\n',i,energias(i));
end;

6.2. Análisis en el dominio de la frecuencia.- Una señal analógica es una señal continua que
representa información, en nuestro caso una señal de voz. A fin de procesar esta señal en la
computadora, la señal analógica puede muestrearse varias veces por segundo, generando así una
señal digital que es una sucesión de valores tomados de la señal analógica original.
Espectro de frecuencias.- El contenido de frecuencias de una señal se denomina espectro de
frecuencias.Trasformada discreta de Fourier.- Se usa para convertir una señal 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 cálculo y se llama la trasformada rápida de Fourier
Programa 6.2.1.- Utiliza la FFT y pasa la señal 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);
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
fprintf('\nLongitud del vector: %d\n',lon(1));pause; 2013
%**********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);

84
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 SEÑAL*****************
figure(1);fs =Fs;
subplot(2,1,1);plot([1:tamano],y1casn);grid;
title('Dígito dos de Castañeda');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***********

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

84
fprintf('transformada generada, Presione tecla para terminar......');

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

Fig.6.1 (a) Digito dos de castañeda señal en el tiempo (b) Transformada deFourier,señal en el dominio
de la frecuencia.

 Programa 6.2.2.- Muestra el espectrograma de el digito dos de castañeda


% Programa grafica espectrograma
% Programa frec02
% Vector y1casn
clc;
%*********Mostramos la señal*****************
figure(1); subplot(2,1,1);plot(y1casn);grid;
title('Espectrograma del Dígito dos de Castañeda');

84
ylabel('y1casn');zoom on;
%****Mostramos espectrograma****************
subplot(2,1,2);
specgram(y1casn,256, Fs,256, 250);
%********Termina proceso***********
fprintf('Espectrograma mostrado, Presione tecla para terminar......');

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

Fig.6.3 (a) Señal de voz en el tiempo (b) Espectrograma en la frecuencia

 Programa 6.2.3.- Filtra el dígito dos para frecuencias de 100 a 1800 Hz.
% Programa filtra digito Programa frec03
% vector y1casn
clc; vc= y1casn'; % vc es voz de Castañeda
%*********FILTRAMOS LA SEÑAL****************
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;

84
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)']));
title('Dígito dos ');ylabel('Castañeda');zoom on; grid;
y1casnf=vcf';
%********TERMINA PROCESO***********
fprintf('Señal filtrada , Presione tecla para terminar......');

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

Fig.6.3 (a) Grafico del filtro butterworth de 101 a 11800 Hz. (b) Transformada deFourier de la señal
(azul) y la señal filtrada (verde).
 Programa 6.2.4.- Filtra el dígito dos con filtro tipo elíptico
% Aplicación de filtro elíptico 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('FiltroElípticopasabanda'); 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);

84
plot(w, abs([VC(1:256)' VCF(1:256)']));
axis([0 6000 0 50]); title('Dígito dos de Castañeda');
xlabel('Frecuencia'); ylabel('Magnitud'); zoom on; grid; pause;
y1casnf=vcf';fprintf('\n Señales filtradas: \n\n');

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

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

 Programa 6.2.5.- Aplica filtro chebychev a señal de voz dígito 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);

84
subplot(2,1,2);plot(w, abs([ VC(1:256)' VCF(1:256)']));
title('Dígito dos Castañeda'); ylabel('Magnitud');
zoom on; grid; pause;
y1casnf=vcf';

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

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

 Programa 6.2.6.- Halla máximos del dígito dos pero en la frecuencia


%Hallo máximos 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)'));

84
axis ([0 1800 0 30]);
title('Digito dos ');
ylabel('CASTAÑEDA');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;
MATLAB
end; PARA INGENIERIA – RICARDO CASTAÑEDA 2013
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');

84
fprintf(' [Índice] \t[Frecuencia]\t[Magnitud]\n');
for i=1:K1;
fprintf(' %d\t \t%8.2f\t%6.2f\n',i,frec1(i),mayores1(i));
end;
Ejecución del programa frec06:

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

 Programa 6.2.7.- Halla promedio de frecuencias

% Filtra digito dos y halla promedio de frecuencias **


% Archivo frec07.m
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
% Vectores:
2013
% 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('Dígito dos ');
ylabel('CASTAÑEDA');zoom on;grid;y1casnf=vcf';
Fynf = fft(y1casnf,512);pause;
%*****HALLO PROMEDIO DE FRECUENCIA*****

84
clc;
fprintf('Inicio de programa \n');promedio = mean(abs(Fynf))*100;
fprintf('\n Promedio = %8.2f\n',promedio);
fprintf(' \n=======FIN============\n');
%******************************************************

Ejecución del programa frec07:

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

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

84
7. SISTEMAS DE CONTROLEn este capítulo veremos tres temas que son
 Modelado de Sistemas
 Conversión de modelos
 Funciones de diseño y análisis
Estos temas no los trataremos a fondo pero nos servirá para tener una visión de las aplicaciones del
matlab.
7.1. MODELADO DE SISTEMAS El análisis y diseño de sistemas lineales empieza con el modelado
de sistemas reales. Estos modelos que son representaciones matemáticas de sistemas
químicos, sistemas mecánicos y electrónicos, sirven para estudiar la respuesta dinámica de los
sistemas reales. Las técnicas matemáticas empleadas por matlab para diseñar y analizar estos
sistemas suponen procesos que son físicamente 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 técnicas de
diseño y análisis de sistemas de control tanto clásicas 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 idóneos para matlab
porque son una expresión basada en matrices. Veamos un ejemplo: tenemos un sistema, tiene
MATLAB PARA INGENIERIA
tres fuerzas que actúan – RICARDO CASTAÑEDA 2013

K p y (t)

M u(t)

x(t)

Sistema de resorte- masa – amortiguador

Tenemos tres fuerzas que actúan 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 amortiguación
b. la posición de la masa en función del tiempo está representada por x(t). Conectamos a la masa un
potenciómetro de medición p que proporciona un voltaje de salida y(t) proporcional a x(t) .

84
La ecuación de movimiento de la masa está dada por la ecuación diferencial de segundo orden:

'' '
m x + b x +kx=u ( t ) y la ecuación del potenciómetro es:
y (t) = px(t)
7.1.1. FUNCIONES DE TRANSFERENCIA.-El análisis de los sistemas lineales y de control con
frecuencia implica determinar ciertas propiedades dinámicas, como estabilidad y respuesta en
frecuencia, que no es fácil determinar usando análisis en el dominio del tiempo. Para este análisis
obtenemos una transformada de Laplace de la ecuación y pasamos del dominio del tiempo al
dominio de la frecuencia. La transformada de Laplace del anterior sistema es

2
(ms +bs+k )x (s)=u(s) donde s es una variable compleja (+jw), llamada variable
de Laplace. Si llamamos H(s) a la función de transferencia que relaciona el movimiento de salida del
sistema x(s) con la fuerza de entrada u(s):

x (s ) 1 y ( s)
H (s )= = 2 =p
u (s ) ms +bs +k y la función del potenciómetro es x (s)
Usemos un diagrama de bloque, considerando el valor de los parámetros m=1, b= 4, k= 3, y p= 10,
tendremos:
Planta Medición
MATLAB U(s)
PARA INGENIERIA – RICARDO
X(s)
CASTAÑEDA
Y(s) 2013
10

Y finalmente

Sistema
U(s) 10 Y(s)

s 2 +4 s+ 3

factorizan para
Normalmente el numerador y el denominador de una función de transferencia se

3 s 2 +18 s+24
H ( s )= 3
obtener la forma cero – polo – ganancia, por ejemplo si tenemos s +9 s 2 +23 s+15 lo

3( s+2 )(s+4 )
H (s )=
expresamos como (s+1)(s +3 )(s+5 ) en esta forma estamos mostrando los polos y los

84
ceros del sistema respectivamente. Y finalmente podemos escribir la última expresión como una

r1 r r
H (s )= + 2 +.. . .. .+ n +k ( s )
expansión en fracciones parciales
s−p 1 s−p 2 s− pn
.

r1 r2 r3
H ( s )= + + +k
s+1 s+ 3 s +5
Que en nuestro caso seria:

7.1.2. MODELOS DE ESPACIO DE ESTADOS.-Usando nuestro ejemplo anterior tenemos la


ecuación:

m x ' ' + b x ' +kx=u (t ) Que define el movimiento, basado en esto podemos definir:
x 1=x
'
x 2=x
A continuación reescribimos la ecuación diferencial de segundo orden como un conjunto de
ecuaciones diferenciales de primer orden acopladas:
MATLAB PARA
x =x INGENIERIA – RICARDO CASTAÑEDA
'
1 2
2013
' k b u
x 2=− x 1 − x 2 + =−3 x 1−4 x 2 +u
m m m
Y la ecuación de medición como:
y=g(x, u)=10x, utilizando la notación matricial este modelo puede escribirse como un modelo de
espacio de estados
'
x =Ax +Bu
y=Cx+ Du
Que para este ejemplo representa

x '1 x1
[]
x2
'
= [ 0−3 1
−4 x 2
0
][ ] [ ]
+ u
1
x1
y =[ 10 0]
[]
x2
+[ 0 ] u

7.2. CONVERSION DE MODELOS


El matlab cuenta con varias funciones que facilitan la conversión de una forma de modelo a otra y
son las siguientes:
residueExpansión de fracciones parciales.
ss2tf Espacio de estados a función de transferencia
ss2zp Espacio de estados a cero-polo-ganancia
tf2ss Función de transferencia a espacio de estados.
tf2zp Función de transferencia a cero-polo-ganancia.
84
zp2ss Cero – polo – ganancia a espacio de estados.
Función residue.-La función residue convierte la función de transferencia Polinómica:
[r, p, k] = residue (B, A) Determina los vectores r, p y k, que contienen los valores de residuo, los
polos y los términos directos de la expansión de fracciones parciales. Las entradas son los coeficientes
de los polinomios B y A del numerador y denominador de la función de transferencia, respectivamente.
Método en fracciones parciales para encontrar las transformadas inversas de Laplace.-
Para encontrar la transformada inversa de Laplace debemos desarrollar un método para expresar F(s)
como una suma de fracciones parciales o sea F(s) = F 1(s) + F2(s) + F3(s) + F4(s) …...... y por lo tanto L-
1
(F(s)) = L-1(F1(s) + L-1(F2(s) + L-1(F3(s) + L-1(F4(s)…..
= f1(t) + f2(t) + f3(t) + f4(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). Después se analiza el procedimiento que sigue MATLAB para obtener los ceros y los
polos de B(s)/A(s).
MATLAB PARAenINGENIERIA
Desarrollo fracciones simples–con
RICARDO CASTAÑEDA
MATLAB. Considérese 2013
la función de transferencia B(s)/A(s):

B(s) num b0 sn +b1 sn−1 +. .. .+b n


= n n−1
A (s) den
= s +a1 s +. .. .+a n
donde algunos ai y bi pueden ser cero. En MATLAB, los vectores fila num y den especificar los
coeficientes del numerador y del denominador en la función de transferencia. Es decir,
num = b0 b1 … bn
den = 1 a1 … an
El comando
r, p, k = residue (num, den)
encuentra los residuos (r), los polos (p) y los términos 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

B(s) r (1 ) r(2 ) r (n )
= + +. .. .+ +k (s)
A (s) s− p(1) s− p(2) s− p(n )
Comparando las Ecuaciones se observa que p(1) = -p1, p(2) = -p2, … p(n) = -pn ; r(1) = a1, r(2) = a2, ….,
r(n) = an .K(s) es un término directo.
Ejemplo: Considere la siguiente función de transferencia:

B(s ) 2 s3 +5 s 2 +3 s+6
=
A (s) s 3 +6 s 2 +11s +6
Para esta función,

84
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 Observe que los residuos se devuelven en el
vector columna r, las posiciones de los polos en
el vector columna p y el término directo en el vector fila (k). Esta es la representación en MATLAB del
siguiente desarrollo en fracciones simples de B(s)/A(s):

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

−6 −4 3
+ + +2
= s+ 3 s +2 s+1

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013


La función residue también 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 están como se obtienen en el resultado de MATLAB anterior, convierte el desarrollo en


fracciones simples en la razón de polinomios B(s)/A(s) del modo siguiente:

num, den = residue (r, p, k);


printsys (num, den, ‘s’)
num/den =

¿ ¿
2 s 3+5 s 2+3 s+6
s ¿ 3+6 s ¿ 2+11 s+6

La función: printsys (nun, den, ‘s’)


imprime num/den en términos del cociente de los polinomios en s:
Observe que si p(j) = p(j+1) = …. = p(j+m-1) esto es, pj+1 = … = pj+m-1, el polo p(j) es un polo del
multiplicidad m. En este caso, el desarrollo incluye términos en la forma

84
r( j ) r ( j+1 ) r ( j+m−1 )
+ +. .. .+ m
s-p( j) [ s− p ( j) ]
2
[ s−p ( j ) ]
Consúltense los detalles en el Ejemplo

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

B(s ) s 2 +2 s +3 r ( j+m−1 )
= + .. .. .+
A (s ) (s+ 1)3 [ s− p( j)]
m

Consúltense los detalles en el ejemplo 2.7.

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

B(s ) s 2 +2 s +3 s 2 +2 s+3
= =
A (s ) ( s+ 1)3 [ s− p( j) ]
m

Para esta función, 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 página siguiente. Es la representación en MATLAB del
desarrollo en fracciones simples de B(s)/A(s):
MATLAB PARA INGENIERIA
B( s )– RICARDO
1 0 CASTAÑEDA
2 2013
= + +
A (s) s +1 ( s+1 )2 ( s+1 )3

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=[ ]

Observe que el término directo k es cero.


Para obtener la función original B(s)/A(s) a partir de r, p y k se introducen las siguientes líneas en el
computador:
Entonces el computador mostrará el num/den siguiente:

84
4s 2 +16s+12
num /den = s 4 +12 s3 + 44 s2 +48 s
Para obtener los ceros (z), polos (p) y ganancia (K), e introduce el siguiente programa de MATLAB en
el computador:
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
Entonces el -4.0000 computador generará la siguiente salida en la
-2.0000
pantalla: K= 4
Los ceros son -3 y -1. Los polos están en s = 0, -6, -4 y -2. La
ganancia K es 4.
Si los ceros, los polos y la ganancia K están dados, entonces el siguiente programa en MATLAB
generará num/den: z = -1; -3;
p = -1; -2; -4; -6;
K=4
MATLAB PARA INGENIERIA –num,
RICARDO CASTAÑEDA
den = zp2tf(z,p,K); 2013
Printsys (num, den, ’s’)
num / den =

4 s¿ 2+16 s+12
s ¿ 4+ 12 s¿ 3+ 44 s¿ 2+ 48 s

 La función ss2tf convierte las ecuaciones de espacio de estados de tiempo continuo.

x ' =Ax +Bu


y=Cx+ Du
b0 s n +b 1 s n−1 + .. .. . .. .. .. . .+ bn−1 +b n
H (s )= m m−1
En la función de transferencia: a 0 s +a1 s + .. .. . .. .. .+a m−1 s+ am
[num, den] = ss2tf(A,B,C,D) calcula la función de transferencia de :

num( s)
H (s)= =C (sI −A )−1 B+D
den(s)
'
x =Ax +Bu
Del sistema y=Cx+ Du
El vector den contiene los coeficientes de le denominador en potencias descendientes de s. Los
coeficientes del numerador son retornados en num.

84
Ejemplo: Las ecuaciones de espacios de estados para nuestro sistema:

x '1 x1
[ ][
x2
'
=
0 1
−3 −4 x 2
0
][ ] [ ]
+ u
1
x1
y =[ 10 0]
[]
x2
+[ 0 ] u

Usamos el programa:
%convertir modelo de espacio de estados en función de transferencia
A= [0, 1;-3,-4];
B= [0, 1]';
C= [10, 0];
D=0;
[num, den]= ss2tf (A, B, C, D)

RESULTADO:
cap601
num =
0 0 10
den =
1 4 3
Que significa:
y ( s ) 10
H (S )= =
u( s ) s2 +4 s+3
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
 La función ss2zp convierte las ecuaciones de espacio de estados de tiempo continuo.

'
x =Ax +Bu
y=Cx+ Du
(s−z 1 )(s−z 2 ). .. .. . .. .(s−z n )
H (s )=k
En la función de transferencia de cero-polo-ganancia: (s− p1 )(s− p2 ).. .. . ..( s−p m )

Ejemplo: Las ecuaciones de espacios de estados para nuestro sistema:

x '1 x1
[ ][
x2'
=0 1
−3 −4 x 2
+ 0 u
1 ][ ] [ ]
x1
y =[ 10 0]
[]
x2
+[ 0 ] u

Usamos el programa:
%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)

84
RESULTADO:
>> cap602

z = Emptymatrix: 0-by-1

p=

-1

-3

k= 10

Que significa:
y ( s) 10
H (S )= =
u( s) (s+1)(s +3 )
 La función tf2zp convierte la función de transferencia Polinómica

b0 s n +b 1 s n−1 + .. .. . .. .. .. . .+ bn−1 +b n
H (s )=
a 0 s m +a1 s m−1 + .. .. . .. .. .+a m−1 s+ am

(s−z 1 )(s−z 2 ). .. .. . .. .(s−z n )


H (s )=k
En la función de transferencia de cero-polo-ganancia: (s− p1 )(s− p2 ).. .. . ..( s−p m )
MATLAB PARA
Ejemplo: INGENIERIA
La función – RICARDO
de transferencia Polinómica: CASTAÑEDA 2013
y ( s ) 10
H (S )= =
u( s ) s2 +4 s+3
Se convierte en una función de transferencia cero-polo-ganancia usando el programa:

%convierte función de transferencia en cero-polo-ganancia


num =10;
den=[1,4,3];
[z, p, k]= tf2zp (num, den)

RESULTADO:
>> cap603

z = Emptymatrix: 0-by-1

p=

-1

-3

k= 10

Que significa:

84
y ( s) 10
H (S )= =
u( s ) (s+1)(s+3 )

7.3. FUNCIONES DE DISEÑO Y ANALISIS El análisis y diseño 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 diseñar y analizar sistemas lineales. Estas funciones
nos servirán en el dominio del tiempo y de la frecuencia. Estas funciones son :
1. step………………….. respuesta de tiempo de escalón unitario.

2. bode…………………..graficas de frecuencia-respuesta de magnitud y fase.


MATLAB3.PARA INGENIERIA – RICARDO
nyquist……………….grafica de frecuencia CASTAÑEDA
– respuesta de nyquist. 2013
4. rlocus………………..grafico del lugar geométrica de las raíces

7.3.1. Respuesta en el tiempo al escalón 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 relación entrada salida será

C (s) 1
=
representa por: R ( s ) Ts+1
Si este sistema de primer orden es excitado por un escalón unitario la respuesta será

1 1
C ( s )=
Ts+ 1 s en fracciones parciales será
1 1
C ( s )= −
s 1
s+
T y tomando la transformada inversa de Laplace tenemos
−t
T
c (t )=1−e
Ejemplo 1
Si consideramos un circuito RC como el mostrado
R

84
I(t)
Vi(t) C V o(t)

vi(t) = i(t) R + vo(t) como i(t) en el condensador es igual a


i(t) = C (dvo(t) / dt) entonces tenemos v i(t) = RC (dvo(t)/dt) + vo(t), tomando transformada de Laplace
tenemos Vi(s) = RCsVo(t) + Vo(t)

V o ( s) 1
=
de donde
V i (s ) 1+ RCs
−t
RC
por lo tanto c (t )=1−e y el diagrama de bloques sería

Vi(s) 1 V o(s)
1 + RCs
La grafica será

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA


V entrada
2013
V salida

5.1. Sistemas de segundo orden.- Considerando la función de transferencia simple de lazo cerrado

ω
n2
T N 2= 2
s +2 ζωn s+ω 2
n

Dónde:
ζ relacion de amortiguamiento y ω n es frecuencia natural

LAS RAICES SON


S 1,2 =−ζωn ±ω n √ ζ 2 −1
Analizaremos tres casos:

1.- 0<ζ <1 caso subamortiguado


C (s) ω2
n
= donde ωd =ωn √ 1−ζ 2
R ( s ) ( s+ ζωn + jωd )( s +ζωn − jωd )

84
de donde
−ζωn t ζ
c (t )=1−e (cos ω d t+ sen ωd t )
√ 1−ζ 2
2.- ζ =1 caso criticamente amortiguado
ω
n2 −ω n t
C( s )= 2
de donde c ( t )= 1−e (1+ ωn t )
( s+ω n ) s

3.- ζ >1 caso sobreamortiguado


ω
n2
C( s )=
( s+ζω n +ω n √ ζ 2 −1)( s+ζωn −ω n √ ζ 2 −1) s
−s1 t −s2 t
ωn e e
c(t )=1+ ( − )
2 √ζ −1 2 s1 s2
Dónde:
s 1 =(ζ + √ζ 2−1)ωn y
s 2 =(ζ −√ ζ 2 −1)ω n
Respuesta transitoria
Consideremos un sistema de segundo orden, debido a que las especificaciones de funcionamiento
de los sistemas están definidas para este tipo de sistema. Para sistemas de orden mayor, utilizando

MATLAB PARA INGENIERIA – RICARDO


ω 2n CASTAÑEDA
G (s )=
2013
2 2
s + 2 ζωn s +ω n

el concepto de polos dominantes se aproxima el sistema a uno de segundo orden. Su FT es:

s 1,2 =−ζω n ± ω n √ 1−ζ 2


Sus polos o raíces características son:

El diagrama de bloques de un sistema de segundo orden se muestra en la figura

E(s) 2
ω n

s 2 +2 ζωn s +ω 2
n

Para el caso subamortiguado, la respuesta a un escalón unitario tiene oscilaciones amortiguadas, aquí
se definen algunas especificaciones de funcionamiento que son utilizadas como criterios de diseño:
* Porcentaje de sobreimpulso (overshoot)Mp
* Tiempo de asentamiento o establecimiento (settling time)t s
* Tiempo de subida o de crecimiento (rise time)tr

84
* Tiempo de pico máximo (peak time)tp
* Tiempo de retardo (delay time) td

C(t) Tolerancia admisible

MP 0.05
1 o bien
0.02
td
0.5
0.05
o bien
0 0.02
tr
tp
ts

MATLABFigura
PARA1.19:
INGENIERIA – RICARDO
Curva de respuesta CASTAÑEDA
al escalón unitario. 2013
1.- Tiempo de subida: el tiempo que se demora de 0 a 100%
−ζωn t r ζ
c (t r )=1=1−e (cosω d t r + 2
senω d tr )
√ 1−ζ Resolviendo

1 ωd π −β ωd
t r= tan−1 ( )= β=tan−1
ωd ζωn ωd ζωn
2.- Tiempo pico (tp) Cuando la derivada de C(t)/dt = 0 se halla la solución para t p = /d

3.- La sobreelongacion máxima se obtiene en el tiempo pico

ζ
−( )π
M =e √1−ζ 2
Mp = c(tp) –1 Resolviendo p
4.- Tiempo de asentamiento ts
Con el criterio del 2% será ts = 4/n y del 5% es ts = 3/n
Ejemplo 1: Si un sistema de segundo orden tiene las siguientes características  = 0.6 y n = 5
rad/seg. Hallar los valores de merito
Solución:

1.- Hallando tr = -/d , como


ω d =ω n √1−ζ 2=4 y
σ=ζωn=3

84
ωd 4
β=tan−1 =tan−1 =0. 93 radianes
σ 3
tr = 3.14 – 0.93/4 = 0.55 seg.

2.- Hallando tp = /d = 3.14/4 = 0.785 seg.

M p =e
−(
ωd
)π −
=e
(3 4)∗3 . 14 =0 .095 o sea 9 . 5 %
3.- Sobreelongación máxima
4.- Tiempo de asentamiento ts
Con el2% será ts = 4/ = 4/3 = 1.33 seg. o con el 5% ts = 3/3 = 1 seg.

PROGRAMAS EN MATLAB PARA EL ANALISIS EN EL TIEMPO


1) Primer caso 2 raíces 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');
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
xlabel('tiempo(seg)'); 2013
grid;

2) Segundo caso críticamente 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');

84
xlabel('tiempo(seg)');
grid;

3) Tercer caso d=0 punto crítico de oscilación


t=[0:0.2:20]';
wn=1;
d=0;
num=[wn^2];
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
den=[1,2*d*wn,wn^2];
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]';

84
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 escalón unitario caso Sistema Inestable');
xlabel('tiempo(seg.)');grid;

5) Caso 2 raíces complejas conjugadas


t=[0:0.2:20]';
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
wn=1;
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;

84
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));
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA
ev2=1-(exp(-d*wn*t)/sqrt(1-d^2));
2013
ye=step(num,den,t);
plot(t,ye,t,ev1,t,ev2);
title('SISTEMA DE SEGUNDO ORDEN');
xlabel('tiempo(seg)');
ylabel('Salida');
grid;

84
7) Programa que calcula los parámetros de un sistema de segundo orden

RESUMEN DE FORMULAS (caso subamortiguado)

La salida del sistema viene dada por:


−(ζω n t )
e
y (t )=1− 2
sen(ω d t+φ)
√1−ζ
2 √(1−ζ 2 )
ω d =ω n (1−ζ ) y √ φ=arctg
ζ
Con:
Los parámetros característicos del sistema serán:
π−φ √ 1−ζ 2
t r= con φ=arctg ( )
1. Tiempo de subida :
wd ζ
π π
t p= =
ω d ω √ 1−ζ 2
2. Tiempo de pico: n
ζπ

2

3. Sobreelongación (Sobreoscilación) M p =e √1−ζ


%Programa: Realiza los cálculos teóricos con las formulas utilizando
%los resultados y la gráfica de MATLAB
%DATOS DE ENTRADA
%wn=1
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013
%d=0.2
%RESULTADOS
%tr = tiempo de subida
%tp = tiempo de pico
%mp = sobreoscilacion
yp=1;%valor de salida en régimen permanente
t=[0:0.2:20]';
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
%teórico
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);

84
break;
end
end
%Calculando tiempo de pico
%teórico
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
%teórico
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]
MATLAB PARA INGENIERIA
display'Sobrepaso'; [mpamp] – RICARDO CASTAÑEDA 2013
Respuesta
>> anat07
Tiempo de subida
ans = 1.8087 1.8000
Tiempo de pico
ans = 3.2064 3.2000
Sobrepaso Graficas de Bode: Esta grafica nos permite visualizar la amplitud y el ángulo de fase de
7.3.2.
ans = una
0.5266 0.5266
función de transferencia contra la frecuencia. Para tener una visión mayor se grafica esta
amplitud y ángulo de fase versus el log10 de la frecuencia. La función BODE su sintaxis es: [mag,
fase]=bode(num,den,w)….. Halla la magnitud y fase de la función de transferencia definida por
num y den, w es un argumento opcional de frecuencia especificada por el usuario.
Ejemplo:
%Genera grafica de Bode
num=10;
den=[1,1,3];
bode(num,den);

84
Ejemplo 2 La misma grafica especificando las frecuencias
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);

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

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

'
x1 x1
[] '
x2 [ 0−3
=
1
−1 x 2
0
][ ] [ ]
+ u
1
x1
y =[ 10 0]
[ ]+0
x 2 utilizando espacio de estados
%Bode
A=[0,1;-3,-1];
B=[0,1]';
C=[10,0];
D=0;
bode(A,B,C,D);
grid;

84
Ejjemplo 4:
Generando bode con instrucciones adicionales:
%Graficas de bode y grafica de Nichols
w=logspace(-1,2,100);
A=[0,1;-3,-1];
B=[0,1]';

MATLABC=[10,0];
PARA INGENIERIA – RICARDO CASTAÑEDA 2013
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

84
MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

84
7.3.3.Lugar Geométrico de las Raíces: Esta grafica nos permite visualizar el lugar geométrico
de las raíces y verificar la estabilidad o no del sistema.
Caso 1:
K
GH ( s )=
Sea ( s+2 )(s+4 ) Hallar el L.G.R:
Programa
num=1;
den=[1 6 8];
rlocus(num,den);
axis([-10 0 -10 10]);
sgrid;

Gráfico:

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

84
Caso 2:
Sea
K ( s+1 )
GH =
s( s+ 4 )( s +10)
Hallar el L.G.R:

Programa

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

Gráfico

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

84
Caso 3:
2
K (s+ 1)
GH = 2
Sea
s (s+10) Hallar el L.G.R:
Programa

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

Gráfico

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013

Caso4:
K (s +1)
GH ( s)= 2
Sea s ( s+2 )(s+20) Hallar el L.G.R:
Programa
num=[1 1];
den=[1 22 40 0 0];
rlocus(num,den);
Gráfico
axis([-16 16 -16 16]);
sgrid;

84
Gráfico

MATLAB PARA INGENIERIA – RICARDO CASTAÑEDA 2013


Caso 5: Con variación 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

84

S-ar putea să vă placă și