Professional Documents
Culture Documents
Universidad Nacional
Mayor de San Marcos
FACULTAD DE CIENCIAS
MATEMÁTICAS
Curso de
Perfeccionamiento Docente
MATLAB
Autores:
Cristian Amador Loli Prudencio
Agosto, 2006
1
Matlab
INTRODUCCIÓN
La potenciabilidad del MATLAB esta basada en el trabajo con arreglos los cuales
posibilitan una gran facilidad de trabajo.
MATLAB, a través de un entorno GUIDE permite una interfaz gráfica visual para
trabajos con mejores acabados de presentación y objetos visuales con lo cual la potencia
se combina con las facilidades visuales para resolver diverso tipo de problemas.
2
Matlab
1. ENTRAR EN MATLAB
Si aparece el icono de MATLAB como acceso directo en la pantalla inicial (escritorio)
es suficiente pulsar DOBLE CLICK sobre el ratón. En otro caso, será necesario buscarlo
a partir del menú de inicio.
Una vez iniciado MATLAB, nos encontramos con la pantalla de la figura, donde se
observan los diferentes menús y ventanas. El trabajo inicial se realiza en la ventana de
comandos “Command Window”.
2. AMBIENTE MATLAB
EL ÁREA DE TRABAJO de MatLab esta básicamente constituida por:
3
Matlab
Esta barra interactúa según se encuentre en una ventana o en otra, por ejemplo si
actualmente esta en la ventana [Workspace], la barra del menú principal se vería así
LA BARRA DE HERRAMIENTAS
4
Matlab
5
Matlab
6
Matlab
7
Matlab
EJERCICIOS DESARROLLADOS
ENTORNO DE MATLAB
1. Listar los archivos del directorio actual.
>> dir
. fb555.m jose.zip
.. fbef.asv mefloli.asv
L1.M fbef.m mefloli.m
L2.M fbef22222.asv meflolimejor.m
LOLI fbef22222.m metnum
LOLI.asv fbefmejor.m metnum2
MATLAB fbf.m monografias3.doc
Ondaseno.mdl integ2.m sbef111.m
algo.m integ3.m timestwo.asv
e.m integ4.m timestwo.m
fb.m integc2.m vsfunc.m
fb333.m integc3.m
fb444.m integc4.m
8
Matlab
>> dir
. .. license.txt
7. Copiar el archivo license.txt asignando el nombre borrar.txt
>> copyfile('license.txt', 'borrar.txt')
8. Borrar todos los archivos que comiencen con b y tengan extensión txt.
>> delete b*.txt
EJERCICIOS PROPUESTOS
6. Duplicar los archivos de la carpeta COLOR que comiencen con m y tengan extensión
m asignando a los duplicados la letra inicial p y la extensión p.
9
Matlab
DATOS NÚMERICOS
EJEMPLO
Digitar en la ventana de comandos:
>> u=2+3i >> v=2-3j
u= v=
2.0000 + 3.0000i 2.0000 - 3.0000i
DATOS LÓGICOS
Los datos tipo lógico representado por Verdadero y Falso son manejados con los
números 1 y 0 respectivamente.
EJEMPLO
Digitar en la ventana de comandos:
>> 7 * 10 > 40 >> P = (5 * 7 ~= 35)
ans = P=
1 0
EJEMPLO
10
Matlab
NOTA
Matlab no requiere ningún tipo de comando para declarar variables. Sencillamente crea
la variable mediante asignación directa de su valor. Así si asigna a la variable un número
será variable numérica, si le asigna una cadena será variable alfanumérica.
VECTORES
Su sintaxis es la siguiente:
vector=[a, b, c, d, . . . m] Define un vector fila, cuyos elementos son los
valores a, b, c, d,m.
vector=[a; b; c; d; . . . m] Define un vector columna, cuyos elementos son los
valores a, b, c, d, m.
En resumen, las comas separan elementos de un vector (en vez de comas también se
pueden usar espacios en blanco), mientras que el punto y coma separa las filas.
11
Matlab
ORDENAMIENTO
>> V=[6 7 2 8 9]
V=
6 7 2 8 9
>> W=sort(V)
W=
2 6 7 8 9
>> min(V)
ans =
2
MATRICES
Para generar matrices tenemos que introducir vectores fila de la misma cantidad de
componentes, fila por fila. Se usa punto y coma para separar las filas. MATLAB indica
un error cuando las filas tienen diferente número de elementos.
1 2 3 4 0 2 1 4
A 5 6 7 8 , B 5 0 1 0
9 10 11 12 2 0 3 7
13
Matlab
3. OPERACIONES A ELEMENTO
Existen en MATLAB dos tipos de operaciones aritméticas: Las operaciones aritméticas
matriciales, que se rigen por las reglas del álgebra lineal, y las operaciones aritméticas a
elemento, que se realizan elemento a elemento.
14
Matlab
Sea el vector
>> V=[6 7 2 8 9];
Para obtener su tercera componente Para obtener su 1ra, 4ta y última componente
>> V(3) >> V([1, 4, 5])
ans = ans =
2 6 8 9
Tabla 2
SELECCIÓN DE LOS ELEMENTOS DE UNA MATRIZ “A”
Se hace de acuerdo a la siguiente sintaxis:
A(m,n) Devuelve el elemento (m,n) de la matriz A (fila m y columna n).
A([m, n],[p, q]) Devuelve la submatriz de A formada por la intersección de las filas n-
ésima y m-ésima y las columnas p-ésima y q-ésima.
15
Matlab
Sea la matriz
>> A=[1:4; 5:8; 9:12]
A=
1 2 3 4
5 6 7 8
9 10 11 12
>> B=[3,6,10,12;2,16,30,31;4,-2,3,96;5,32,96,97;2,1,3,4];
>> M=B(2:4,2:3)
M=
16
Matlab
16 30
-2 3
32 96
5. MATRICES ESPECIALES
Tipos especiales de matrices
Función Operación Función Operación
tril(A) Parte triangular inferior de la triu(A) Parte triangular superior de la
matriz A matriz A
eye(n) Crea la matriz identidad de nxn eye(m,n) Idem orden mxn
zeros(n) Crea la matriz nula de nxn zeros(m,n) Idem de orden mxn
ones(n) Crea la matriz de unos de nxn ones(m,n) Idem de orden mxn
rand(n) Crea una matriz aleatoria rand(m,n) Idem de orden mxn
uniforme de nxn randn(m,n) Idem de orden mxn
randn(n) Crea una matriz aleatoria normal diag(v) Matriz diagonal con los
de nxn elementos de v
diag(A) Extraer la diagonal de la matriz A diag(v,k) Matriz diagonal con los
diag(A,k)Extraer la k-ésima diagonal de la elementos de v en la k-ésima
matriz A. diagonal
k = 0 es la diagonal principal,
k > 0 es encima de la diagonal
principal y k < 0 es debajo de la
diagonal principal.
EJEMPLOS
MATRIZ COMANDO SALIDA
NULA >> zeros(2)
>> zeros(2,3)
UNOS >> ones(2)
>> ones(2,3)
IDENTIDAD >> I=eye(3) I=
1 0 0
0 1 0
0 0 1
ALEATORIA >> rand(3) ans =
0.2028 0.2722 0.7468
0.1987 0.1988 0.4451
0.6038 0.0153 0.9318
DIAGONAL >> A=[1:4; 5:8; 9:12] D=
A= 1
1 2 3 4 6
5 6 7 8 11
9 10 11 12
>> D=diag(A)
DIAGONAL >> I=diag(2:4) I=
17
Matlab
2 0 0
0 3 0
0 0 4
LA MATRIZ >> I=diag(ones(3,1)) I=
IDENTIDAD 1 0 0
GENERADA CON LA 0 1 0
DIAGONAL 0 0 1
18
Matlab
20
Matlab
EJERCICIOS DESARROLLADOS
MANEJANDO MATRICES
21
Matlab
DESARROLLO
2 1 3
2. Ingrese las matrices A 4 6 y B = matriz aleatoria de 3x3. Construya C a
0.4 7.1 0
partir de A y B: C = [A A ; A.^3 B]
>> A=[2 -1 3;4 pi 6;0.4 7.1 0]
A=
2.0000 -1.0000 3.0000
4.0000 3.1416 6.0000
0.4000 7.1000 0
>> B=rand(3)
B=
0.9501 0.4860 0.4565
0.2311 0.8913 0.0185
0.6068 0.7621 0.8214
>> C=[A A;A.^3 B]
C=
2.0000 -1.0000 3.0000 2.0000 -1.0000 3.0000
4.0000 3.1416 6.0000 4.0000 3.1416 6.0000
0.4000 7.1000 0 0.4000 7.1000 0
8.0000 -1.0000 27.0000 0.9501 0.4860 0.4565
64.0000 31.0063 216.0000 0.2311 0.8913 0.0185
0.0640 357.9110 0 0.6068 0.7621 0.8214
>> size(C)
ans =
6 6
23
Matlab
>> b(1) = [ ]
B=
1.0000
4.2000
b) ¿Qué acción hace? >> A(:)'
Me devuelve todos los elementos de la matriz A como una sola fila, por orden
consecutiva de cada columna.
>> A(:)'
ans =
8 3 4 1 5 9 6 7 2
c) ¿Qué acción hace? >> A(2) Me devuelve el segundo componente de la Matriz A.
>> A(2)
ans =
3
d) ¿Qué acción hace? >> A(1) = [ ] Elimina el primer elemento de la matriz A.
>> A(1) = [ ]
A=
3 4 1 5 9 6 7 2
6. Luego de realizar los comandos, ¿Qué información tiene E?
>> M = 'MATHTYPE'; N='QUESTION';
>> M = M(2:5);N = N(2:5);
>> E = [M' N']'
>> M = 'MATHTYPE'; N='QUESTION';
>> M = M(2:5);N = N(2:5);
>> E = [M' N']'
E=
ATHT
UEST
Explicación: Cuando hago esto >> M = M(2:5);N = N(2:5); estoy definiendo tanto en
M como en N. Luego tomo solo los elementos de la posición 2 hasta la 5 en M e igual
en N. Luego Defino E para que me devuelva a M y N como columna, tomando solo los
elementos ya definidos M = 'MATHTYPE'; N='QUESTION'
A=
2.0000 3.0000 -7.0000
2.0000 1.0000 -1.0000
1.0000 0.1000 1.0000
>> diag(A)
ans =
2
1
1
>>% la antidiagonal
>> diag(fliplr(A))
ans =
-7
1
1
8. Extraer los elementos de la parte triangular superior de A.
>> triu(A)
ans =
2 3 -7
0 1 -1
0 0 1
9. Crear la matriz mágica de M de 5x5 y usar la función del Matlab para hallar el valor
de la suma de los elementos de la diagonal.
>> M=magic(5) >>%suma de elementos de la diagonal
M= >> trace(M)
17 24 1 8 15 ans =
23 5 7 14 16 65
4 6 13 20 22
10 12 19 21 3
11 18 25 2 9
25
Matlab
EJERCICIOS PROPUESTOS
26
Matlab
OPERACIONES DE LA MATRIZ
Hemos visto ya el operador ' (traspuesto) para hallar la traspuesta de una matriz ó
traspuesta de un vector, también las operaciones con matrices.
1 2 3 1 1 1
Pero nótese que si C= , D= y x 1 1 1 entonces:
4 5 6 2 2 2
1 1 2
1 2 3 1 2 3
a) Están bien definidos C*x'= 1 , C*D' = 1 2 .
4 5 6 4 5 6
1 1 2
1
b) Están bien definidos x*x' = 1 1 1 1 (producto interno que es equivalente a la
1
1
operación a elemento x.*x) y el x'*x = 1 1 1 1 (producto externo).
1
c) Sin embargo C*x y C*D no están bien definidos.
División izquierda:
x = A\B y también x=linsolve(A, B) soluciona A * x = B
División derecha:
x = B/A soluciona x * A = B
27
Matlab
EJEMPLO
2x1 3x 2 4x 3 3
Resolver x x 2 x3 0.5
1
4x 7x 14x 3
1 2 2
28
Matlab
FORMA DE GAUSS-DOOLITTLE
Otra técnica para resolver Ax = b es descomponer en factores A por Eliminación
Gaussiana y después solucionar dos sistemas triangulares para computar x. Es decir
descomponer A de la forma Lower Upper, que en su forma más general será:
P*A=L*U
Siendo L = matriz triangular inferior unitaria, U = matriz triangular superior, P = matriz
de permutación.
FORMA DE CHOLESKI
Si A es definida positiva y simétrica entonces la factorización Lower Upper también se
puede realizar de la forma de Choleski que será:
A = R’ * R
Siendo R = matriz triangular superior.
29
Matlab
[L,U,P]=lu(A) Devuelve una matriz triangular inferior unitaria L, una matriz triangular
superior U, y una matriz de permutación P tales que PA = LU.
R=chol(A) Devuelve la matriz triangular superior R tal que R’ * R = A
(descomposición de Cholesky de A), en caso de que A sea definida
positiva y simétrica. Si A no es definida positiva devuelve un error.
EJEMPLO
Factorizar:
2 3 4
A 1 1 1 por Gauss Doolittle, y
4 7 14
Nótese que la matriz de pascal B es una matriz simétrica y definida positiva, por lo cual
la factorización de la forma de Choleski se ha llevado con éxito.
4. FACTORIZACIÓN ORTOGONAL
Cuando A es rectangular, los factores de A se pueden hallar por ortogonalización.
[Q,R] = qr(A) produce una matriz triangular superior R de la misma dimensión de A y
una matriz ortogonal Q tal que A = Q*R.
[Q,R,P] = qr(A) produce una matriz de permutación P, una matriz triangular superior R de
la misma dimensión de A y una matriz ortogonal Q tal que A*P = Q*R.
EJEMPLO
Factorizar ortogonalmente:
30
Matlab
2 3 4 1 2 3 1
A 1 1 1 y B = 2 1 2 4 .
4 7 14 0 2 3 1
5. NORMAS MATRICIALES
EJEMPLO
Extraer la norma 1, norma euclideana y norma del máximo de la matriz A.
>> A=[2,3,-4;1,-1,1;4,-7,14] >> norm(A,2) >> norm(A,1) >> norm(A,inf)
A= ans = ans = ans =
2 3 -4 16.8014 19 25
1 -1 1
4 -7 14
31
Matlab
6. ARREGLOS MULTIDIMENSIONALES
32
Matlab
EJERCICIOS DESARROLLADOS
ÁLGEBRA MATRICIAL
1. Hallar la norma euclideana, la norma del máximo, la norma L1, de v=[2,3, 1, 2,1,3] .
>> v=[2,3,-1,2,1,3] v=
2 3 -1 2 1 3
>> norm(v) ans =
5.2915
>> norm(v,inf) ans =
3
>> norm(v,1) ans =
12
8.2563
>> norm(A,inf) ans =
12
>> norm(A,'fro') ans =
9.0554
>> cond(A) ans =
7.5751
3. Resuelva el Sistema lineal Ax = b, siendo A=[2,3, 7;2,1, 1;1, 2,3] , b=[1: 3]' .
>> A=[2,3,-7;2,1,-1;1,2,3] A=
2 3 -7
2 1 -1
1 2 3
>> b=[1:3]' b=
1
2
3
>> x=A\b x=
0.9063
0.5313
0.3438
>> [L,U,P]=lu(A) L=
33
Matlab
1.0000 0 0
1.0000 1.0000 0
0.5000 -0.2500 1.0000
U=
2 3 -7
0 -2 6
0 0 8
P=
1 0 0
0 1 0
0 0 1
>> [Q,U]=qr(A) Q=
-0.6667 0.4576 -0.5883
-0.6667 -0.7191 0.1961
-0.3333 0.5230 0.7845
U=
-3.0000 -3.3333 4.3333
0 1.6997 -0.9152
0 0 6.2757
34
Matlab
EJERCICIOS PROPUESTOS
5. Haga operaciones elementales filas a la matriz A con tal de convertir toda la 1ra
columna y debajo del primer elemento de A en ceros.
35
Matlab
1. POLINOMIOS
EJEMPLO
El polinomio p( x) x 3 4 x 2 10 en Matlab será
>> p=[1 4 0 -10]
p=
1 4 0 -10
EVALUACIÓN DE POLINOMIOS
polyval(p, x) evalúa el polinomio p (que es un vector de longitud n+1 cuyos elementos
son los coeficientes del polinomio) en x.
EJEMPLO
El polinomio p( x) x 3 4 x 2 10 lo evaluamos en distintos x.
>> y=polyval(p,1) >> x=1:0.25:2
y= x=
-5 1.0000 1.2500 1.5000 1.7500 2.0000
PRODUCTO DE POLINOMIOS
conv(p,d) Multiplicación de los polinomios p y d
DIVISIÓN DE POLINOMIOS
[Q,R] = deconv(p,d) División de polinomios p y d, obteniéndose el cociente Q y
residuo R.
EJEMPLO
Sean los polinomios p( x) x 3 4 x 2 10 y d (x) x 2 2 se tiene
>> p=[1,4,0,-10];d=[1,0,-2]; >> [Q,R]=deconv(p,d) %division de p(x) por d(x)
>> m=conv(p,d) %producto de p(x) por d(x) Q=
m= 1 4
1 4 -2 -18 0 20 R=
0 0 2 -2
36
Matlab
FRACCIONES PARCIALES
A( x)
[R,P,Q] = residue(A,B) Descomposición en fracciones parciales de , siendo
B( x)
A( x) R(1) R(2) R(n)
... Q( x )
B( x) x P(1) x P(2) x P(n)
EJEMPLO
Descomponer en fracciones parciales
f ( x) = 4 x 2 x 3x2 2 =
3 2
a b c d
x ( x 1) x 1 x 1
2
x x2
Solución:
A( x) 4 x3 x 2 3x 2 , B( x) x2 ( x 1)2 x4 2 x3 x 2 , luego en Matlab se tiene:
>> A=[4,-1,-3,- P=
2];B=[1,2,1,0,0]; -1 Entonces la expansión en fracciones parciales
>> [R,P,Q]=residue(A,B) -1 será:
R= 0
3 0 4 x3 x 2 3x 2 3 4 1 2
-4 Q= 2
x ( x 1)
2 2
x 1 x 1 2
x x
1 []
-2
DERIVADAS DE POLINOMIOS
polyder(p) Es la derivada del polinomio p.
EJEMPLO
2. AUTOVALORES Y AUTOVECTORES
37
Matlab
EJEMPLO
2 3 4
Sea A 1 1 1
4 7 14
3. RAÍCES DE POLINOMIOS
38
Matlab
4. RAÍCES DE FUNCIONES
fzero Extrae las raíces de funciones lineales y no lineales, con el único requisito de que
introduzca un valor inicial.
>> fzero('sin(x)-cos(x)',0)
ans =
0.7854
>> fzero('sin(2*x)-2*cos(x)+x^2-3*x-6',3)
ans =
3.9113
39
Matlab
EJERCICIOS DESARROLLADOS
>> p1=[2,0,-1,7] p1 =
2 0 -1 7
>> x = 1:0.3:4 x=
1 1.3 1.6 1.9 2.2 2.5 2.8 3.1 3.4 3.7 4
>> polyval(p1,x) ans =
Columns 1 through 5
8.0000 10.0940 13.5920 18.8180 26.0960
Columns 6 through 10
35.7500 48.1040 63.4820 82.2080 104.6060
Column 11
131.0000
p3
8. Hallar la descomposición en fracciones parciales de
p1
>>[R,P,Q] = residue(p3,p1)
40
Matlab
EJERCICIOS PROPUESTOS
4
7. Hallar el desarrollo del trinomio p(x) = x3 - ix + 2 usando comandos del Matlab.
41
Matlab
Matlab produce gráficos de dos y tres dimensiones, así como contornos y gráficos de
densidad.
Se pueden representar los gráficos y listar los datos, permite el control de colores,
sombreados y otras características de los gráficos, también soporta gráficos
animados.
Los gráficos producidos por Matlab son portables a otros programas.
ANATOMIA DE UN GRAFICO
- Modelo matemático de la curva. Para esto se tiene que tener la ley o modelo
matemático que describe el fenómeno, es decir
Modelo
Por una ley o modelo matemático
42
Matlab
- Datos discretos de la curva. Para esto se tiene que tener datos de los pares ordenados
(X,Y), es decir
Datos
X = Pre imágenes
Y= Imágenes
plot(X) Representa los puntos (k, Xk). Si X es una matriz, hace lo mismo para cada
columna de la matriz. Si X es un vector complejo, representa Real(X) frente a
Imag(X).
EJEMPLO
>> x=[7,9,3,1,5,20,5]
x=
7 9 3 1 5 20 5
>> plot(x)
43
Matlab
EJEMPLO
Graficar f ( x) x 4 x 2 sen( x) en el intervalo [0, 5]
Solución
>> x=0:0.2:5;
>> y=sqrt(x)+4*x.^2.*sin(x);
>> plot(x,y)
EJEMPLO
Graficar f ( x) e x xsen( x 2 ) 2 en el intervalo [ - 3 , 3] con trazo de color rojo
etiquetas cuadradas y línea punteada.
Solución
>> x=-3:0.4:3;
>> y=exp(x)-x.*sin(x.^2)+2;
>> plot(x,y,'rs:')
44
Matlab
title(‘texto’) Añade el texto como título del gráfico en la parte superior del mismo en
gráficos 2-D y 3-D
xlabel(‘texto’) Sitúa el texto al lado del eje x en gráfico 2-D y 3-D
ylabel(‘texto’) Sitúa el texto al lado del eje y en gráficos 2-D y 3-D
zlabel(‘texto’) Sitúa el texto al lado de eje z en un gráfico 3-D
text(x,y,’texto’) Sitúa el texto en el punto (x,y) dentro del gráfico 2-D
text(x,y,z,’texto’) Sitúa el texto en el punto (x,y,z) en el gráfico 3-D
gtext(‘texto’) Permite situar el texto en un punto seleccionado con el ratón dentro de un
gráfico 2-D
LEYENDAS
Colocación
legend(string1,string2,string3, ...) Crea las leyendas de los gráficos correspondientes.
Localización
legend(...,'location',loc) Adiciona las leyendas en una ubicación específica con respecto a
los ejes. Esta ubicación loc es de 1x4 posiciones y
combinaciones de acuerdo a:
'North' Dentro del cuadro grafico y arriba.
'South' Dentro y abajo.
'East' Dentro y a la derecha.
'West' Dentro y a la izquierda.
'NorthEast' Dentro y arriba a la derecha (default)
'NorthWest Dentro y arriba a la izquierda
'SouthEast' Dentro y abajo a la derecha
'SouthWest' Dentro y abajo a la izquierda
'NorthOutside' Fuera del cuadro grafico y arriba
'SouthOutside' Fuera y abajo
'EastOutside' Fuera y a la derecha
'WestOutside' Fuera y a la izquierda
'NorthEastOutside' Fuera y arriba a la derecha
'NorthWestOutside' Fuera y arriba a la izquierda
'SouthEastOutside' Fuera y abajo a la derecha
'SouthWestOutside' Fuera y abajo a la izquierda
'Best' Espacio no usado dentro del cuadro grafico
'BestOutside' Espacio no usado fuera del cuadro grafico
EJEMPLO
Graficar en el intervalo [ - 3 , 3] y1 xsen( x2 ) 2 , y 2 x 4sen( x) , y3=x+0.3[x]
colocando titulo, descripción de ejes y leyendas.
Solución:
45
Matlab
>> x=-3:0.4:3;
>> y1=-x.*sin(x.^2)+2;
>> y2=abs(x)+4*sin(x);
>> y3=x+0.3*floor(x);
>> plot(x,y1,x,y2,x,y3);
>> title('Gráfico de tres funciones');
>> xlabel('eje x');ylabel('eje y');
>> legend('-x*sen(x)', '|x|+4*sen(x)',
'x+0.3[x]')
Estos comandos permiten manipular los ejes de un gráfico, la colocación del mismo
dentro de la pantalla, su apariencia, su presentación desde distintos puntos de vista, etc.
axis([xmin xmax ymin ymax]) Sitúa los valores máximo y mínimo para los ejes X e Y en el
gráfico corriente.
axis (‘auto’) Sitúa los ejes en la escala automática por defecto (la dada por xmin=min(x),
xmax=max(x) e y libre).
axis (axis) Congela el escalado de ejes en los límites corrientes, de tal forma que al situar
otro gráfico sobre los mismo ejes (con hold en on), la escala no cambie.
V=axis Da el vector V de 4 elementos, conteniendo la escala de gráfico corriente.
axis(‘ij’) Sitúa coordenadas con el origen en la parte superior izquierda del gráfico.
axis(‘square’) Convierte el rectángulo de graficado en un cuadrado, con lo que las
figuras se abomban.
axis(‘equal’) Sitúa el mismo factor de escala para ambos ejes.
axis (‘normal’) Elimina las opciones square y equal.
axis(‘off’) Elimina las etiquetas y marcas de los ejes y las rejillas, manteniendo el título del
gráfico y los textos situados en él con text y gtext.
axis(‘on’) Coloca de nuevo las etiquetas, marcas y rejillas de los ejes.
46
Matlab
EJEMPLO
Graficar f ( x) x x 2 sen( x) y g(x)=senx+[x2] en el intervalo [0, 5] dentro de una
region rectangular 2,7 30,30
Solución
>> x=0:0.2:5;
>> y1=sqrt(x)+x.^2.*sin(x);
>> plot(x,y1)
>> hold on %superposición
>> y2=sin(x)+floor(x.^2);
>> plot(x,y2)
>> axis([-2 7 -30 30])
>> grid %mallado
EJEMPLO
Para crear 2x3 = 6 subventanas y colocar el puntero en la posición 4, se procede en
Matlab como:
>>subplot(2,3,4)
47
Matlab
>> x=0:pi/40:2*pi;plot(x,sin(x))
FUNCIÓN FPLOT
fplot('fun',limits) Plotea 'fun' entre limites [xmin xmax] o limites [xmin xmax ymin
ymax]. 'fun' es el nombre de una función M-file o una cadena con
variable x tal como 'sin(x)', 'diric(x,10)' o '[sin(x),cos(x),exp(x)]'.
fplot('fun',limits,S) Plotea 'fun' con las opciones definidas en S.
fplot('fun',limits,tol) Plotea 'fun' con el error relativo con tolerancia tol (por defecto
es 2*10-3).
fplot('fun',limits,tol,S) Plotea 'fun' con tolerancia tol y con las opciones def. en S.
fplot('fun',limits,n) Con n 1. Plotea 'fun' con un mínimo n 1 de puntos. El máximo
tamaño de paso esta restringido por xmax-xmin .
n
[X,Y] = fplot('fun',limits) Retorna las abscisas y ordenadas para 'fun' en X e Y. No
hace la gráfica.
EJEMPLO
Graficar f ( x) xsen( x) 2 en el intervalo [0, 5].
>> fplot('-x.*sin(x)+2',[0 5])
EJEMPLO
Graficar f ( x) xsen( x), g ( x) cos x x, h( x) x 2 3x 2 en el intervalo [0, 5].
48
Matlab
EJEMPLO
>> x=0:0.2:5;
>> semilogy(x,10.^x)
49
Matlab
EJEMPLO
Graficar
a) La rosa de 4 pétalos horizontal. b) La función polar r = 1 – 2*cos(θ)
>> a=0:pi/40:2*pi; >> polar(a,1-2*cos(a))
>> polar(a,3*cos(2*a))
EJEMPLO
Graficar la rosa de 7 pétalos horizontal.
>> b=0:pi/100:2*pi;
>> polar(b,3*cos(7*b))
50
Matlab
. GRÁFICOS ESTADÍSTICOS
HISTOGRAMAS
bar(Y) Dibuja el gráfico de barras relativo al vector Y
bar(X,Y) Dibuja el gráfico de barrar relativo al vector Y cuyos elementos son
especificados a través del vector X
EJEMPLO
>> y=[2 7 4 6 19 2];
>> bar(y)
EJEMPLO
>> x=[2 5 7 8 9 12];
>> y=[2 7 4 6 19 2];
>> bar(x,y)
51
Matlab
EJEMPLO
>> y=[2 1 3 2 1 2 3 1 2 3 2 1 2 3 4 5 5 3];
>> hist(y)
errorbar(x,y,e) Realiza el gráfico del vector x contra el vector y con los errores
especificados en el vector e. Pasando por cada punto (xi,yi)
stem(Y) Dibuja el gráfico de racimo relativo al vector Y. Cada punto del vector Y
es unido al eje x por una línea vertical
stem(X,Y) Dibuja el gráfico de racimo relativo al vector Y cuyos elementos son
especificados a través del vector X.
pie(X) Realiza el gráfico de sectores relativo al vector de frecuencias X.
pie(X,Y) Realiza el gráfico de sectores relativo al vector de frecuencias X
desplazando hacia fuera los sectores en los que Yi 0
EJEMPLO
>> x=[1,4,0.5,2.5,2]; pie(x)
5. GRÁFICOS DE RELACIONES
ezplot(f) Plotea f sobre el dominio por defecto -2 < x < 2 .
ezplot(f, [a,b]) Plotea f sobre a < x < b
ezplot(f, [xmin,xmax,ymin,ymax]) Plotea f sobre xmin< x <xmax, ymin< y <ymax.
ezplot(x,y) Plotea en coordenadas paramétricas la curva plana
x= x(t), y= y(t) sobre el dominio por defecto
-2 < x < 2 .
ezplot(x,y, [tmin,tmax]) Plotea x = x(t) , y = y(t) over tmin < t < tmax.
Donde f puede ser una función estandar f = f(x) ó una función implicita f = f(x,y) = 0.
52
Matlab
EJEMPLOS
53
Matlab
EJEMPLOS
Gráficos con dominio por defecto
>>ezpolar('cos(5*t)') >>ezpolar('1 + 2*sin(t/2)') >>ezpolar('1 - 2*sin(3*t)')
54
Matlab
5. IMAGENES
F = imread(filename) asigna el contenido del archive imagen a la variable matricial F.
Soporta los archivos *.jpeg, *.tiff, *.gif, *.png, *.hdf, *.ico, *.bmp, etc
image(F) visualiza la matriz C como una imagen en una ventana de figura.
>>F=imread('pcblack.bmp');image(F);
>>axis off %desactiva los ejes
EJERCICIOS RESUELTOS
1. Graficar el polinomio p1 = 2x3 x 7 en el intervalo [–10 , 10].
2. Graficar la función xsen(x 2) en el intervalo [ - 2 , 2].
3. Graficar las funciones 3sen(x) y e-0.2 x sobre un mismo gráfico, para
x=0:0.1:4. Usar zoom y gtext para nombrar uno de los puntos de
intersección de dichas funciones.
Solución:
1. Graficar el polinomio p1 = 2x3 x 7 en el intervalo [–10 , 10].
>>p1=[2,0,-1,7]
>>x=-10:0.5:10;y=polyval(p1,x);
>>plot(x,y)
55
Matlab
56
Matlab
>>x=0:0.1:4;
>>plot(x,3*sin(pi*x))
>>hold on
>>plot(x,exp(-0.2*x))
EJERCICIOS PROPUESTOS
1. Crear el archivo tipo texto datos.txt con los datos
1.0 7.5
2.5 4.0
3.2 5.0
3.5 5.5
2.0 6.3
7.8 6.2
8.1 6.0
9.7 5.0
10.3 3.0
2. Graficar usando este archivo la 1ra columna versus la 2da columna a través
de una poligonal lineal, use textread para leer los datos de este archivo.
3. Grafique:
a. x2 y2 3
b. x + y = 10
5. Use subplot para dividir la ventana en 1x2 para luego graficar en ellas las
siguientes curvas paramétricas (R R2).
x1 sen(t) x sen(t)
,t [0,2] 1 ,t [0,2]
y1 sen(2t) y1 cos(t)
57
Matlab
1. CURVAS 3D
plot3(X,Y,Z) gráfica la terna X, Y, Z dándonos así una curva en el espacio.
plot3(X,Y,Z,S) gráfica la terna X, Y, Z dándonos así una curva en el espacio con
las características S igual que plot.
ezplot3(x,y,z) Gráfica en coordenadas paramétricas x = x(t), y = y(t), z = z(t)
sobre el dominio por defecto 0 < t < 2 .
ezplot3(x,y,z ,[tmin,tmax]) Gráfica x=x(t), y=y(t), z=z(t) sobre tmin < t < tmax.
EJEMPLO
>> x=0:0.8:8,y=x.^2,z=sqrt(x)
x=
0 0.8000 1.6000 2.4000 3.2000 4.0000 4.8000 5.6000 6.4000 7.2000 8.0000
y=
0 0.6400 2.5600 5.7600 10.2400 16.0000 23.0400 31.3600 40.9600 51.8400 64.0000
z=
0 0.8944 1.2649 1.5492 1.7889 2.0000 2.1909 2.3664 2.5298 2.6833 2.8284
>> plot3(x,y,z)
>> grid
EJEMPLO
>> ezplot3('cos(t)', 't * sin(t)', 'sqrt(t)', [0,6*pi])
58
Matlab
Explicación:
59
Matlab
EJEMPLO
Solución:
>> xa=0:0.5:2,ya=0:0.4:2
xa =
0 0.5000 1.0000 1.5000 2.0000
ya =
0 0.4000 0.8000 1.2000 1.6000 2.0000
>> [x,y]=meshgrid(xa,ya)
x=
0 0.5000 1.0000 1.5000 2.0000
0 0.5000 1.0000 1.5000 2.0000
0 0.5000 1.0000 1.5000 2.0000
0 0.5000 1.0000 1.5000 2.0000
0 0.5000 1.0000 1.5000 2.0000
0 0.5000 1.0000 1.5000 2.0000
y=
0 0 0 0 0
0.4000 0.4000 0.4000 0.4000 0.4000
0.8000 0.8000 0.8000 0.8000 0.8000
1.2000 1.2000 1.2000 1.2000 1.2000
1.6000 1.6000 1.6000 1.6000 1.6000
2.0000 2.0000 2.0000 2.0000 2.0000
60
Matlab
3. SUPERFICIES
Un gráfico de malla tridimensional viene definido por una función z = f(x,y), de tal
forma que los puntos de la superficie se representan sobre una rejilla, resultado de
levantar los valores de z dados por f(x,y) sobre los correspondientes puntos del plano
(x,y). El aspecto de un gráfico de malla es como una red de pesca, con los puntos de la
superficie sobre los nudos de la red. Realmente, es un gráfico de superficie cuyo grafo
tiene forma de red.
El primer paso para representar una función de dos variables z = f(x,y) mediante su
gráfico de superficie, es utilizar el comando meshgrid, que básicamente define la matriz
de puntos (X,Y) sobre los cuales se evalúa la función de dos variables para hacer su
presentación gráfica.
Para representar un gráfico de malla, se utiliza el comando mesh y sus variantes, cuya
sintaxis es la siguiente:
mesh(X,Y,Z) Representa el gráfico de malla de la función z=f(x,y), dibujando las líneas
de la rejilla que componen la malla.
meshz(X,Y,Z) Representa el gráfico de malla de la función z=f(x,y) con una especie de
cortina o telón en la parte inferior
waterfall(X,Y,Z) Representa el gráfico de cascada de la función z=f(x,y).
surf(X,Y,Z) Representa el gráfico de superficie de la función z=f(x,y)
surfl(X,Y,Z) Representa el gráfico de superficie de la función z=f(x,y).
EJEMPLO
Graficar el paraboloide z x 2 y 2 en el dominio [ -5, 5 ]x[ -5, 5 ]
61
Matlab
>> [x,y]=meshgrid(-5:0.25:5,-5:0.25:5);
>> z=x.^2+y.^2;
>> surf(x,y,z)
EJEMPLO
Graficar usando mesh, surf, contour y contour3 z x 2 y 2 en el dominio [-5, 5]x[-5, 5]
Solución:
>> [x,y]=meshgrid(-5:0.25:5,-5:0.25:5);
>> z=x.^2 – y.^2;
>> subplot(2,2,1);
>> mesh(x,y,z)
>> subplot(2,2,2);
>> surf(x,y,z)
>> subplot(2,2,3);
>> contour(x,y,z);
>> subplot(2,2,4);
>> contour3(x,y,z);
peaks es la función de 2 variables de presentación del Matlab, para graficarla use mesh, surf,
pcolor, contour, etc.
z = peaks; [x,y,z] = peaks;
z = peaks(n); [x,y,z] = peaks(n);
z = peaks(v); [x,y,z] = peaks(v);
z = peaks(x,y);
EJEMPLO
62
Matlab
EJEMPLO
>> z=peaks(20); mesh(z); shading flat; colormap(hot)
4. COORDENADAS CILÍNDRICAS
Graficar el paraboloide z x 2 y 2 en el dominio rectangular [ -5, 5 ]x[ -5, 5 ] es una
situación donde no están tan claras las propiedades geométricas del paraboloide, en
realidad en este caso es más recomendable graficar usando un dominio circular que por
ejemplo podría ser un circulo de radio 5 centrado en el origen de coordenadas. Surge la
pregunta natural, ¿cómo hacemos un mallado en el dominio circular?, el cual nos servirá
para levantar el paraboloide. La respuesta es sencilla: Solo hay que usar el cambio de
coordenadas cilíndricas a cartesianas.
COORDENADAS CILÍNDRICAS
x r cos(u )
y rsen(u ) , u [, ], r [r1, r2 ]
z z
EJEMPLO
Graficar el paraboloide z x 2 y 2 en el dominio circular de radio 5 y centrado en el
origen de coordenadas.
63
Matlab
>> [r,u]=meshgrid(0:0.25:5,0:pi/20:2*pi);
>> x=r.*cos(u);
>> y=r.*sin(u);
>> z=x.^2+y.^2;
>> surf(x,y,z)
5. COORDENADAS ESFÉRICAS
COORDENADAS ESFÉRICAS
x rsen(v)cos(u )
y rsen(v) sen(u ), u [1, 2 ], v 1, 2
z r cos(v)
EJEMPLO
Graficar parte del hemisferio superior
indicado con radio = 5.
64
Matlab
6. COORDENADAS PARAMÉTRICAS
COORDENADAS PARAMÉTRICAS EN SUPERFICIES
x x(u, v)
y y (u, v), u [u1 , u2 ], v v1 , v2
z z (u, v)
x x(t )
y y (t ), t [t1 , t2 ]
z z (t )
65
Matlab
EJEMPLO
>> cylinder(3,50) >> sphere >>ellipsoid(0,0,0,10,5,2)
EJERCICIOS DESARROLLADOS
1. Grafique usando mesh, surf, contour y contour3, z1 x 2 2 y 2
>> [x,y]=meshgrid(-3:0.2:3,-3:0.2:3);
>> mesh(x,y,x.^2-2*y.^2)
>> surf(x,y,x.^2-2*y.^2)
>> contour(x,y,x.^2-2*y.^2)
>> contour3(x,y,x.^2-2*y.^2)
66
Matlab
>> [x,y]=meshgrid(-3:0.2:3,-3:0.2:3);
>> z=floor(sin(x))+cos(y);
>> surf(x,y,z)
67
Matlab
68
Matlab
EJERCICIOS PROPUESTOS
2xy
1. Grafique usando mesh, surf, contour y contour3 z3 . Para x = 0.25:0.25:5,
x y2
2
y= 0.25:0.25:5
2. Grafique x y z 2 sen(), 0 : / 20 : 2
3. Use subplot para dividir la ventana en 1x2 para luego graficar en cada una de ellas las
siguientes curvas paramétricas (R R3).
x sen(t )
i. y sen(2t ) , t [0, 2]
z 2t
x sen(t )
b) y cos(t ) , t [0, 2]
z cos(t )
4. Grafique el Toroide
x cos(t )(4 cos(v))
y sen(t )(4 cos(v)), t [0, 2], v 0, 2
z sen(v)
69
Matlab
Las condiciones se construyen con operadores relacionales y lógicos, los cuales son:
2. PROGRAMAR EN MATLAB
Al igual que en los lenguajes de alto nivel, MATLAB permite crear programas utilizando
programación estructurada. Para ello cuenta con condicionales, bucles y funciones.
Asimismo utiliza muchos de los recursos de la programación orientada a objetos.
Pero MATLAB sólo puede ejecutar funciones (archivos- m) que estén en sus librerías
o en el directorio actual; por ello es necesario cambiar al directorio donde salvamos
nuestro archivo antes de poder ejecutarlo. Para ver en que directorio estamos se
emplea la orden “pwd”. Mientras que para cambiar de directorio de trabajo se usa
cd, por ejemplo para cambiar al directorio mio basta poner “cd C:\mio”. También es
70
Matlab
posible realizar el cambio mediante la opción “Set Path” del menú “File”, pulsando
“Browser”.
SCRIPTS
Un script se define mediante un archivo- m, el cual esta formado por un conjunto de
sentencias pero no tiene la cualidad de ser una función como y = sin(x) que posee
argumentos de salida.
FUNCIONES
Una función se define mediante un archivo- m, cuyo nombre coincide con el de la
función. La primera línea ejecutable debe tener la palabra function. Su sintaxis es
function argumentos_salida= nombre_función (argumentos_entrada)
seguida de las instrucciones necesarias. Cuando hay más de un argumento de salida,
éstos deben ir entre corchetes y separados por comas. Por ejemplo:
IMPLEMENTACIÓN DE UN PROGRAMA
Calcule el valor de la hipotenusa de un triángulo rectángulo a partir de sus dos catetos.
a) Cree un Script.
b) Cree una Función.
Solución:
a) SCRIPT.
Crear el m-archivo
Desde el menú “File”, seleccionamos “New”, y vamos a crear un nuevo archivo
eligiendo la opción “m-file”, luego digitamos el programa como sigue:
71
Matlab
b) FUNCIÓN.
Crear el m-archivo
En resumen:
PROGRAMAS EN MATLAB
Archivos
nombre.m
Script Función
Para implementar la ayuda en línea se usan las primeras líneas del fichero para
comentarios (iniciándolas con '%'), explicando cómo debe usarse la función y sus
argumentos (tanto de entrada como de salida). Así, dicha definición será visible mediante
la instrucción help nomfuncion.
EJEMPLO
Construyo el programa que calcule el perímetro del triángulo, implementando también
su ayuda.
73
Matlab
if condición
Instrucciones que deben ejecutarse si la condición es
verdadera
else
Instrucciones a ejecutar si la condición es falsa
end
74
Matlab
if condición
Instrucciones que deben ejecutarse
end
LA FUNCIÓN error.
Muestra mensajes de error.
error('message') Muestra un mensaje de error y finaliza el programa.
error('message',a1,a2, ...) Muestra un mensaje de error conteniendo formatos similar
al printf del c++ o al fprintf del Matlab y finaliza el programa.
EJEMPLO
EJEMPLO
75
Matlab
Solución:
Creación de la función.
EJEMPLO
El siguiente programa analiza si son iguales o diferentes las matrices, vectores o
números.
Ejecución:
>> A=[1 2;3 4],B=[5 6;7 8]
A=
1 2
3 4
B=
5 6
7 8
>> compara(A,B)
ans =
distintas
EJEMPLO
El siguiente programa analiza el tipo de triángulo que se tiene, dados sus tres lados, de
acuerdo con el siguiente algoritmo
a
b
76
Matlab
Creación de la función.
Desde el menú “File”, seleccionamos “New”, y vamos a crear un nuevo archivo
eligiendo la opción “m-file”, luego digitamos el programa como sigue:
function r=triangulo(a,b,c);
if nargin ~= 3
error('Número de argumentos incorrecto, debe ser 3 datos');
end
x=sort([a b c]);
if ~isempty(find(x<0))
error('Valores inconsistentes de algún lado');
end
if (x(3)>x(1)+x(2))
error('No forman un triangulo');
elseif (x(3)==x(1)+x(2))
r='Triangulo Llano';
else
if (x(1)==x(2) & x(2)==x(3))
r='Triangulo Equilatero';
return;
elseif (x(1)==x(2) | x(2)==x(3))
r='Triangulo Isosceles';
else
r='Triangulo Escaleno';
end
if (hipotenusa(x(1),x(2))==x(3))
r=[r,' rectangulo'];
end
end
77
Matlab
SENTENCIA switch
78
Matlab
Nótese que los conjuntos se delimitan con llaves y los elementos de este se separan por
comas tal como a, b, c,... , si el conjunto solo tiene un elemento no necesita colocársele
llaves.
EJEMPLO
Creando la función
79
Matlab
NOTA
Una variante donde es posible entrar notas decimales y que el programa lo redondee y
por ejemplo si Ud. Introduce 10.5 daría de resultado Aprobado – Regular, seria con el
siguiente código:
function [cond,tipo] = reporte(n);
if nargin ~= 1, error('Numero de argumentos incorrecto') ,end
if (n<0 | n>20), error('Nota incorrecta, debe ser de 0 .. 20') ,end
cond='Aprobado';
tipo='Malo';
n=round(n); %código que redondea la nota
switch n
case {0,1,2,3,4,5,6,7,8,9,10}
cond='Desaprobado';
case {11,12,13}
tipo='Regular';
case {14,15,16}
tipo='Bueno';
case {17,18,19,20}
tipo='Excelente';
end
Así si se ejecuta en la ventana de comandos, se tendrá:
>> [c,t]=reporte(10.5) >>[c,t]=reporte(13.7)
c= c=
Aprobado Aprobado
t= t=
Regular Bueno
80
Matlab
La sentencia try … catch … end permite gestionar los errores que se producen en
tiempo de ejecución. Su sintaxis es:
try
Instrucciones1
catch
Instrucciones2
end
EJEMPLO
Programa que adivina la edad.
81
Matlab
SISTEMAS DE NUMERACIÓN
Matlab permite trabajar con sistemas de numeración de base cualquiera, siempre y
cuando se disponga del Toolbox extendido de matemáticas simbólica. Además, permite
expresar los números en las diferentes bases. Las funciones de trabajo con sistemas de
numeración en diferentes bases que implementa Matlab son las siguientes:
dec2bin Convierte en número decimal especificado a base 2 (binaria)
dec2hex Convierte el número decimal especificado a base 16 (hexadecimal)
dec2base Convierte el número decimal especificado a la base indicada
bin2dec Convierte el número binario especificado a base decimal
hex2dec Convierte el número hexadecimal especificado a base decimal
base2dec Convierte el número de la base especificada a base decimal
EJEMPLO
FORMATO REPRESENTACIÓN
"formato largo" de 3 » sqrt(3);format long; ans
"formato racional" de 3 » format rat; ans
"con 10 cifras decimales" de 3 » vpa(ans,10)
"con 100 cifras decimales" de » vpa 'pi' 100
"con 20 cifras decimales" de » digits(20); vpa '173/13'
"Representación binaria" de 1234 » dec2bin(1234)
"Representación en base 10" de un valor en base 16 » base2dec(‟BF34A‟,16)
EJEMPLO
82
Matlab
VARIABLES ESPECIALES
En Matlab existen variables de uso común, cuyo valor viene ya preasignado.
pi 3.1415926535897932385… NaN Indeterminación (Not a Number, por ejemplo 0/0)
iój Unidad imaginaria ( 1 ) realmin El menor número real positivo utilizable
inf Infinito, por ejemplo 1/0 realmax El mayor número real positivo utilizable
eps Menor valor positivo que ans Variable creada automáticamente para representar
sumado a la unidad tiene el último resultado procesado que no se ha
representación diferente a 1. asignado a ninguna variable.
Indica la distancia desde 1.0 al
siguiente número en coma
flotante.
6. BUCLES
83
Matlab
EJEMPLO
Calcular con for la suma M = 1(4)(2) + 2(5)(4) + 3(6)(6) + . . .+ 20(23)(40).
Solución:
20
Expresándolo a través del símbolo de sumatoria M k (k 3)(2k )
k 1
EJEMPLO
84
Matlab
Solución:
C:\matlab7\work\ploteos.m
x1=[0:0.1:5]'; % 51 elementos
x2=[-2.5:0.1:2.5]'; % 51 elementos
x3=[-pi:pi/25:pi]'; % 51 elementos
A=[x1 x2 x3];
f=1;
for k=A
figure(f);
plot(k,sin(k));
f=f+1;
end
>> ploteos
85
Matlab
EJEMPLO
Implemente la función elevapol(p,n) la cual eleve el polinomio “p” al exponente “n”.
C:\matlab7\work\elevapol.m
function y=elevapol(p,n);
%función elevapol(p,n) la cual eleva el polinomio 'p' al exponente 'n'
pro=1;
i=1;
while i<=n
pro=conv(pro,p);
i=i+1;
end
y=pro;
Ejecución:
Si queremos elevar x 1 al exponente 4, ejecutamos en la ventana de comandos
86
Matlab
BREAK Y CONTINUE
La instrucción continue pasa el control a la iteración siguiente en el bucle for o while es
decir ignora las instrucciones que siguen al continue en el cuerpo del bucle.
La instrucción break finaliza la ejecución del bucle for o while y luego el programa
sigue fuera del bucle. Hay muchos usos para la instrucción break, uno de los bastante
usados es para salir de un bucle infinito, como por ejemplo
while (1)
…..
Bucle if (condicion)
infinito break;
end Salida del
…… bucle
end
while (condición)
…..
Bucle if (condicion)
infinito continue; Hasta el
end final
……
end
EJEMPLO
Crear una matriz aleatoria de tamaño aleatorio y dar la suma de sus columnas.
Se crea la función de suma aleatoria [A,suma]=srandom. Se graba como: srandom.m
function [A,s]=srandom;
n=1;A=[ ];s=sum(A);
while (1)
87
Matlab
if (s>4)
break;
end
A=rand(n);
s=sum(A);
n=n+1;
end
7. SUBFUNCIONES
Las funciones definidas mediante m – archivos pueden contener código para más de una
función. La función en el m – archivo se denomina función primaria, que es
precisamente la función que invoca el m – archivo. Pero adicionalmente pueden haber
subfunciones colgando de la función primaria y que sólo son visibles para dicha función
primaria o para otra subfunción dentro del mismo m – archivo. Cada subfunción
comienza con su propia línea de definición de función.
function A=funprincipal(a,b,…);
function M1=subfun1(x1,y1,…);
function M2=subfun2(x2,y2,…);
.
:
function Mn=subfunn(xn,yn,…);
88
Matlab
EJEMPLO
Implementación del programa que calcula el promedio de una colección de datos, es
decir:
[1] Media Aritmética
[2] Media Geométrica
[3] Media Armónica
C:\MATLAB7\WORK\medias.m
function r=medias(x);
n=length(x); %tamaño del vector
if ~isempty(find(x<0)) %validación de datos
error('No puede haber datos negativos');
end
disp(' PROMEDIOS ');
disp(' ========== ');
disp('[1] Media Aritmética ');
disp('[2] Media Geométrica ');
disp('[3] Media Armónica ');
disp('[4] Salir ');
op = input('Ingrese opcion ==> ');
switch (op)
case 1
disp('La Media Aritmética es:');
r=ma(x,n);
case 2
disp('La Media Geométrica es:');
r=mg(x,n);
case 3
disp('La Media Armónica es:');
r=mh(x,n);
case 4
r='Fin';return;
end
function rr=ma(x,n);
rr=sum(x)/n;
function rr=mg(x,n);
rr=prod(x)^(1/n);
function rr=mh(x,n);
rr=n/sum(1./x);
Ejecución:
>> x=[4,7,10,13] >> x=[2 -1 3 4]
89
Matlab
x= x=
4 7 10 13 2 -1 3 4
>> medias(x) >> medias(x)
PROMEDIOS ??? Error using ==> medias
========= No puede haber datos negativos
[1] Media Aritmética
[2] Media Geométrica
[3] Media Armónica
[4] Salir
Ingrese opcion:2
La Media Geométrica es:
ans =
7.7674
EJEMPLO
>> N=14;nom='Carola';fprintf('El promedio de %s es de %d',nom,N)
El promedio de Carola es de 14
>> N=14;fprintf('%d en el sistema octal es %o',N,N)
14 en el sistema octal es 16
>> ape='Hermenegildo';nom='Bush';fprintf('mi apellido es %s\nmi nombre es %s',ape,nom)
mi apellido es Hermenegildo
mi nombre es Bush
>> fprintf('La tercera parte de 22 es %0.2f',22/3)
La tercera parte de 22 es 7.33
>> fprintf('La tercera parte de 22 es %10.2f',22/3)
90
Matlab
EJEMPLO
Imprimir 10 números aleatorios y sus cuadrados.
91
Matlab
EJERCICIOS
1. Sea A una matriz de mxn y B una matriz de pxq. Implemente la función bloque(A,B)
la cual genere la matriz bloque diagonal (m+p)x(n+q).
2. Crear la función (programa) r = mmedad(n) que al ingresar la edad de la persona „n‟,
determine si es 1=„mayor de edad‟ o 0=„menor de edad‟ sin usar el comando if. Por
ejemplo cuando ejecute en la ventana de comandos:
>>r = mmedad(17)
debe dar:
r=
0
3. Escribir una función (programa) para calcular el mayor y menor lado de un triángulo
sin usar la sentencia if.
4. Implemente la función polysum(p,q) la cual sume los dos polinomios.
5. Implemente la función antidiag(A) la cual extraiga la antidiagonal de la matriz A.
Dicha función deberá mostrar un mensaje de error en caso que la matriz A no sea
cuadrada.
6. Implemente la función sgeo(x, n) para calcular la suma de los primeros n términos de
1
la serie 1 x x 2 x3 ... . Validar para que solo acepte valores de x tal que
1 x
x 1 .
7. Implemente una función aitken(n) que genere n términos de la sucesión definida por
( xn1 xn )2
yn xn
xn 2 2 xn1 xn
92