Beruflich Dokumente
Kultur Dokumente
de MATLAB
Correcin Radial
0.04
0.03
0.02
(r-ro)/R
0.01
0 5 10 15 20
Posicin Angular(theta)
0
-0.05
tetha(deg)
-0.1
0 5 10 15 20
-4
x 10 Consumo de Energia de las Entradas
5
F1/Mg, F2/Mg
-5
0 5 10 15 20
Tiempo(horas)
CONTENIDO
1. Introduccin 5
2. Fundamentos 7
2.1 Manejo bsico de las ventanas de MatLab 7
2.2 Entradas desde el teclado 12
2.3 Entrada desde archivos externos 13
2.4 Ejercicios 14
3. Manipulacin de vectores y matrices 17
7. Grficas 79
7.1 Grficas en dos dimensiones (2D) 79
7.2 Trazas mltiples 84
7.3 Escalamiento de ejes 88
7.4 Ms grficas en dos dimensiones(2D) 89
7.5 Incrustacin de ms de una grfica en una ventana 91
7.6 Grficas en tres dimensiones (3D) 93
7.7 Funciones de dos variables 95
7.8 Ejercicios 99
8. Programacin en MatLab 101
8.1 Estructuras bsicas de programacin 101
8.2 Archivos tipo script 106
8.3 Funciones 108
8.4 Depuracin de programas 112
8.5 Ejercicios 118
9. Anlisis Numrico 121
Bibliografa 151
1
Pedro Ochoa Moreno
16
Curso Introductorio de MatLab
Introduccin
2
Pedro Ochoa Moreno
26
Curso Introductorio de MatLab
Fundamentos
2.1 Manejo bsico de las ventanas de MatLab
A=2
A=[1 2 3 4 5] A=[1,2,3,4,5]
B=[1 2 3 4; 5 6 7 8] B=[1 2 3 4
5 6 7 8]
donde la matriz A ser:
1 2 3 4
B
5 6 7 8
Por otro lado, ahora que hemos visto un vector fila y una matriz,
podemos visualizar un vector columna haciendo uso de las
propiedades antes vistas, por ejemplo, el vector C se muestra a
continuacin:
C=[1;2;3;4]
Pedro Ochoa Moreno
51
Curso Introductorio de MatLab
Donde tenemos
1
2
C
3
4
Cabe hacer mencin que la funcin del semicolon (;) tiene en los
casos anteriores solamente la funcin de pasar a una nueva lnea,
pero si se usa al final de una expresin, como la que se muestra,
C=[1;2;3;4];
D=[1 4 5 3 6 87 3 4 8 -6 33 5];
D=[1 4 5 3 6 87
3 4 8 -6 33 5];
2.4 Ejercicios
1
a 3 4 5 10 1 , b 1
3
Pedro Ochoa Moreno
60
Curso Introductorio de MatLab
3
Manipulacin de vectores y
matrices
Pedro Ochoa Moreno
71
Curso Introductorio de MatLab
a A (i, j )
x(6) x(2)
el resultado ser
1 2 5 6
A , B
3 4 7 8
C [A B], D [A;B]
Obtenemos
1 2
3 4
1 2 3 4
C , D
5 6 7 8 5 6
7 8
[m, n] size(C)
h length(x)
length(x)
x 0 : pi/6 : pi
Lo anterior, resulta en
100 2
90 1.9
1.8
80
1.7
70
1.6
60
1.5
50
1.4
40
1.3
30
1.2
20 1.1
10 1
Pedro
0
Ochoa
5 10 15
Moreno
20 25
Logspace
30 35 40 45 50 0 5 10 15 20 25
Linspace
30 35 40 45 50
93
Curso Introductorio de MatLab
(a) (b)
1.9
1.8
1.7
1.6
Linspace
1.5
1.4
1.3
1.2
1.1
1
Pedro Ochoa Moreno 10 20 30 40 50 60
Logspace
70 80 90 100
95
Curso Introductorio de MatLab
(c)
1 2 3 4 5 6
7 8 9 3 4 2
A 1 2 3 4 7 8
4 0 2 5 8 1
3 9 6 8 1 0
1 2 3
B 7 8 9
1 2 3
9 3 4 2
3 4 7 8
C
2 5 8 1
6 8 1 0
1 2 3 6
B 3 5 8 12
2 0 1 9
1 2 3 6
C
3 5 8 12
ans=
4 22
ans
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 0 0
0 0 0
0 0 0
A=
1 2 3 4
5 6 7 8
3 4 6 9
2 4 6 8
zeros(size(A))
ans =
0 0 0 0
0 0 0 0
0 0 0 0
0 0 0 0
A=diag([1 2 3 4])
A=
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
A=diag([1 2 3 4])
A=
1 0 0 0
0 2 0 0
0 0 3 0
0 0 0 4
B=diag(A)
B=
1
2
3
4
B=diag(A)'
B=
1 2 3 4
a=[1 2 3 4 5]
a=
1 2 3 4 5
k=2
k=
diag(a,k)
ans =
0 0 1 0 0 0 0
0 0 0 2 0 0 0
0 0 0 0 3 0 0
0 0 0 0 0 4 0
0 0 0 0 0 0 5
0 0 0 0 0 0 0
0 0 0 0 0 0 0
a='play'
a=
play
a=['p','l','a','y']
a=
play
a='Albert''s dog'
a=
Albert's dog
A=[' today'
' it will'
' rain'];
A
A=
today
it will
rain
today
it will
rain
ans =
11
a=[1 2 3]
a=
1 2 3
b=int2str(a)
b=
1 2 3
c=num2str(a)
c=
1 2 3
d=str2num(b)
d=
1 2 3
A=
1 2 3
Pedro Ochoa Moreno
140
Curso Introductorio de MatLab
4 5 6
7 8 9
rot90(A)
ans =
3 6 9
2 5 8
1 4 7
fliplr(A)
ans =
3 2 1
6 5 4
9 8 7
flipud(A)
ans =
7 8 9
4 5 6
1 2 3
reshape(A,3,3)
ans =
1 2 3
4 5 6
7 8 9
B=[1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16]
save vector B
clear,clc
who
load vector
A=(reshape(B,4,4))
3.7 Ejercicios
1. length(x);
2. size(x);
3. x(12) = -x(3).
X = [1 2 3 4 5 6 20]
Y = [1 2 3 4 5 6 20 20 6 5 4 3 2 1]
a = [0 3 6 9]
b = [45 40 35 30]
y construya el vector
c = [0 45 3 40 6 35 9 30]
1 0 6 3
1 2 0 2
A
0 3 1 3
6 6 4 1
y calcule
Pedro Ochoa Moreno
154
Curso Introductorio de MatLab
1 2 3
A 4 5 6
7 8 9
Pedro Ochoa Moreno
155
Curso Introductorio de MatLab
1 5 6 7
2 0 0 5 2 0 0
A 0 4 0 , B
6 0 3 0
0 0 6
7 0 0 4
A 0
C
0 B
4
Operaciones con escalares
Pedro Ochoa Moreno
161
Curso Introductorio de MatLab
[3 5 7].^2
ans =
9 25 49
[3 5 7]. ^[3 2 1]
ans =
27 25 7
o Redondeo
o Factorizacion de enteros
o Aritmtica compleja
o Signum
rats(9.22)
ans =
461/50
rats(9.22,5)
ans =
46/5
rats(1-1/2+1/3-1/4+1/5)
ans =
47/60
cabe hacer la observacin de que el denominador es el mnimo comn
mltiplo de todos los denominadores.
Como se discuti con anterioridad, el objetivo de rats es
substancialmente la presentacin de los resultados en pantalla; por el
otro lado, rat actualmente calcula la expansin de la fraccin parcial
con la finalidad de obtener una aproximacin racional. En realidad,
1
x d1
1
d2
1
d3 ...
dk
[n,d] = rat(x,tol)
n
x tol x
d
ans =
i = sqrt(-1)
a=3;
z=2+a*j
z=
2.0000 + 3.0000i
o sin seno;
o cos coseno;
Pedro Ochoa Moreno
190
Curso Introductorio de MatLab
o tan tangente;
o asin seno inverso;
o acos coseno inverso;
o atan tangente inverso;
o atan2 tangente inverso de cuatro cuadrantes;
o sinh seno hiperblico;
o cosh coseno hiperblico;
o tanh tangente hiperblico;
Pedro Ochoa Moreno
191
Curso Introductorio de MatLab
[theta,rh0] = cart2pol(x,y)
[theta,rho,z] = cart2pol(x,y,z)
[phi,theta,rho] = cart2sph(x,y,z)
4.3 Ejemplos
x=(1:0.1:5)';
y=log(x);
[x y]
El resultado es:
ans =
1.0000 0
1.1000 0.0953
1.2000 0.1823
4.9000 1.5892
5.0000 1.6094
t=linspace(-2,2,45)';
y =exp(3*t).*sin(5*pi*t);
[t y]
ans =
-2.0000 0.0000
-1.9091 0.0032
-0.0909 -0.7536
0 0
0.0909 1.3002
1.9091 -304.0044
2.0000 -0.0000
Ntese el uso de los operadores y . en la segunda lnea de
instrucciones; el ltimo es utilizado por porque tanto exp(3*t) como
sin(5*pi*t) nos darn un vector.
3s 2 5s 7
f ( s)
s 3 5s 2 7 s 12
El resultado sera:
ans =
1.0e+002 *
0 + 0.0001i 0.0058
0 + 0.0001i 0.0058
0 + 0.0001i 0.0058
0 + 0.8286i 0.0004
0 + 1.0000i 0.0003
4.4 Operadores relacionales y lgicos
menor que
menor o igual
mayor que
mayor o igual
igual
~ no igual
& and
| or
xor or exclusive
~ not
1 2 3 4
A
5 6 7 8
que puedan ser dividido por 2 (sin residuo), basta con escribir la
siguiente lnea:
Pedro Ochoa Moreno
213
Curso Introductorio de MatLab
P=(rem(A,2)==0)
P=
0 1 0 1
0 1 0 1
Pedro Ochoa Moreno
214
Curso Introductorio de MatLab
4.5 Ejercicios
min
x
ax b
a 2 5 8 13 5 0.1
b 4 3 28 -33 72 2
2. |x|, 1/y, z;
3. log x, e y , |x/y|.
x2 y2 a
x/ y b
para a = (1 4 3) y b = (1 3 0.5).
e z e x jy e x (cos y j sin y )
5
Operaciones con matrices
Pedro Ochoa Moreno
230
Curso Introductorio de MatLab
1 3
A
4 2
Pedro Ochoa Moreno
231
Curso Introductorio de MatLab
e1 e3
A 4
e e2
An
eA
n o n!
5.1 Transpuesta
A=
1 2 3
4 5 6
7 8 0
B=
1 4 7
2 5 8
3 6 0
1 j
1 2 j
1 j
1 2 j
5.2 Operaciones algebraicas
X = B (divisin izquierda).
X = A/B que se calcula B A , que se resuelve X A = B
1
(divisin derecha).
[Y,I] = max(X)
esto seria valido con [y, ind]= sort(x) el cual nos dar un vector
de ndices enteros, cuyas entradas son apuntadores del vector x
de tal manera que x(ind) nos dar el sorteo del vector y.
Consideremos, por ejemplo,
x=[41 11 12 12 50];
[y,ind]=sort(x);
y=
11 12 12 41 50
ind
ind =
2 3 4 1 5
El significado de ind es: el vector y sorteado es construido con la
segunda entrada de x, luego la tercera, la cuarta y por ultimo la
quinta; en otras palabras y es x(ind). Obsrvese que en el caso
de entradas repitadas (el valor de 12 en nuestro ejemplo), el
comando sort no altera el orden. En el caso de la matriz [Y,ind] =
2 7 8
3 9 4
2 4 6
trace(A)
ans =
17
m
A 1 max aij
norm(A,1) j
i 1 El mas grande
Suma de columna
norm(A,2) A 2
max i i (A H A) con el mas grande
valor singular
m
A max aij
norm(A,inf) i
j-1 El mas grande
2 1
A F ( aij ) 2
norm(A,fro) ij La norma Frobenius
p 1
n
norm(x,p) x p ( x i ) p
La norma p
i1
norm(x) x 2
x x) H
La norma Euclidiana
El modulo mas
norm(x,inf) x max x i grande
i
El modulo mas
norm(-x,inf) x min
i
xi pequeo
ans =
3 4 5 6 8 10 9 12 15
6 7 8 12 14 16 18 21 24
12 16 20 15 20 25 18 24 30
24 28 32 30 35 40 36 42 48
m1 =
7 8 9
i1
i1 =
3 3 3
m=
9
k
k=
3
h
h=
3
1 2
5 1
R
3 3
2 4
A=
Pedro Ochoa Moreno
267
Curso Introductorio de MatLab
1 1
2 2
3 3
5 4
[S,i1]=sort(R);
A=R(i1(:,1),:);
S
S=
1 1
2 2
3 3
5 4
i1
i1 =
1 2
4 1
3 3
2 4
A=
1 2
2 4
3 3
5 1
o expm(A) calcula e A ;
o logm(A) calcula el log(A);
X=
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
funm(X,'sqrt')
ans =
sqrtm(X)
Pedro Ochoa Moreno
277
Curso Introductorio de MatLab
ans =
i=
2
1
2
j=
1
2
2
Lo anterior, significa que las entradas a 21, a12 y a22 son mayores
de 2, pero B = A(i,j), define la matriz
B=
4 5 5
1 3 3
4 5 5
diag(B)
ans =
4
3
5
t=0:0.005:20;
y=sin(t);
correcto; si, por ejemplo, si pensamos acerca del mas pequeo valor
posible de , podemos usar
[m,k]=min(abs(y-0.5))
m=
2.6509e-005
k=
2619
i=find(abs(y-0.5)<0.05)'
i=
Columns 1 through 6
95 96 97 98 99 100
p=[1 0 -7 6]
A=compan(p)
A=
0 7 -6
1 0 0
0 1 0
Debemos recordar que la principal caracterstica de las matrices
compaeras es que los coeficientes de su polinomio caracterstico son
las entradas del vector p.
tril y triu trabajan como el operador diag en matrices: triu(A,k)
extrae la parte triangular de una matriz iniciando en la kth diagonal
(otra vez k > 0 para diagonal superior y k <0 para diagonal inferior). tril
trabaja de la misma manera, para la parte triangular inferior.
triu(A,0)
ans =
0 7 -6
0 0 0
0 0 0
triu(A,1)
ans =
0 7 -6
0 0 0
0 0 0
triu(A,2)
ans =
0 0 -6
0 0 0
0 0 0
tril(A,-1)
ans =
0 0 0
1 0 0
0 1 0
tril(A,0)
ans =
0 0 0
1 0 0
0 1 0
rand(3,3)
ans =
randn(3,3)
ans =
5.6 Ejercicios
A B a ij bij ;
ij [a ik bkj bik a kj ];
k 1
2 x1 4 x 2 7 x 3 4 x 4 5
9 x1 3 x 2 2 x 3 7 x 1
5 x1 2 x 2 3 x 3 x 4 3
6 x1 5 x 2 4 x 3 3 x 4 2
Ejercicio 5.3 Para cada uno de los pares de vectores que se dan
a continuacin:
u, v u v
Verificar la desigualdad Minkovsky
uv u v
1 0 6 3
1 2 0 2
A
0 3 1 2
6 0 4 1
1. size(A);
2. max(A), max(max(A));
3. p=poly(A);
4. det(A), eig(A), [v,d]=eig(A).
5 3 6 2 j 3j
A 7 2 0 , B 4 2 j 5 6 j
4 8 1 8 1 j
Calcular:
2. i=find(A==max(max(A))).
x1 3 x 2 4 x 3 2 x 4 5
2 x 2 5x3 x 4 2
x3 3x 4 4
6
Polinomios
Pedro Ochoa Moreno
329
Curso Introductorio de MatLab
r=[-3-2*j, -3+2*j,-5];
p=poly(r);
p
p=
1 11 43 65
c=
4 13 28 27 18
[q,r]=deconv(a,b)
q=
0.2500
r=
0 0.7500 1.5000
a(s)=q(s)b(s)+r(s)
Las races del polinomio son calculadas con roots (la cual
actualmente construye la matriz companion (compaera) asociada al
polinomio y calcula sus valores propios). Con referencia al ejemplo
anterior, roots(p) nos da como resultado
roots(p)
ans =
-5.0000
-3.0000 + 2.0000i
-3.0000 - 2.0000i
x1=3*s.^2+5*s+7;
x2=s.^3+5*s.^2+7*s+12;
omega=logspace(-2,2);
s=j*omega;
x1=polyval([3 5 7],s);
x2=polyval([1 5 7 12],s);
n
p(A) p i A i
i0
2 3
Si, por ejemplo, p(s) s 2 s 1 y A , entonces polyval(p,A) nos da
5 8
polyval(p,A)
p(2) p(3)
ans = , esto es p(5) p(8
7 13
31 73
entonces, el calculo de los valores en el sentido de los elementos,
cuando polyvalm(p,A) nos da
polyvalm(p,A)
ans = , esto es A 2 A 1
22 33
55 88
q( s) d a( s)
d ( s ) ds b( s )
b( s ) r r2 rn
1 k (s)
a ( s ) s p1 s p 2 s pn
rj r j 1 r j m 1
j
s pj (s p j ) 2
(s p j )
mj
b( s ) s 1
4
a ( s ) s 8s 23s 2 26 s 10
3
b=[1 -1];
a=[1 8 23 26 10];
[r,p,k]=residue(b,a)
r=
-0.2600 + 0.3200i
-0.2600 - 0.3200i
0.5200
-0.4000
p=
-3.0000 + 1.0000i
-3.0000 - 1.0000i
-1.0000
-1.0000
k=
[]
[b1,a1]=residue(r(1:2),p(1:2),[])
b1 =
-0.5200 -2.2000
a1 =
6.2 Interpolacin
yi = spline(x,y,xi);
yi = interpft(y,n);
yi = interp1(x,y,xi);
yi = interp1(x,y,xi,mtodo);
trabaja igual que intrp1 solo que este utiliza tablas de dos
dimensiones (2D). Los posibles mtodos en este caso son
linear y cubic solamente. El mtodo por default es linear.
X=0:5;
y=[0,20,60,68,77,110];
y1=interp1(x,y,2.8)
y1 =
66.4000
x=0:5;
y=[0,20,60,68,77,110];
y1=interp1(x,y,2.8,'spline')
y1 =
Pedro Ochoa Moreno
369
Curso Introductorio de MatLab
67.7227
new_y1=interp1(x,y,new_x,'linear');
new_y2=interp1(x,y,new_x,'spline');
subplot(2,1,1)
plot(new_x,new_y1,new_x,new_y2,x,y,'og')
title('Interpolacin lineal contra spline cbica')
xlabel('x'),grid
axis([-1,6,-20,120])
6.3 Ejercicios
1. s 3 5s 2 7s 2;
2. (s 1) 3 (s 2 12s 9);
3. 2s j3s 1.
5 2
2 1 0 0
0 2 0 0
A
0 0 1 1
0 0 2 4
1. f(x) x 4 5x 3 1;
Pedro Ochoa Moreno
378
Curso Introductorio de MatLab
x 1
2. g(x) .
x 3x 1
3
s 2 3s
s 4 4s 3 7s 2 6s 2
h 7 10 15 21 27 34 39 43 47 51 55 59 61
556 369 191 75 26.2 9.9 4.4 2.3 1.4 0.8 0.5 0.33 0.25
7
Pedro Ochoa Moreno
386
Curso Introductorio de MatLab
Grficas
Las grficas son una de las caractersticas ms avanzadas de
MatLab. Este captulo es organizado como sigue: primeramente,
iniciaremos con los comandos para grficas simples en 2D lo cual le
permitir al participante trazar la grfica de funciones de una variable
Pedro Ochoa Moreno
387
Curso Introductorio de MatLab
{0,0.48,0.84,1,0.91,0.6,0.14}
plot(y,'*r')
Azul b
Blanco w
Negro k
title('Secuencia de puntos')
xlabel('Abcisa')
ylabel('Ordenada')
grid
Secuencia de puntos
1
0.9
0.8
0.7
0.5
Pedro Ochoa Moreno
0.4
399
0.3
0.2
0.1
0
1 2 3 4 5 6 7
Abcisa
Curso Introductorio de MatLab
(de la misma longitud); en este caso la entrada i-th del vector cadena
(es en realidad una matriz de caracteres) es colocado en el punto con
coordenadas x i , y i . Tambin existe la posibilidad de de utilizar el
comando gtext(text) que es la versin manejada para el mouse, este
coloca el texto en el punto indicado por el punto seleccionado por el
mouse sobre la ventana de la grfica.
Ahora quiero presentarles algo menos trivial: por ejemplo si
deseamos trazar la grfica de la funcin y=f(t). El comando plot(a,b)
t=0:.05:4*pi;
y=sin(t);
plot(t,y,'g')
0.8
0.6
0.4
0.2
-0.2
Pedro Ochoa Moreno
-0.4
406
-0.6
-0.8
-1
0 2 4 6 8 10 12 14
Curso Introductorio de MatLab
y2=exp(-10*t2)+sin(0.05*t2);
figure(1)
plot(t1,y1)
figure(2)
plot(t2,y2)
1 1
0.9 0.8
0.8 0.6
0.6 0.2
0.5 Figura 1 0
0.4 -0.2
0.3 -0.4
0.2 -0.6
0.1 -0.8
0 -1
Pedro
0
Ochoa
0.1 0.2 0.3
Moreno
0.4 0.5 0.6 0.7 0.8 0.9 1 0 20 40 60 80 100 120 140 160 180 200
409
Curso Introductorio de MatLab
%columna
y=[sin(t),cos(t)];
plot(t,y)
gtext('sin(t)')
gtext('cos(t)')
0.8
0.6 sin(t)
0.4
cos(t)
0.2
-0.2
-0.4
-0.6
Pedro Ochoa Moreno
-0.8
414
-1
0 1 2 3 4 5 6 7
Curso Introductorio de MatLab
plot(X1,Y1,X2,Y2,,Xn,Yn)
t1=(0:.1:3)';
y1=sin(t1);
t2=(1:.1:4)';
y2=cos(t2);
plot(t1,y1,t2,y2)
gtext('sin(t)')
gtext('cos(t)')
0.8 sin(t)
0.6
0.4
0.2
cos(t)
-0.2
-0.4
Pedro Ochoa Moreno
-0.6
418
-0.8
-1
0 0.5 1 1.5 2 2.5 3 3.5 4
Curso Introductorio de MatLab
t1=(0:.1:4*pi);
y1=sin(t1);
plot(t1,y1,'g')
hold
Current plot held
t2=(0:.1:4*pi)';
y2=cos(t2);
plot(t2,y2,'m')
t3=(0:.1:4*pi)';
y3=-sin(t3);
plot(t3,y3,'y')
gtext('sin(t)')
gtext('cos(t)')
gtext('-sin(t)')
0.8 sin(t)
0.6
cos(t)
0.4
0.2
-0.8
-1
0 2 4 6 8 10 12 14
Curso Introductorio de MatLab
t=0:.1:5;
plot(t,sin(t)0
axis(axis)
hold
Current plot held
plot(t,[t;exp(t)],'k')
legend('sin(t)','exp(t)')
1
sin(t)
0.8 exp(t)
0.6
0.4
0.2
0
Pedro Ochoa Moreno
-0.2 426
-0.4
-0.6
-0.8
-1
0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5
Curso Introductorio de MatLab
Una leyenda puede ser muy til para distinguir entre mltiples
trazas dentro de una ventana, el comando legend(linetype1,string1,
,linetypen, stringn) crea una leyenda asociada a cada lnea con su
correspondiente cadena, la aplicacin de este comando se observa en
la figura 7.8. Para propsitos prcticos, basta con teclear
legend(string1,srting2,.,stringn).
Cien muestras
14
12
10
6
6
4
4
2
2
0
0 0.1 0 0.2 0.3 0.4 0.5 0.6 0.7 0.8
0 0.1 0.2 0.3 0.4 0.5 0.6
Curso Introductorio de MatLab
Cien muestras
90
80
120 60
60
150 40 30
20
180 0
210 330
442
Curso Introductorio de MatLab
fplot(funcion,[xmin,xmax])
y
[x,y] = fplot(funcion,[xmin,xmax])
Pedro Ochoa Moreno
443
Curso Introductorio de MatLab
subplot(m,n,p)
Clear;
clc;
Pedro Ochoa Moreno
448
Curso Introductorio de MatLab
clf;
%Funcin 10sen3t
t=0:0.1:10;
y=10*sin(3*t);
subplot(311); plot(t,y,'LineWidth',2); %Grfica de 10sen3t
title('Funcin 10sen3t'), ylabel('Amplitud'),xlabel('Tiempo'),grid;
%Funcin 30cos3t
y=30*cos(3*t);
subplot(312); plot(t,y,'LineWidth',2); %Grfica de 30cos3t
title('Funcin 30cos3t'), ylabel('Amplitud'),xlabel('Tiempo'),grid;
%Funcin -90sen3t
y=-90*sin(3*t);
Funcin 10sen3t
10
Amplitud 0
-5
-10
0 1 2 3 4 5 6 7 8 9 10
Funcin 30cos3t Tiempo
40
20
0
451
-20
-40
0 1 2 3 4 5 6 7 8 9 10
Tiempo
Funcin -90sen3t
100
50
Amplitud
-50
-100
0 1 2 3 4 5 6 7 8 9 10
Tiempo
Curso Introductorio de MatLab
Funcin 10sen3t
10
Amplitud
0
-5
-10
0 1 2 3 4 5 6 7 8 9 10
Funcin 30cos3t Tiempo
40
20
Amplitud
0
Pedro Ochoa Moreno
-20
452
-40
0 1 2 3 4 5 6 7 8 9 10
Tiempo
Funcin -90sen3t
100
50
Amplitud
-50
-100
0 1 2 3 4 5 6 7 8 9 10
Tiempo
Curso Introductorio de MatLab
z
x
y
Punto de
vista
x
Pedro Ochoa Moreno
457
Curso Introductorio de MatLab
[X,Y] = meshgrid(x,y)
crea la matriz X con tantas filas como sea la longitud del vector y, y
cada fila es copiada del vector x; anlogamente, la matriz Y tiene un
x=0:.1:4;
y=-2:.1:1;
[X,Y]=meshgrid(x,y);
Z=sin(X).*cos(Y);
contour(x,y,Z)
mesh(X,Y,Z)
meshc(X,Y,Z)
surfc(X,Y,Z)
0.5
-0.5
-1
-1.5
Pedro
-2
0
Ochoa
0.5 1
Moreno
1.5 2 2.5 3 3.5 4
469
Curso Introductorio de MatLab
a) b)
a) b)
la figura 7.15. Por otro lado si quisiramos poner todas las mallas en
una forma pila (cargador) vertical, entonces el comando seria
subplot(4,1,p), donde para este caso y el anterior el valor de p ira
desde uno hasta el valor del producto de m x n (en ambos casos el
rango de p es de 1 a 4).
t=0:pi/10:2*pi;
[X,Y,Z]=cylinder(4*cos(t));
subplot(2,2,1); mesh(X)
subplot(2,2,2); mesh(Y)
subplot(2,2,3); mesh(Z)
subplot(2,2,4); mesh(X,Y,Z)
[X,Y]=meshgrid(-8:.5:8);
R=sqrt(X.^2+Y.^2)+eps;
Z=sin(R)./R;
mesh(X,Y,Z)
surf(X,Y,Z)
7.7 Ejercicios
5000
f ( x, y ) 1
740 x y 100 x 2 100 y 2 6369
2 2
8
Pedro Ochoa Moreno
493
Curso Introductorio de MatLab
Programacin en MatLab
Hasta este momento hemos usado MatLab en un modo
interactivo, tecleando cada comando desde el teclado. Esta forma de
operaciones muy rpida y usual, ya que nos permite utilizar la
computadora como la extensin de una calculadora para obtener
resultados rpidamente, pero esto encara dos problemas; que pasa si
Pedro Ochoa Moreno
494
Curso Introductorio de MatLab
else
conjunto de instrucciones 3
end
for i=1:n;
instrucciones
Pedro Ochoa Moreno
499
Curso Introductorio de MatLab
end
while condicin
instrucciones
end
Instruccin if sencilla
if expresin lgica
Instrucciones
end
if g < 50
Count = count + 1;
disp(g);
end
Instrucciones if anidadas
if g < 50
Count = count + 1;
disp(g);
if b > g
b = 0;
end
end
if interval < 1
x_incremental = interval/10;
else
x_incremental = 0.1;
end
for indice=expresin
Instrucciones
End
for k = inicial:incremento:lmite
Ciclo while
while expresin
Instrucciones
end
% nmeros Fibonacci.
%
clear; clc; clf;
f=[1 1];
i=1;
while f(i)+f(i+1)<1000
f(i+2)=f(i)+(i+1);
i=i+1;
end
plot(f,'g','LineWidth',2)
Pedro Ochoa Moreno
524
Curso Introductorio de MatLab
title('Nmeros Fibonacci')
xlabel('Abcisa')
ylabel('Ordenada')
grid
Nmeros Fibonacci
600
500
400
Ordenada
300
200
8.3 Funciones
function t = trace(a)
%TRACE Suma los elementos de la diagonal.
% TRACE(A) es la suma de los elementos de la diagonal de A,
% lo cual es tambin la suma de los valores propios de A.
% Copyright (c) 1984-94 by The MathWorks, Inc.
t=sum(diag(a));
help trace
b=
15
1, x 0.5
rect(x)
0, en cualquier otro caso
1 y=rect(x)
function r = rect(x)
% RECT Se define como la funcin rectangular
% como 1 en [-0.5, 0.5] y cero en los
% dems puntos.
Pedro Ochoa Moreno
539
Curso Introductorio de MatLab
%
r=zeros(size(x));
set1=find(abs(x)<=0.5);
r(set1)=ones(size(set1));
y=rect(x);
Pedro Ochoa Moreno
540
Curso Introductorio de MatLab
plot(x,y)
title('Funcin Rect');
xlabel('x');
ylabel('y');
grid
Funcion Rect
1
0.9
0.8
0.7
0.6
0.5
y
0.4
0.3
0
-3 -2 -1 0 1 2 3
x
Curso Introductorio de MatLab
corrida, debido a que estos son errores de sintaxis que son mas
sencillos de detectar y corregir.
Trabajar en un modo interactivo, es la forma ms sencilla de
detectar errores y visualizar el resultado intermedio de cada operacin
(es tan simple como omitir el semicolon al final de cada instruccin).
Esto deber ser realizado con cuidado, para evitar un flujo sin final de
nmeros al espacio de trabajo y por ende una carga de memoria
especialmente cuando se trabaja con matrices y vectores de grandes
los valores propios son reales una solucin posible es aadir una
pequea parte imaginaria para cuando se grafiquen. Lo cual, es hecho
por el archivo addimg.m. A continuacin se presentan ambos archivos:
function l=plteig(A)
% Dada una matriz cuadrada A,
% el comando l = plteig(A)
% graficara en el plano complejo
% los valores propios y almacenar
% estos en la variable l.
l=eig(A);
if ~any(image(l))
% si no existe al menos un valor
% propio complejo, entonces aadir
% una parte imaginaria ficticia.
l1=addimg(i);
else
l1=1;
end
Pedro Ochoa Moreno
560
Curso Introductorio de MatLab
function y=addimg(x);
% Dado un vector o una matriz x,
% el comando y=addimg(x);
% dar como resultado y=x+j*eps
Pedro Ochoa Moreno
561
Curso Introductorio de MatLab
dbstop in plteig
dbstop plteig at 12
plteig(A)
K
K dbtype
1 function l=plteig(A)
2 % Dada una matriz cuadrada A,
3 % el comando l = plteig(A)
4 % graficara en el plano complejo
13 else
14 l1=1;
15 end
16 % Ahora la variable l1 es usada para
17 % graficar solamente. Los valores
18 % propios son almacenados en l.
19 plot(l1,'*')
20
1.8
1.6
1.4
1.2
Pedro Ochoa
0.8 Moreno
0.6
575
0.4
0.2
0
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Curso Introductorio de MatLab
K dbstep in
8.5 Ejercicios
a) for k = 3:20
b) for count = -2:14
c) for k = -2:-1:-10
d) for time = 10:-1:0
0 si x 0
1. step(x)
1 en los demas casos
0 si x 0
2. ramp(x)
1 en los demas casos
0 si x 0
3. g(x) sen (/2 si 0 x 1
1 si x 1
9
Anlisis Numrico
Pedro Ochoa Moreno
593
Curso Introductorio de MatLab
1 1
humps(x) 6
( x 0.3) 0.01 ( x 0.9) 2 0.04
2
%
% Example:
% plot(humps)
%
% See QUADDEMO, ZERODEMO and FPLOTDEMO.
if nargout==2,
out1 = x; out2 = y;
else
out1 = y;
end
x=-1:.01:2;
plot(x,humps(x))
100
80
60
40
-20
-1 -0.5 0 0.5 1 1.5 2
Curso Introductorio de MatLab
9.1.1 Derivacin
respecto a la variable t.
s3='(1-t^3)/(1-t^4)';
diff(s1)
y el resultado ser:
ans =
18*x^2-8*x+b
diff(s1,2)
ans =
36*x-8
Por otro lado la funcin dic tambin nos permite derivar la expresin
con respecto a una determinada variable, como se muestra a
continuacin:
diff(s1,'b')
ans =
x
La aplicacin de la funcin diff a la segunda expresin (s2), se
lleva a cabo de manera idntica a lo visto con anterioridad
diff(s2)
ans =
cos(a)
diff(s3)
donde el resultado es :
ans =
-3*t^2/(1-t^4)+4*(1-t^3)/(1-t^4)^2*t^3
simplify(diff(s3))
ans =
-t^2*(t^2+2*t+3)/(t^3+t^2+t+1)^2
ans =
30*cos(3*t)
ans =
-90*sin(3*t)
ans =
-270*cos(3*t)
9.1.2 Integracin
expresiones numricas.
s1='6*x^3-4*x^2+b*x-5';
s2='sin(a)';
s3='sqrt(x)';
int(s1)
ans =
3/2*x^4-4/3*x^3+1/2*b*x^2-5*x
int(s2)
ans =
-cos(a)
int(s3)
ans =
2/3*x^(3/2)
ans =
2/3*b^(3/2)-2/3*a^(3/2)
int(s3,0.5,0.6)
ans =
2/25*15^(1/2)-1/6*2^(1/2)
numeric(int(s3,0.5,0.6))
ans =
0.0741
eq1='x-3=4';
eq2='x^2-x-6=0';
eq3='x^2+2*x+4=0';
eq4='3*x+2*y-z=10';
eq5='-x+3*y+2*z=5';
eq6='x-y-z=-1';
solve(eq1)
ans =
solve(eq2)
ans =
[ [ -2], [ 3] ]
solve(eq3)
ans =
[ [ -1+i*3^(1/2)], [ -1-i*3^(1/2)] ]
[x,y,z]=solve(eq4,eq5,eq6)
ans =
x = -2, y = 5, z = -6
dx
f (t , x) (9.1)
dt
[x,t]=ode23(xDot,t0,tf,x0);
2. y ' f 2 ( x, y ) 2 x cos ( y )
2
3. y ' f 3 ( x, y ) 3 y e
2x
function dy=g1(x,y)
% G1 Esta funcin evala una
% EDO de primer grado.
%
dy=3*x.^2;
function dy=g2(x,y)
Pedro Ochoa Moreno
644
Curso Introductorio de MatLab
function dy=g3(x,y)
% G3 Esta funcin evala una
% EDO de primer grado.
%
dy=3*y+exp(2*x);
Pedro Ochoa Moreno
645
Curso Introductorio de MatLab
[x,num_y]=ode23('g3',[0 3],3);
y=4*exp(3*x)-exp(2*x);
subplot(3,1,3), plot(x,num_y,x,y,'+')
title('Solucin de la ecuacin 3')
xlabel('x'),ylabel('y=f(x)'),grid
captulo 6, la cual seria una buena opcin para obtener una curva ms
continua de la funcin f(x).
a)
Solucin de la ecuacin 1
60
40
y=f(x)
20
0
b) 2 2.2 2.4 2.6 2.8 3 3.2 3.4 3.6 3.8 4
x
Solucin de la ecuacin 2
1.4
1.2
y=f(x)
0.8
Pedro Ochoa
0.6
0 Moreno
0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
x
653
4
c) x 10 Solucin de la ecuacin 3
4
3
y=f(x)
0
0 0.5 1 1.5 2 2.5 3
x
Curso Introductorio de MatLab
u 1 ( x ) y ( n 1)
u 2 ( x) y ( n 2 )
u n 2 ( x) y ' '
u n 1 ( x ) y '
u n ( x) y
u1' y ( n ) g ( x, u n , u n 1 ,..., u1 )
u u1
'
2
u n' 2 u n 3
u n' 1 u n 2
u1 ( x) y '
u 2 ( x) y
function u_prime=eqns2(x,u)
% EQNS2 Esta funcin calcula valores
% para dos ecuaciones acopladas.
Pedro Ochoa Moreno
661
Curso Introductorio de MatLab
%
u_prime(1)=u(1)*(1-u(2)^2)-u(2);
u_prime(2)=u(1);
1. EDO: y' 3x 2
Condicin inicial: y ' ( 2) 0.5
Condicin inicial: y ( 0) / 4
3. EDO: y' 3 y e 2 x
Condicin inicial: y ( 0) 3
soln_1=dsolve('Dy=3*x^2','Dy(0)=0.5')
soln_1 =
x^3-7.5000000
soln_2=dsolve('Dy=2*x*cos(y)^2','y(0)=pi/4')
soln_2 =
atan(x^2+1)
soln_3=dsolve('Dy=3*y+exp(2*x)','y(0)=3')
soln_3 =
-exp(2*x)+4*exp(3*x)
Estas soluciones coinciden con las soluciones analticas presentadas
con anterioridad. Para graficar la primera solucin, podramos usar la
funcin ezplot. En el intervalo de [2,4]:
ezplot(soln_1, [2,4])
function dv=g(t,v)
% G Esta funcin calcula valores
% dados de velocidad.
%
dv=3-0.000062*v.^2;
%
vel_inicial=180;
segundos=240;
%
[t,num_v]=ode23('g',[0 segundos],vel_inicial);
acel=3-0.000062*num_v.^2;
%
subplot(2,1,1),plot(t,num_v),
title('Velocidad');
ylabel('m/s'),grid
Pedro Ochoa Moreno
674
Curso Introductorio de MatLab
subplot(2,1,2),plot(t,acc),title('Aceleracin');
ylabel('m/s^2'),xlabel('Tiempo'),grid
Velocidad
220
210
m/s
200
190
180
0
Pedro Ochoa Moreno 50 100 150 200 250
677
Aceleracin
1
0.8
0.6
m/s 2
0.4
0.2
0
0 50 100 150 200 250
Tiempo
Curso Introductorio de MatLab
9.3 Ejercicios
1. g 1 ( x) x 3 5 x 2 2 x 8
2. g 2 ( x) ( x 2 4 x 4) * ( x 1)
3. g 3 ( x) (3 x 1) / x
4. g 4 ( x) ( x 5 4 x 4 9 x 3 32) 2
0.5
4. 0.5 xdx
3 x1 2 x 2 x 3 1
1. x1 3 x 2 2 x 3 1
x1 x 2 x 3 1
10 x1 7 x 2 0 x 3 7
2. 3 x1 2 x 2 6 x 3 4
5 x1 x 2 5 x 3 6
x1 4 x 2 x 3 x 4 2
2 x1 7 x 2 x 3 2 x 4 16
3. x1 4 x 2 x 3 2 x 4 1
3x1 10 x 2 2 x 3 5 x 4 15
Horas- Componentes
Computadora hombre Metales Kg. Plsticos Kg. unidades
/computadora /computadora /computadora /computadora
1 3 20 10 10
2 4 25 15 8
3 7 40 20 10
4 20 50 22 15
3 25 20 55
10
Pedro Ochoa Moreno
690
Curso Introductorio de MatLab
Simulink
10.1Fundamentos
8 8
6 6
4 4
2 2
0 0
-2 -2
-4 -4
-6 -6
-8 -8
Pedro
-10
0 Ochoa
1 2 3 Moreno
4 5 6 7 8 9 10
-10
0 1 2 3 4 5 6 7 8 9 10
699
Curso Introductorio de MatLab
a) b)
f(t)
M (masa)
y
k (resorte)
b (amortiguador)
my bx
kx f
f +
_
y y
y
who
plot(simout.time,simout.signals.values)
0.15
0.1
0.05
-0.05
-0.1
x x u
x 1 x1 x 2
x 2 x1 x 2 u
N 1 aN 1 bN 1 N 2
N 2 cN 2 dN 1 N 2
Bibliografa
1. Getting Started with MATLAB, The MathWorks, Inc., 1999.
Pedro Ochoa Moreno
736
Curso Introductorio de MatLab