Programación Básica en Matlab para Ingenieros
Programación Básica en Matlab para Ingenieros
Programación Básica en Matlab para Ingenieros
PROGRAMACIÓN BÁSICA EN
MATLAB PARA INGENIEROS
Presentado por:
Mera Carrasco, Junior Lino
UNPRG
USAT
CHICLAYO - PERU
Acerca de este libro
El presente documento fue elaborado por mi persona luego de haber publicado con
anterioridad otros tomos. Estos últimos surgieron a partir de unos seminarios de in-
vestigación durante mi formación profesional como matemático. Dichas investigaciones
denominadas Métodos Numéricos para el Cálculo Cientı́fico con Matlab en
que por el momento a Diciembre del 2014 he concluido 4. Las cuales están disponibles
gratuitamente en mi Blog http://juniormera.blogspot.com/ y en Dropbox aunque
estos están más enfocados al desarrollo de Interfaces Gráficas de Usuarios (GUI) en
Matlab.
Estos tomos no son documentos comerciales, por el contrario decidı́ trabajar para que
se encuentre al alcance de todos. Para que tanto estudiantes como profesionales de dis-
tintos campos no tengan dificultades al idealizar sus problemas y desarrollar un modelo
matemático adecuado. Puesto que en algunos casos la aplicación resulta excesivamente
compleja o los métodos analiticos no se adecuan muy bien a sus resultados. Por ello es
conveniente el uso de métodos numéricos que conducen a soluciones aproximadas pero
manejables. Ası́ se puede dar uso a un ordenador con un software adecuado para nuestro
caso Matlab.
”Por favor, soy Rodney McKay, difı́cil tarda unos segundos. Imposible, un par de min-
utos.”Dr. Rodney McKay - Stargate Atlantis.
DEDICATORIA Y AGRADECIMIENTOS
Este libro se lo dedico a mi padre Segundo Lino cuyas enseñanzas y apoyo incondi-
cional en mis estudios nunca será olvidado. Sin duda su recuerdo es el motor que me
impulsa hacia adelante, esta publicación no hubiera sido posible sin mi familia, a mi
madre una mujer luchadora y un ejemplo de vida perdón por algunas noches no dejarte
dormir bien por tener la encendido el foco que ilumina el cuarto de computo y a mis her-
manos Diego y Luis quienes a pesar de estar en la PC me permitı́an usarla sin reclamos
para concluir este documento.
Gracias a mis amigos por sus sugerencias y por supuesto a aquellos compañeros que
encendieron la chispa que hoy concluye en esta publicación a Stefani Estela, Manuel
Hidrugo, Rossmery Dávila, Elizabeth Arrue y claro a Rafhael Vásquez por su apoyo en
la redacción.
ÍNDICE GENERAL
1. Introducción e Instalación 6
1.1. ¿Qué es Matlab? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2. Requisitos e Instalación de Matlab . . . . . . . . . . . . . . . . . . . . . 8
2. Funciones Básicas 16
2.1. Inicio con Matlab. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.2. Operaciones con números reales. . . . . . . . . . . . . . . . . . . . . . . . 17
2.3. Operaciones con números complejos. . . . . . . . . . . . . . . . . . . . . 17
2.4. Operación simbólica con números. . . . . . . . . . . . . . . . . . . . . . . 17
2.5. Variables numéricas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.6. Variables simbólicas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.7. Operaciones con infinitos. . . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.8. Visualización de resultados. . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.9. Matrices y vectores. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.9.1. Introducción y operaciones de matices numéricas . . . . . . . . . 20
2.9.2. Submatrices numéricas . . . . . . . . . . . . . . . . . . . . . . . . 22
2.9.3. Introducción y operaciones de matrices simbólicas . . . . . . . . . 22
2.9.4. Funciones matriciales . . . . . . . . . . . . . . . . . . . . . . . . . 23
2.10. Gráficas. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.10.1. Primeros Pasos . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
2.10.2. Conveniencia de los ficheros “m” . . . . . . . . . . . . . . . . . . 41
4
5
4. Programación en Matlab 69
4.1. Operadores Relacionales . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
4.2. Operadores Lógicos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
4.3. Lectura y Escritura de Variables . . . . . . . . . . . . . . . . . . . . . . . 71
4.3.1. Input . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
4.3.2. Disp . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
4.3.3. Fprintf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
4.3.4. Sprintf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 75
4.4. Sentencias en Matlab . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 76
4.4.1. Sentencias Condicionales . . . . . . . . . . . . . . . . . . . . . . . 76
4.4.2. Sentencias Iterativas . . . . . . . . . . . . . . . . . . . . . . . . . 81
5. Ejemplos Aplicativos 85
Capı́tulo 1
INTRODUCCIÓN E INSTALACIÓN
MATLAB se puede utilizar en una gran variedad de aplicaciones, tales como: Proce-
samiento de señales y comunicaciones, Procesamiento de imagen y vı́deo, Sistemas de
control, Pruebas y medidas, Finanzas computacionales y Biologı́a computacional. Más
de un millón de ingenieros y cientı́ficos de la industria y la educación utilizan MATLAB,
el lenguaje del cálculo técnico.
1. Introducción e Instalación 7
En el Cálculo numérico
MATLAB proporciona una serie de métodos de cálculo numérico para analizar datos,
desarrollar algoritmos y crear modelos. El lenguaje de MATLAB incluye funciones
matemáticas que permiten las operaciones cientı́ficas y de ingenierı́a habituales. Es-
tas funciones matemáticas principales utilizan librerı́as optimizadas por procesador a
fin de permitir una ejecución rápida de los cálculos de vectores y matrices.
Entre los métodos disponibles se encuentran:
Interpolación y regresión.
Diferenciación e integración.
Análisis de Fourier.
Matrices dispersas.
3. En este paso nos pide que ingresemos la clave del producto. Por ello seleccionare-
mos I have the File Installation Key for my license, Ubicamos la primera
clave que aparezca en nuestro instalador y la copiamos. Pegamos la clave en el
recuadro que hemos seleccionado y presionamos Next.
7. Presionamos Install.
8. Una vez alli, solo tenemos que esperar a que instalen los componentes.
1. Introducción e Instalación 13
11. Seleccionamos la opcion Provide the path to the license file y presionamos
Browse.... Ubicamos la licencia en la carpeta crack de nuestro instalador y elegi-
mos license.dat y presionamos Next.
14. Damos doble Clic al icono MATLAB R2014a y ejecutamos nuestro programa.
Capı́tulo 2
FUNCIONES BÁSICAS
Observación 2.4.1. .
radio=1, volumen
Cuando se reasigna un valor a una variable que ya existe, no se recalculan las variables
definidas a partir de ella a no ser que se vuelva a calcular de nuevo su nuevo valor.
Comenzamos limpiando nuestra área de trabajo con : clear, clc, echo, off.
1 2 3
A = [1 2 3; 4 0 3; 9 3 2] A = 4 0 3 es una matriz 3 × 3
9 3 2
1 2 3
A(2, 1) = −3 Ahora tenemos A = −3 0 3
9 3 2
2. Funciones Básicas 21
FUNCIÓN DESCRIPCIÓN
[V,D]=eig(A) Vectores propios y valores propios. V −1 AV = D
[V,D]=eigensys(A) Vectores y valores propios, versión simbólica
trace(A) Traza de A
poly(A) Coeficientes del polinomio caracterı́stico en orden
decreciente que es como los trata normalmente
charpoly(A) Versión simbólica de la anterior
orth(A) Base ortogonal de la imagen de A
null(A) Base del núcleo de A, KerA
nullspace(A) Versión numérica de la anterior
[V,J]=jordan(A) J = Forma canónica de Jordan de A y V = Matriz de paso,
es decir V −1 AV = J. Es también una orden simbólica
Nota: Se puede aplicar una orden simbólica a una matriz numérica. Pero, en dicho
caso la matriz se transforma en simbólica.
2. Funciones Básicas 25
2.10. Gráficas.
OPCIÓN MARCA
lı́nea continua OPCIÓN COLOR
- lı́nea continua r rojo
-- lı́nea de guiones y amarillo
. lı́nea punteada m magenta
-. lı́nea de guiones y puntos c turquesa
+ cruces g verde
* asteriscos b azul
. puntos w blanco
o cı́rculos k negro
x equis
Gráficas en el plano
COMANDOS DESCRIPCIÓN
bar(x,y) Gráfica barras verticales, donde y representa las frecuencias y x define
los espacios en el eje x.
barh(x,y) Gráfica barras verticales, donde x representa las frecuencias y y define
los espacios en el eje y.
stem(x,y) Gráfica bastones verticales, donde y representa las frecuencias y x define
los espacios en ele eje x
stairs(x,y) Gráfica una curva escalonada.
polar(x,y) Dibuja una curva en coordenadas polares y = y(x).
pie(x) Realiza un gráfico de sectores relativo a los valores del vector x.
rose(x) Dibuja un histograma angular relativo al vector y.
2. Funciones Básicas 27
Ejemplo:
4.5
0.5
0
−4 −3 −2 −1 0 1 2 3 4
90
1
120 60
0.8
0.4
30
0.2
>> y=cos(3*t);
180 0
>> polar(t,y)
210 330
240 300
270
2. Funciones Básicas 28
COMANDOS DESCRIPCIÓN
compass(x,y) Dibuja un conjunto de vectores con origen en (0,0), y cuya magnitud
y dirección viene determinadas por el módulo de z = x + iy.
feather(x,y) Dibuja un conjunto de vectores con origen en el eje X,
y cuya magnitud y dirección viene determinadas por el módulo de y.
fplot(’f’,[a,b]) Gráfica la función f en el intervalo [a, b].
ezplot(’f’,[a,b]) Gráfica la función f en el intervalo [a, b], adicionando un tı́tulo
por defecto.
loglog(x,y) Realiza una gráfica cartesiana con escala logaritmica en los ejes
coordenados.
semilogx(x,y) Realiza una gráfica cartesiana con escala logaritmica en el eje x y
escala normal en el eje y.
semilogy(x,y) Realiza una gráfica cartesiana con escala logaritmica en el eje y y
escala normal en el eje x.
fill(x,y,c) Dibuja una región poligonal cuyos vértices son los elementos de los
vectores columna x, y; el parametro c contiene el color a graficar.
Ejemplos:
0.8
0.6
0.4
0.2
>> fplot(’cos(x)’,[-3,3]); 0
−0.2
−0.4
−0.6
−0.8
−1
−3 −2 −1 0 1 2 3
log(x)−x+2
0.8
0.6
0.4
0.2
>> ezplot(’log(x)-x+2’,[1,4]);
0
−0.2
−0.4
−0.6
0.8
0.6
>>t=linspace(0,2*pi,9); 0.4
0.2
>>plot(cos(t),sin(t)) −0.2
0
−0.4
−0.6
−0.8
−1
−1 −0.5 0 0.5 1
0.8
0.6
>>t=linspace(0,2*pi,3000); 0.4
0.2
>>plot(cos(t),sin(t)) −0.2
0
−0.4
−0.6
−0.8
−1
−1 −0.5 0 0.5 1
Entonces, ¿qué se deduce de ello?, ¿podemos explicar como Matlab realiza los ploteos
de las funciones?
3
f ′′ (t) (1 + f ′ (t)2 ) 2
k(t) = 3 ; ρ(t) =
(1 + f ′ (t)2 ) 2 f ′′ (t)
>> t=linspace(-5,5,3000);
% divide el intervalo [-2,3] en 3000 partes.
>> y=t^2;
%imágenes de las componentes de x
7
>> x=-4*t.^3; 2
>> z=(1/2)+3*t.^2; 0
−1
−2 −1 0 1 2 3
>> plot(x,z)
>> plot(x,z),grid on
>> plot(x,z,’r’),grid on
>> t = -5:.01:5;
>> x = t; y = t.^2;
>> sum = 0;
>> for j = 1:100
dx = x(j+1) - x(j);
dy = y(j+1) - y(j);
sum = sum + abs(dx)+abs(dy);
2. Funciones Básicas 31
end
>> sum
sum = 10.0000
1.6
1.2
>> plot(x,y) 1
0.8
0.6
0.4
0.2
0
0 5 10 15 20
Ahora haremos el calculo para hallar la longitud de arco del intervalo [0, 2π] utilizando
el siguiente comando.
>> normderiv=inline(’sqrt((1-1*cos(t)).^2+(1*sin(t)).^2)’,’t’);
>> quad8(normderiv,0,2*pi)
ans = 8.0000
a3
Agnesi Agnesi la función que describe esta curva es f (x) = x2 +a2
. veamos para a=2.
El comando a utilizar será:
Cardioide Cardioide Ecuacion r = 1 + cos(θ) donde θ ∈ [0, 2π].su traza en matlab es:
Hélice
1. Hélice circular recta: Sus ecuaciones paramétricas son: x=sent, y=sent, z=t,
t ∈ [0, 10Π] . vamos a graficar la curva, usando plot3
2. Funciones Básicas 32
1.8
1.6
1.4
0.8
0.6
0.4
0.2
0
−50 0 50
90
2
120 60
>>teta=linspace(0,2*pi,60); 150 1
1.5
30
0.5
>>r=1+cos(teta); 180 0
>>polar(teta,r)
210 330
240 300
270
Representación de superficies
Matlab permite realizar gráficos en tres dimensiones, tanto de lineales como de super-
ficies; siendo sencillo crear objetos gráficos a través de los siguientes comandos. Para
ello revisaremos un documento que realizamos denominado ALGUNAS CURVAS Y
SUPERFICIES EN MATLAB:
Plot3(x,y,z) .- Dibuja el conjunto de puntos (x,y,z) en un sistema de tres dimensiones
meshgrid(x,y) .- Crea arreglos bidimensionales a partir de los arreglos x e y, para
elaborar la gráfica de una superficie explicita z=f(x,y)
contour(x,y,z) .- Gráfica las curvas de nivel de la superficie explicita z=f(x,y)
surf(x,y,z) .- Gráfica una superficie explicita z=f(x,y) con los arreglos x , y e z; pintan-
do cada una de las celdas
surfc(x,y,z) .- Gráfica una superficie explicita z=f(x,y) con los arreglos x , y e z;
Proyectando las curvas de nivel en el plano xy
surfl(x,y,z) .- Gráfica una superficie explicita z=f(x,y) con los arreglos x , y e z; con-
siderando una iluminación en formato básico
cylinder( ′ f ′ )(x,y,z) .- Gráfica una superficie de revolución generada por la rotación
2. Funciones Básicas 33
>>t=0:pi/50:10*pi; 40
30
%t=linspace(0,10*pi,2000) 20
10
>>plot3(sin(t),cos(t),t),grid on,axis Square
0
1
0.5 1
0 0.5
0
−0.5 −0.5
−1 −1
>>t=0:pi/10:10*pi; 1000
800
%(t=linspace(0,10*pi,2000)) 600
400
200
Paraboloide
6
>> [x,y]=meshgrid(-2:0.1:2);
5
>> plot3(x,y,x.^2+y.^2) 4
0
2
0 2
0 1
−2 −2 −1
>> [x,y,z]=sphere(20); 5
1
>> surf(x,y,z) 0
−1
6
4 6
2 4
2
0 0
−2 −2
>> u=linspace(0,2*pi,41);v=u;
>> [u,v]=meshgrid(u,v);
1
>> x=cos(u).*(2+cos(v)); 0
>> y=sin(u).*(2+cos(v)); −1
3
>> z=sin(v); 2
1
>> surf(x,y,z) 0
La Cinta de Möbius es una superficie que se puede construir a partir de una tira de
papel de forma rectangular ABCD. Torciendo la tira, una sola vez, de manera que se
haga coincidir el vértice A con el vértice C y el vértice B con el vértice D obteniendo la
superficie mencionada.
Se genera con la siguiente función vectorial:
r(u, v) = ( v2 sen u2 , (1 + v2 cos u2 ) sen u, (1 + v2 cos u2 ) cos u), 0 6 u 6 2π; −1 6 v 6 1
La gráfica de la cinta de Möbius se obtiene con la secuencia de comandos:
>> u=linspace(0,2*pi,30);
>> v=linspace(-1,1,15);
>> [u,v]=meshgrid(u,v); 1.5
1
>> z=(1+v/2.*cos(u/2)).*cos(u); 0.5
>> y=(1+v/2.*cos(u/2)).*sin(u); 0
−0.5
>> x=v/2.*sin(u/2); −1
0.5
>> surf(x,y,z) −1.5
2
1 0
0
−1
−2 −0.5
2. Funciones Básicas 37
>> u=linspace(0,2*pi,41);
>> v=linspace(-0.5*pi,0.5*pi,41);
>> [U,V]=meshgrid(u,v);
3
>> X=cos(U).*cos(V); 2
>> Y=sin(U).*cos(V); 1
>> Z=3*sin(V); −1
−2
1
0.8 1
0.6
0.4 0.5
axis([-1 2 -1 1 -3 3]) 0.2
0
−0.2
−0.4 −0.5
0
−0.6
−0.8
−1 −1
2. Funciones Básicas 38
>> M=moviein(30);
>> M=moviein(30); 1
0.8
>> x=[-2*pi:0.2:2*pi];
0.6
0.2
y=sin(x+j*pi/8); 0
plot(x,y); −0.2
−0.4
M(:,j)=getframe; −0.6
end −0.8
−1
−8 −6 −4 −2 0 2 4 6 8
>> movie (M,10,15)
Este ejemplo crea una pelicula de 30 imagenes (como la que se muestra), que se alma-
cenan como las columnas de la matriz M.
Una ves creada la pelicula, se puede visualizar el número de veces que se desee con
el comando movie, en el ejmplo se va a representar 10 veces pelicula anterior , a 15
imágenes por segundo (los dos ultimos parametros son opcionales).
Hay que señalar que en Matlab no es lo mismo un movie que una animación. Una
animacion es simplemente una ventana gráfica que va cambiando como consecuencia de
los comandos que se va ejecutando. Un movies es una animacion grabada o almacenada
en memoria previamente.
2. Funciones Básicas 39
>> syms t
5
>> x=cos(t);
4
>> y=sin(t); 3
z
>> z=t./(2*pi); 2
1
>> ezplot3(x,y,z,[0,10*pi],’animate’)
0
1
0.5 1
0 0.5
0
−0.5 −0.5
y −1 −1
x
Plátano:
Para modelar esta figura hemos utilizado el homeomorfismo que existe entre el elipsoide
y la figura del plátano. Es decir, simplemente hemos perturbado en alguna dirección a
alguna coordenada del elipsoide. En nuestro caso, sean las ecuaciones paramétricas del
elipsoide:
ϕ(u, v) = (cos(u). cos(v), sen(u). cos(v), 3 sen(v))
Ahora, perturbamos en la dirección de la primera coordenada para generar la gráfica
del plátano, entonces nuestra nueva ecuación serı́a la siguiente:
ϕ(u, v) = (cos(u). cos(v) + 2. sen2 (v), sen(u). cos(v), 3 sen(v))
Veamos a continuación como graficar ésta figura en Matlab:
>> u=linspace(0,2*pi,41);
>> v=linspace(-0.5*pi,0.5*pi,41); 3
>> [U,V]=meshgrid(u,v); 2
>> X=cos(U).*cos(V)+2*sin(V).^2; 0
>> Y=sin(U).*cos(V); −1
−2
>> Z=3*sin(V); −3
1
0
1.5
2
1
−0.5 0.5
0
axis([-1 2 -1 1 -3 3]) −1 −1
−0.5
2. Funciones Básicas 41
Como se habrá podido observar es bastante incómodo introducir las órdenes una a una
en la ventana de comandos, debido sobre todo, a que si nos equivocamos en una de las
órdenes tenemos que volver a imprimir la orden equivocada en el mejor de los casos o
el listado completo en el peor. Para remediar esto lo mejor es editar un fichero que se
denomina fichero m por ser ′ m′ la extensión de dicho fichero.
En esta sección vamos a aprender a editar y ejecutar un fichero “m”, pero antes vamos a
hacer unos comentarios acerca del programa Matlab. Dentro del ordenador, el programa
Matlab tiene la siguiente estructura
Archivos de programa
MATLAB
bin Carpeta fundamental(..\Matlab\bin)
help
toolbox
..
.
work Por defecto, aquı́ se guardan nuestros archivos
Mt Carpeta de Métodos(..\MATLAB*\work\Mt)
Todos los ficheros que abramos en este curso serán creados en la carpeta
work. Para recalcarlo y recordarlo, por lo menos en las primeras lecciones siempre
que hablemos de un archivo de nombre ficherito lo llamaremos work\ficherito
Vamos ahora a realizar el siguiente ejemplo que nos enseña a editar y ejecutar un fichero
“m”.
ARRAY
FUNCTION
HANDLE
Sparse
3. Tipos de datos y manejo de Funciones 44
Números enteros
>> whos x
Name size bytes class Attributes
x 1x1 2 int16
o sino mediante
Para convertir otro tipo de dato , como una cadena, a entero, puede utilizar las funciones
de conversión.
Por ejemplo , definamos la siguiente cadena:
3. Tipos de datos y manejo de Funciones 45
Luego aplicamos la función de conversión a entero int8 que convierte cada uno de los
elementos de str a entero con signo de 8 bits. Es decir, obtenemos su respectivo código
ASCII.
>> int8(str)
ans = 83 69 77 73 78 65 82 73 79
Números decimales
Matlab representa números decimales en formato simple y doble precisión. Por defecto
es de doble precisión, pero se puede convertir cualquier número a simple con una unción
de conversión.
a) Doble precisión.
Valores máximos y mı́nimos de doble precisión
Las funciones realmax y realmin retornan los valores máximos y mı́nimos que
pueden representarse con el tipo double.
>> realmax
ans= 1.7977e+308
>> -realmax
ans= -1.7977e+308
>> realmin
ans= 2.2251e-308
>> -realmin
ans= -2.2251e-308
3. Tipos de datos y manejo de Funciones 46
>> x= 18.04 ;
>> whos x
Name stize Bytes Class Attributes
x 1x1 8 double
Para verificar que un tipo de dato es decimal (o punto flotante) se hace uso de la
función isfloat.
>> isfloat(x)
ans =
1
b) Simple precisión
Valores máximos y mı́nimos de doble precisión
Las funciones realmax y realmin cuando se llaman con el argumento ’single’ retor-
nan los valores máximos y mı́nimos que pueden representarse con el tipo single.
>> realmax(’single’)
ans= 3.4028e+038
>> -realmax(’single’)
ans= -3.4028e+038
>> realmin(’single’)
ans= 1.1755e-038
>> -realmin(’single’)
ans= -1.755e-038
Números complejos
Los números complejos consisten de 2 partes separadas: una parte real y otra parte
imaginaria. La base imaginaria es la raı́z cuadrada de -1. Este es representado en MAT-
LAB por cualquiera de las 2 letras i o j.
Creación de Números Complejos
Existen 2 formas para la creación de un número complejo:
La primera es asignar a una variable un valor complejo de la forma a + bi.
>> x= 3+2i
x= 3.00000+ 2.0000i
>> y= [13 7; 2 8]
3. Tipos de datos y manejo de Funciones 49
y=
13 7
2 8
>> z=complex(x,y)
z=
10.0000+ 13.0000i 20.0000+ 7.0000i
6.0000 + 2.0000i 12.000 + 8.0000i
Para obtener la parte real e imaginaria utilizando la función real e imag, respectivamente:
>> zr=real(z)
zr=
10 20
6 12
>> zi= imag(z)
zi=
13 7
2 8
Valores especiales
Matlab usa los valores especiales inf, -inf y NaN para representar valores que son infini-
tamente positivos, negtaivos y aquellos que no son un número respectivamente.
Casos en que se retoma el valor infinito
>> x=1/0
warning: Divide by zero
x= Inf
>> x=log(0)
warning : log of zero.
x= -Inf
>> x=1.e1000
3. Tipos de datos y manejo de Funciones 50
x=Inf
>> x=exp(1000)
x= Inf
Para identificar el tipo de dato de una variable x se puede usar cualquiera de los sigu-
ientes comandos:
COMANDO OPERACIÓN
whos x visualiza el tipo de dato x
isnumeric(x) Determina si x es un tipo de dato numérico
isa(x,’integer’) Determina si x es del tipo numérico especificado
isa(x,’uint 64’) Determina si x es del tipo numérico especificado
isa(x,’float’) Determina si x es del tipo numérico especificado
isa(x,’double’) Determinar si x es del tipo numérico especificado
isa(x,’single’) Determinar si x es del tipo numérico especificado
isreal(x) Determina si x es número real o complejo
isnan(x) Determina si x no es un número (NAN)
isinf(x) Determina si x es infinito
isfinite(x) Determina si x es finito
TIPO RESULTADO
short Escala el formato a 5 digitos.
short e Escala el formato a 5 digitos. Añade la e.
short g El más conveniente de los short.
long Escala el formato a 5 digitos.
long e Escala el formato a 15 digitos. Añade la e.
long g El mas conveniente de los long.
rat En forma de fraccı́on.
hex Hexadecimal (representación en base 16)
bank Establece dos cifras decimales.
compact Suprime el exceso de lı́neas.
loose Añade mas lı́neas para que la salida sea mas legible.
>> class(curso)
ans =
char
>> ischar(curso)
ans =
1
3. Tipos de datos y manejo de Funciones 54
Cuando creamos arreglo de caracteres bidimensionales, debemos estar seguros que cada
fila tenga la misma longitud.
La siguiente matriz tiene 3 cadenas todas de 10 caracteres cada una.
>> provincias=[’1Chiclayo1’;’Lambayeque’;’1Fere~
nafe1’]
provincias =
1Chiclayo1
Lambayeque
1Fere~
nafe1
Una manera simple para crear cadenas de arreglos es usando la función char. Char
automaticamente rellena todas las cadenas a la longitud de la cadena de entrada mas
larga.
3. Tipos de datos y manejo de Funciones 55
>> provincias=char(’Chiclayo’;’Lambayeque’;’Fere~
nafe’)
provincias =
Chiclayo
Lambayeque
Fere~
nafe
>> pronvicia_mas_comercial=deblank(provincias(1,:))
pronvicia_mas_comercial =
Chiclayo
>> A{1,1}=’seminario ’;
>> A{1,2}=’aplicada ’;
>> A=deblank(A)
A =
’seminario’ ’aplicada’
Comparación de cadenas
FUNCIÓN DESCRIPCIÓN
strcmp Determina si 2 cadenas son idénticas. Reconoce mayúsculas y minúsculas.
strncmp Determina si los primeros n caracteres de 2 cadenas
son identicos. Reconoce mayúsc. y minúsc.
strcmpi Determina si 2 cadenas son idénticas. No diferencia entre
mayúsculas y minúsculas.
strncmpi Dermina si los primeros n caracteres de 2 cadenas son
idénticos. No diferencia entre mayúsculas y minúsculas.
3. Tipos de datos y manejo de Funciones 56
Las siguientes cadenas str1 y str2 no son idénticas, por lo que su comparación
devuelve el valor lógico 0 (falso)
>> str1=’hola’;
>> str2=’holla’;
>> C=strcmp(str1,str2)
C= 0
Los primeros tres caracteres de str1 y str2 son idénticos( valor lógico 1= verdad).
>> C=strncmp(str1,str2,1)
C= 1
>> C=strncmp(str1,str2,2)
C= 1
>> C=strncmp(str1,str2,3)
C= 1
>> C=strncmp(str1,str2,4)
C= 0
>> A=’Manuel’;
>> B=’Miguel’;
>> A==B
ans= 1 0 0 1 1 1
>> posicion=findstr(’28’,correccionfecha)
posicion = 11
strmatch busca a través de las filas de un arreglo de cadenas para encontrar las
cadenas que empiecen con la serie de caracteres dada. Esta función retorna los
ı́ndices de la filas que empiecen con estos caracteres.
eval: Evalúa una cadena que contiene una expresión MATLAB, sentencia o llamada a
función. Su sintaxis es : eval(’string’).
>> x=[1:5];
>> y=eval(’(x+2)./x’)
y =
3 2 5/3 3/2 7/5
>> cadena1=’sin(x*(pi/2))’;
3. Tipos de datos y manejo de Funciones 58
>> z=eval(cadena1)
z =
1 0.0000 -1 -0.0000 1
>> whos x y cadena1
Name Size Bytes Class Attributes
cadena1 1x13 26 char
x 1x5 40 double
y 1x5 40 double
COMANDO OPERACIÓN
uintN Convierte un carácter a un código entero que representa el carácter
str2num Convierte un tipo carácter a un tipo numérico
str2double Similar a strnum, pero ofrece una mayor calidad o trabaja con arreglos
celdas de cadenas.
hex2num Convierte un tipo numérico a un tipo carácter de precisión especı́fica,
retornando una cadena que MATLAB pueda evaluar.
hex2dec Convierte un tipo caracter de base hexadecimal a un entero positivo.
bin2dec Convierte un entero positivo a un tipo carácter de base binaria.
base2dec Convierte un entero positivo a un tipo carácter de cualquier base
desde 2 hasta 36.
finita de cifras, de modo que los cálculos se realizan únicamente con representaciones
aproximadas de los números verdaderos.
mantisa exponente
10,75× 100
1,075× 101
En general, un número en punto flotante puede ser expresado como ±d0 .d1 d2 d3 . . . dk ×
k
bexpo donde : d0 .d1 d2 d3 . . . dk = di β −i , di ∈ N, 0 ≤ di < β, se conoce como la
P
i=1
mantisa. (La precisión depende de k y de β)
¿ Qué se necesita para representar un número en punto flotante?
El signo del número, el signo del exponente, digitos para el exponente , dı́gitos para la
amntisa.
Dado que un número en punto flotante puede expresarse de distintas formas que son
equivalentes, es necesario establecer una unica representación. Es por ello que se trabaja
con números normalizados. Decimos que un número esta normalizado si el dı́gito a la
izquierda del punto o coma esta entre 0 y la base. En particular, decimos que un número
binario esta normalizado si el digito a la izquierda del punto es igual a 1.
1,00 × 10−1 normalizado 0,001 × 102 no normalizado
Existen varios tipos de errores, enunciaremos cuatro de ellas.
El uso de dı́gitos binarios tiende a encubrir las dificultades de cálculo que aprarecen al
usar una colección finita de números de máquina para representar a todos los números
reales. Para examinar estos problemas, supondremos , para mayor claridad, que los
números de máquina se representan en la forma de punto flotante decimal normalizada
±0.d1 d2 . . . dk × 10n , 0 ≤ di ≤ 9.
3. Tipos de datos y manejo de Funciones 61
La siguiente definicion utiliza el error relativo como una medida de las cifras significa-
tivas de precisión para una aproximación.
10−t
Definición 3.2.3. Si t es el mayor entero para el cual |p − p∗ | < 2
se dice que p∗
aproxima a p con t decimales
Con aritmetica de redondeo a cuatro cifras, considere esta fórmula aplicada a la ecuación
x2 + 62,10x + 1 = 0, cuyas raı́ces son aproximadamente
x1 = −0,01610723 y x2 = −62,08390. tenemos:
| − 0,01611 + 0,02000|
= 2,4 × 10−1 .
−0,01611
−62,10−62,06 −124,2
Por otro lado, el cálculo de x2 es: f l(x2 ) = 2,000
= 2,000
= −62,10
|−62,08+62,10|
Tiene el error relativo pequeño |−62,08|
≈ 3,2 × 10−4 .
3. Tipos de datos y manejo de Funciones 64
Para obtener una aproximación más precisa con redondeo a cuatro cifras para x1 , se
cambia la forma de la fórmula cuadrática mediante la racionalización del numerador.
√ √
−b + b2 − 4ac −b − b2 − 4ac b2 − (b2 − 4ac)
x1 = ( √ )= √ ,
2a −b − b2 − 4ac 2a(−b − b2 − 4ac)
−2c
x1 = √
b + b2 − 4ac
−2,000 −2,000
Al usarlo tenemos: f l(x1 ) = 62,10+62,06
= 124,2
= −0,01610, con el pequeño error
relativo 6,2 × 10−4 .
3. Tipos de datos y manejo de Funciones 65
FUNCIÓN DESCRIPCIÓN
sin, asin seno, arcoseno
cos, acos coseno, arcocoseno
tan, atan tangente, arcotangente
sinh, asinh seno y arcoseno hiperbólico
cosh, tanh coseno y tangente hiperbólico
abs(x), abs(z) valor absoluto de r ∈ R y módulo de z ∈ C
angle(z) argumento de z ∈ C
conj(z) conjungado de z ∈ C
real(z), imag(z) parte real e imaginaria de z ∈ C
log, log10 logaritmo neperiano y en base 10
sign(z) z/|z| si z 6= 0 y 0 si z = 0
sqrt raı́z cuadrada
ceil(r) redondea hacia infinito r ∈ R
fix(r) redondea hacia cero
floor(r) redondea hacia menos infinito
round(r) redondea hacia el entero más próximo
3. Tipos de datos y manejo de Funciones 66
FUNCIÓN DESCRIPCIÓN
sum(x) suma de las componentes de x
prod(x) análogo con el producto
[y,i]=max(x) y es la máxima componente de x e i el lugar donde ocurre
[y,i]=min(x) análogo al anterior con el mı́nimo
[y,i]=sort(x) y es la ordenación de las componentes de x de menor a mayor, i es
el vector tal que x(i) = y, i.e. la reordenación que hay que hacer
cross(v,w) producto vectorial de v, w ∈ R2
Matlab cuenta con tres tipos fundamentales de funciones: funciones escalares, a un es-
calar le asignan otro escalar pero pueden aplicarse también sobre matrices componente
a componente siendo, entonces, el resultado otra matriz del mismo orden; funciones
vectoriales, a un vector (columna o fila) le asigna un escalar y cuando se aplican sobre
una matriz le asignan un vector fila que contiene los resultados de su aplicación sobre
cada columna y las funciones matriciales las cuales están asignadas sobre matrices y su
resultado puede ser un escalar, un polinomio o también una matriz.
Las funciones matriciales más importantes ya han sido establecidas en la sección anterior.
Es importante tener en cuenta que las funciones de Matlab pueden tener dos o más
argumentos de salida, como ejemplo sirva la función [V,D]=eig(A) que a una matriz
cuadrada A le asigna los valores propios D y los vectores propios V , V −1 AV = D.
En Matlab se puede definir sus propias funciones o subrutinas y asignarle el nombre que
quiera con la misma limitación que se tiene para nombrar un fichero. Esto es ası́ porque
de hecho definir una función propia consiste sencillamente en la creación de un fichero m
que ha de tener por nombre el mismo nombre que el de la función. Para entenderlo,
hacemos la siguiente ejercicio.
3. Tipos de datos y manejo de Funciones 67
Ejemplo 3.3.1. Creamos la función de nombre 1medcd que calcula la media y la suma de
los cuadrados de los datos dados por las componentes del vector x. para ello procedemos
como sigue:
Por último, en un tercer paso comprobamos que nuestra función opera correcta-
mente, para ello vamos a la ventana de comandos y ejecutamos el siguiente listado
function y=1expn(x)
y=-sin(x).*exp(-0.4.*x);
con ello, además, conseguiremos que se nos informe del número de iteraciones necesario
y del carácter del mı́nimo.
Veamos ahora como obtener el mı́nimo local relativo de una función de varias variables,
lo cual se hace con la orden
>> fminsearch(’función’,−→
x ,opciones)
0
>> fminsearch(’sin(x(1)*x(2))’,[0,0])
ans=
1.0268 -1.5298
Capı́tulo 4
PROGRAMACIÓN EN MATLAB
MATLAB no dispone del tipo de dato boolean (true, false), si la expresión es verdadera
da como resultado 1, si es falsa da como resultado 0.
A B A&B A|B ~A
1 1 1 1 0
Ejemplo 4.2.1. 1 0 0 1 0
0 1 0 1 1
0 0 0 0 1
4. Programación en Matlab 71
4.3.1. Input
EJEMPLO :
RADIO= i n p u t ( ' I n t r o d u z c a e l r a d i o de l a c i r c u n f e r e n c i a = ' )
Introduzca el radio de la c i r c u n f e r e n c i a =
EJEMPLO :
NOMBRE= i n p u t ( ' I n g r e s e su Nombre : ' , ' s ' )
Ingrese su Nombre :
4. Programación en Matlab 72
4.3.2. Disp
EJEMPLO :
d i s p ( ' G r a c i a s por L e e r ' )
Gracias por Leer
EJEMPLO :
V =[1 2 3 4 5 ] ;
disp (V )
1 2 3 4 5
4.3.3. Fprintf
La función fprintf sirve para mostrar un mensaje o un resultado, pero que permite
mezclar texto y valores numéricos de las variables y también se puede ajustar el formato
de los números. Esta función tiene muchas posibilidades a diferencia de disp, la salida
puede tener un formato preestablecido.
RESULTADO
El valor de p i es 3.14
El valor de p i es 3 . 1 4 e+00
El valor de p i es 3 . 1 4 1 5 9 3 e+00
Ejemplo a =2.3 b =4.300000 e+00 y c =8.54 e − 1 2 . . .
1.00
2.00
3.00
4.00
5.00
1 12.00
2 24.00
3 36.00
4. Programación en Matlab 75
4.3.4. Sprintf
La función sprintf es similar a printf salvo que convierte su resultado en una cadena
de caracteres que devuelve como valor de retorno, en vez de enviarlo a un fichero.
RES =
El cuadrado de 2 . 0 0 0 0 0 0 es 4.0000
donde RES es una cadena de caracteres. Esta función constituye el método más general
de convertir números en cadenas de caracteres, por ejemplo para ponerlos como tı́tulos
de figuras.
4. Programación en Matlab 76
(a) IF
CASO 01:
Si la condición (una expresión lógica) es verdadera, se ejecutan las sentencias y sigue a
end. Si fuese falsa simplemente salta hacia end
CASO 02:
Si la condición (una expresión lógica) es verdadera, se ejecutan las sentencias 1 y si fuese
falsa se ejecutan las sentencias 2, concluye en end
CASO 03:
Si la condición (una expresión lógica) es verdadera, se ejecutan las sentencias 1 y si
cumpliera la condición de elseif se ejecutan las sentencias 2, y si no cumpliece ninguna
condicion anterior ejecutan las sentencias 3, concluye en end.
NOTA: En este caso elseif puede ser mucho más de 1 vez.
RESULTADOS
>> signoplus ( 4 )
ans =
0
>> signoplus ( 6 )
ans =
7
>> signoplus ( 1 2 )
ans =
0
(b) Switch
RESULTADO S
Ingrese un número positivo : 2
Ud . ingreso 2
NOTA: Debemos tener en cuenta que aqui no se esta validando el ingreso del valor dado
que si yo digito por ejemplo -4 el programa me respondera El número es mayor que
3.
4. Programación en Matlab 80
(b) try...catch...end
30 36 42
66 81 96
102 126 150
4. Programación en Matlab 81
(a) FOR
ó bien ,
f o r i=v e c t o r V a l o r e s
sentencias
end
donde vectorValores es un vector con los distintos valores que tomará la variable i.
Si la expresión es un vector fila, los elementos se usan uno a la vez una vez cada que se
les pasa por el bucle.
RESULTADO S :
Filas : 4
Columnas : 5
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
5 5 5 5 5
(b) WHILE
Los bucles while son similares a los bucles for. La gran diferencia es la forma en que
MATLAB decide cuántas veces repetir el bucle. Los bucles while continúan hasta que
se satisface algún criterio.
NOTA: Cuando un cálculo toma demasiado tiempo para completarse, puede confirmar
que la computadora realmente trabaja en él al observar el indicador ”busy”, en la es-
quina inferior izquierda.
(c) BREAK
Al igual que en C/C++/Java, la sentencia break hace que se termine la ejecución del
bucle for y/o while más interno de los que comprenden a dicha sentencia.
(d) CONTINUE
La sentencia continue hace que se pase inmediatamente a la siguiente iteración del bucle
for o while, saltando todas las sentencias que hay entre el continue y el fin del bucle en
la iteración actual.
EJEMPLOS APLICATIVOS
Ejemplo 5.0.1. Una llamada telefónica en cualquier teléfono público cuesta S/0.5 por
los tres primeros minutos o menos. Cada minuto adicional es un paso de contador y cues-
ta S/0.1. Haga un programa que calcule el monto a pagar por una llamada cualquiera,
ingresando a través del teclado el número de minutos.
NOTA: Para este ejemplo hemos hecho uso de los comando input, display, while, if, elseif,
else. Ası́ mismo se verificó que el numero de minutos se ingrese como entero positivo.
5. Ejemplos Aplicativos 86
Ejemplo 5.0.2. En una universidad se tiene como polı́tica considerar 3 notas en cada
curso: la nota de trabajos T, la nota de medio ciclo M y la nota de fin de ciclo F. Cada
una tiene un peso de 50 %, 20 % y 30 % respectivamente. Un alumno es calificado del
siguiente modo: BUENO si su promedio está entre 16 y 20, REGULAR si su promedio
está entre 11 y 15, MALO si su promedio está entre 6 y 10, PÉSIMO si su promedio
está entre 0 y 5, Escriba un programa en MATLAB en el cual se le den las 3 notas de
un alumno y nos indique como ha sido catalogado el alumno.
Ejemplo 5.0.3. Hacer un programa que muestre todos los números de 3 dı́gitos tales
que si invertimos sus cifras el número original aumente en 297.
Ejemplo 5.0.4. Hacer un programa que sume los cubos de los primeros 30 números
naturales que cumplen la condición de ser múltiplos de 4 y 7 a la vez.
10 10 10 10 10 10 10 10 9
10 10 10 10 10 10 10 9 8
10 10 10 10 10 10 9 8 7
10 10 10 10 10 9 8 7 6
A= 10 10 10 10 9 8 7 6 5
10 10 10 9 8 7 6 5 4
10 10 9 8 7 6 5 4 3
10 9 8 7 6 5 4 3 2
9 8 7 6 5 4 3 2 1
Ejemplo 5.0.8. Hacer un programa que muestre todos los números de cuatro dı́gitos
tales que si invertimos sus cifras el número original aumente en 3177.
v = sort(u)
El vector “v ” representa a un vector que tiene las mismas componentes del vector “u”
pero ordenadas en forma ascendente. Hacer un programa en el que se ingresa a través
del teclado un vector “u” con componentes enteras pero que le devuelva otro vector
“w ” en donde las componentes de “u” esten ordenadas en forma descendente y además
otro vector “ww ” el cual se obtenga del vector “w ” elevando al cuadrado a aquellas
componentes de “w ” que son pares y restándole 1 a aquellas componentes de “w ” que
son impares.
Ejemplo 5.0.12. Hacer un programa en MATLAB que genere una matriz B de orden
√
5x8, tal que B(k; l) = k + l si k es par ó l es par y B(k; l) = k 2 + l2 en caso contrario.
Finalmente encuentre la Suma (s) y el Promedio (p) de las componentes del vector W
f o r n =1: m
i f u ( n )<−7
w ( n )=abs ( ( u ( n ) ) ) ;
e l s e i f u ( n )>8
w ( n )=l o g ( u ( n ) ) ;
else
w ( n ) =(u ( n ) ) . ˆ 3 ;
end
end
f p r i n t f ( ' La Suma e s %7.4 f \n ' , sum ( w ) ) ;
f p r i n t f ( ' El Promedio e s %7.4 f \n ' , mean ( w ) ) ;
Ejemplo 5.0.15. Hacer un programa en el cual se ingrese a través del teclado 5 números
naturales y determine el mayor, el menor y el promedio.
Ejemplo 5.0.16. Hacer un programa en el cual se ingrese a través del teclado 3 números
enteros y los ordene en forma ascendente.
Ejemplo 5.0.17. Hacer un programa en el cual se ingresen a través del teclado dos
números enteros positivos distintos a, b y calcule por separado la suma de los números
impares y la suma de los números pares comprendidos entre ellos.
Ejemplo 5.0.19. Haga un programa que calcule la siguiente suma: 1 − 1/4 + 1/9 −
1/16 + 1/25 − 1/36 + ...; considerando en la sumatoria todos los términos que en valor
absoluto sean mayores que 5x10−5
Ejemplo 5.0.20. Haga un programa que genere una matriz C de orden 9x9 tal que
los elementos de la diagonal principal C(i; i); i = 1; ...; 9 sean iguales a 5, los que están
debajo de la diagonal sean 4 y los que están por encima de la diagonal sean iguales a 2.
leyendo a través del teclado los coeficientes a, b y c. Considere separadamente los casos
de soluciones reales y complejas.
Ejemplo 5.0.25. Liste todas las ternas (a, b, c) de números enteros entre 1 y 20 que
cumplen la propiedad pitagórica: a2 + b2 = c2 . Repita el ejercicio pero sin ternas repeti-
das.
[2] Aleman M.; Álvarez L.; Sánchez J. Análisis Numérico[en lı́nea]. [consulta 2012].
[3] Burden R.L; Faires J.D . (2001). Numerical Abalysis. Cengage Learning Latin
America.
[6] Mathews J.; Fink K.(2000) Métodos Numéricos con MATLAB. Prentice Hall,
Madrid.
[10] Nakamura, S. (1992). Metódos Numericos Aplicados con Software. Pearson Edu-
cación.
BIBLIOGRAFÍA 106
[13] Won Y. Yang , Wenwu Cao , Tae-Sang Chung , John Morris(2005) Applied Nu-
merical Methods Using MATLAB. John Wiley Sons.
[16] Morales M.(2010) Matlab R2010a Métodos Numéricos con Visualización Gráfica.
MACRO
[17] Amancio R., Orbegoso G., Muñoz G., Villalta R. (2010) Matlab 2010 - Software
para ciencia e ingenierı́a. MACRO