Está en la página 1de 106

2015

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.

Actualmente estudio Ingenierı́a Civil Ambiental y debido a que algunos compañeros


universitarios me sugierierón que desarrollase un libro pero basado en Programación,
En la presente investigación traté de ser lo más especı́fico en cada comando a utilizar,
ası́ como ejemplos prácticos. Entonces he allı́ el motivo de esta publicación, el libro lo
he tipeado en el Editor de Textos LATEX, he utilizado la versión 2014a de Matlab y lo
he dividido en 5 Capı́tulos:

En el Primer Capı́tulo hablo sobre los requisitos e instalación de Matlab en su versión


2014a, debo aclarar además que no estoy de acuerdo con la piraterı́a el uso o mal uso
del software. Por ello es de única responsabilidad del usuario, ası́ como toda institución
esta obligada a pagar sus licencias correspondientes. Luego, en el Capı́tulo 2, estudi-
aremos las Funciones Básicas de Matlab, sus comandos, entorno, manejo de variables
númericas y simbólicas, ası́ como manipulación de Vectores y Matrices concluyendo con
el uso de Gráficas. Después en el tercer capı́tulo trataremo el uso y la manipulación
de los diferentes tipos de datos, errores y definición de funciones. Continuando para
el Cuarto Capı́tulo y en mi opinión el más importante para el desarrollo veremos los
Operadores Relacionales y Lógicos, la Lectura y Escritura de Variables y el uso de las
diferentes Sentencias de programación en Matlab. Finalmente destine una gran variedad
de ejemplos y sus respectivos desarrollos para el quinto Capı́tulo, llevando a la práctica
todo lo aprendido anteriormente.

”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

3. Tipos de datos y manejo de Funciones 43


3.1. Tipos de datos. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43

4
5

3.1.1. Datos numéricos . . . . . . . . . . . . . . . . . . . . . . . . . . . 44


3.1.2. Cadena de Caracter . . . . . . . . . . . . . . . . . . . . . . . . . . 53
3.1.3. Conversión de valores numéricos a cadenas y viceversa, y entre
diferentes bases . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58
3.2. Análisis de error . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59
3.2.1. Punto flotante . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.2.2. Tipos de errores . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
3.3. Definición de funciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . 65
3.3.1. Funciones de MATLAB . . . . . . . . . . . . . . . . . . . . . . . 65
3.3.2. Definición funciones propias . . . . . . . . . . . . . . . . . . . . . 66

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

1.1. ¿Qué es Matlab?


MATLABr es un lenguaje de alto nivel y un entorno interactivo para el cálculo numéri-
co, la visualización y la programación. Mediante MATLAB, es posible analizar datos,
desarrollar algoritmos y crear modelos o aplicaciones. Asimismo El lenguaje, las her-
ramientas y las funciones matemáticas incorporadas permiten explorar diversos enfoques
para que ası́ se pueda llegar a una solución antes que con hojas de cálculo o lenguajes
de programación tradicionales, como C/C++ o JavaT M

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.

Sistemas lineales de ecuaciones.

Análisis de Fourier.

Valores propios y valores singulares.

Ecuaciones diferenciales ordinarias (EDO).

Matrices dispersas.

Los productos complementarios de MATLAB proporcionan funciones para áreas espe-


cializadas tales como estadı́stica, optimización, análisis de señales y aprendizaje au-
tomático.
1. Introducción e Instalación 8

1.2. Requisitos e Instalación de Matlab


Visitando la página de Mathworks, empresa desarrolladora de Matlab, cuya sede central
está situada en Natick, Massachusetts, Estados Unidos. Nos ofrece la siguiente informa-
ción acerca de los requisitos del sistema y el ordenador para la correcta instalación de
la version 2014a.

http : //es.mathworks.com/support/sysreq/sv − r2014a/


1. Introducción e Instalación 9

Si nuestro ordenador cumple los requisitos antes mecionados pasaremos a la instalación


de Matlab.

1. Seleccione la opción No Internet connection required y luego presione Next.

2. Acepte las condiciones seleccionando Yes y luego presione Next.


1. Introducción e Instalación 10

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.

4. Elegimos la UBICACION de nuestra Instalación y presionamos Next.


1. Introducción e Instalación 11

5. Seleccionamos lo que deseamos y luego presionamos Next.

6. Seleccionamos lo que deseamos y luego presionamos Next.


1. Introducción e Instalación 12

7. Presionamos Install.

8. Una vez alli, solo tenemos que esperar a que instalen los componentes.
1. Introducción e Instalación 13

9. Presionamos Next para activar el producto.

10. Seleccionamos la opción Activate manually without the Internet y presion-


amos Next.
1. Introducción e Instalación 14

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.

12. Si todo esta correcto presionaremos Finish.


1. Introducción e Instalación 15

13. Reemplazamos los archivos del Activador en la carpeta de Instalación y termi-


namos.

14. Damos doble Clic al icono MATLAB R2014a y ejecutamos nuestro programa.
Capı́tulo 2

FUNCIONES BÁSICAS

2.1. Inicio con Matlab.


Iniciaremos Matlab dando doble clic en el Icono de Matlab. Una vez allı́ nos apare-
cerá una ventana divida en tres partes: Ventana del Directorio Actual (Current Folder),
Ventana de Historia de Comandos (Command History) y la Ventana de Comandos
(Command Window); es en ésta última sobre la que empezaremos a digitar nuestras
órdenes.
2. Funciones Básicas 17

2.2. Operaciones con números reales.


OPERACIÓN EXPRESIÓN
Suma y resta >>8+2
>> 511-170
Multiplicación >>13.76*9
Dividido por >> 20/4
Divide a >> 20\4
Potenciación >> 2.5^6
Máximo común divisor >> gcd(124,48)
Mı́nimo común múltiplo >> lcm(20,5)
Resto de una división entera >>rem(11,4)

2.3. Operaciones con números complejos.


OPERACIÓN EXPRESIÓN
Suma y resta >> (12+7*i)+4-3*i
>> 6-i-(9+5*i)
Multiplicación >> (3+2*i)*(4+2.11*i)
Dividido por >> (4-6*i)/(3*i)
Divide a >> 3*i\(1-2*i)
Potenciación >> (7+2*i)^3
>> (1+9*i)^i

2.4. Operación simbólica con números.


OPERACIÓN EXPRESIÓN
Factorización >> factor(2012)
Suma simbólica >> sym(3+4*i)+5.34-2*i
Resta simbólica >> sym(340/56)-5/2
Multiplicación simbólica >> sym(1+2*i)*1/5
División simbólica >> sym(3647)/56
Potenciación simbólica >> sym(i)^2
2. Funciones Básicas 18

Observación 2.4.1. .

El comando sym convierte variables numéricas en simbólicas. Para volverlo numéri-


co usar el comando numeric.

Se debe tener cuidado al combinar números o variables numéricas con simbólicas.


No siempre puede funcionar muy bien.

2.5. Variables numéricas.


DATOS DE UN CILINDRO
altura=4
radio=0.5 Se puede operar con las variables. Por
volumen=altura*pi*radio^2 defecto, pi es el numero π.

area=(altura+radio)*2*pi*radio Se puede hacer varias operaciones a la


c=altura/radio vez e incluso asignar valores a nuevas
d=radio^(1/2) variables.

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.

2.6. Variables simbólicas.


a=4287, b=sym(101) sym Convierte variables numéricas en simbolicas
bb=numeric(b) numeric realiza la operación inversa a sym
d=a+b
2. Funciones Básicas 19

2.7. Operaciones con infinitos.


1/0 Inf representa el concepto tradicionalmente
representado por ∞
Inf+Inf
Inf-Inf NaN significa Not a Number
Inf/Inf
0^Inf
3^Inf
1^Inf

2.8. Visualización de resultados.


El punto y coma (;) al final de la orden hace que no se visualice el resultado.

>> Altura=1/sqrt(3); sqrt realiza la raı́z cuadrada


>> Altura Sólo se muestra una aproximación con 4 cifras decimales
>> format long, Altura Ahora se pueden ver hasta 15 cifras decimales
>> format short e, Altura Formato exponencial corto
>> format long e, Altura Formato exponencial largo

>> vpa(pi,20) Muestra el número pi con 19 cifras decimales

Observación 2.8.1. Matlab distingue entre mayúsculas y minusculas


Altura, altura, ALTuRa son tres variables distintas
2. Funciones Básicas 20

2.9. Matrices y vectores.

2.9.1. Introducción y operaciones de matices numéricas

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

Podemos reemplazar un número cualquiera por un elemento aij de la matriz como:

 
1 2 3
 
A(2, 1) = −3 Ahora tenemos A =  −3 0 3
 

 
9 3 2
2. Funciones Básicas 21

Mencionaremos algunos operaciones en matrices que se emplean en MATLAB:


b=[0.34 1+2 2^(-5)] b = (0,34, 3, 1/32) es un vector
C=[i 2+1 1/3; Otra matriz 3 × 3
4*5 1+i 1;2^(1/2) 9 1]
d=1:0.5:3 d = (1; 1,5; 2; 2,5; 3), construimos el vector d
a partir de 1 hasta 3 incrementando 0.5
size(d), size(A) Calcula el orden de las matrices d y A.
e=1:3 Cuando no hay incremento se entiende que es 1
ee=1:-0.5:-4 El incremento puede ser negativo.
A.’ Matriz traspuesta
C’ Matriz traspuesta conjugada
A+C, A-C, A*C Matriz suma, diferencia y producto de A y C
A+2, A-3+i Matriz obtenida de A sumando a cada elemento 2 y -3 + i
A*b.’ Producto de A por el traspuesto de b
A*i Multiplicamos por i cada elemento de A
A.*C Multiplicamos elemento a elemento las matrices A y C
A^2 A*A
C.^(A-6) Matriz que resulta de elevar cada coeficiente de C al
correspondiente coeficiente de A − 6
2.^A Matriz cuyo coeficiente es 2 elevado al correspondiente
coeficiente de A
inv(A) Matriz inversa de A
X=A\C X es la solución del sistema de ecuaciones A · X = C
Si A es invertible ’coincide’ con inv(A)*C
Y=A/C Y es la solución del sistemaY · C = A. En realidad,
Matlab defineA/C=(A.’\C.’)’
A./C, A.\C Matriz que resulta de dividir cada coeficiente de A
(resp. de C) por el correspondiente de C (resp. de A)
2. Funciones Básicas 22

2.9.2. Submatrices numéricas


h=[2,1], k=[2,3] Dos vectores
A(h,k) Submatriz obtenida deAquedándonos con las filas dadas
por h y las columnas dadas por k
A(2,1:2) Vector que tiene las dos primeras componentes de la
segunda fila deA
A(2,:), C(:,1) Segunda fila de A y primera columna de C
[A;b] Añadiendo la filaba la matriz A
[A,b.’] Añadiendo la columnabt a la matrizA

2.9.3. Introducción y operaciones de matrices simbólicas


 
1 3
A=sym(’[1,3;t,s]’) A=  es una matriz simbólica
t s
b=sym(’[1 2]’) Definición de un vector simbólico
c=[1 3;4/5 7/8], C=sym(c) Definición de otra matriz simbólica
D=’[1,2;e,f]’ Nota: D es una cadena de caracteres y no
una matriz simbólica
A+C, A*C Suma y producto de A y C
A*C^(-1) División de A y C
C^3 C3
A(1,2) Obteniendo el elemento a12 de la matriz A
A(1,2)=18 Haciendo que a12 valga 18
[A;b] Añadiendo la fila b a la matriz A
2. Funciones Básicas 23

2.9.4. Funciones matriciales


FUNCIÓN DESCRIPCIÓN
eye(n) Matriz identidad n × n
zeros(m,n) Matriz cero de orden m × n
ones(m,n) Matriz de unos
diag(x) Si x es un vector, el resultado es una
matriz con el vector x como diagonal principal
Si x es una matriz cuadrada, el resultado es el vector
diagonal de la matriz x
triu(A) Parte triangular superior de la matriz A
tril(A) Parte triangular inferior de la matriz A
hilb(m,n) Matriz de Hilbert de orden m × n
magic(m,n) Matriz mágica de orden m × n
rand(m,n) Matriz m × n aleatoria
vander(x) Matriz de Vandermonde construida a partir de x
sym(A) Convierte una matriz numérica en simbólica
numeric(A) Convierte una matriz simbólica en numérica
det(A) Determinante de la matriz A
determ(A) Determinante simbólico
inv(A) Inversa de la matriz A
inverse(A) Inversa simbólica
rank(A) Rango de A. Es también una orden simbólica
size(A) Orden o tamaño de la matriz A
length(A) Máximo entre el número de filas y columnas
2. Funciones Básicas 24

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.

2.10.1. Primeros Pasos

La orden : x=[1 2 3], y=[1 4 9], plot(x,y)


relaiza la representación gráfica de los puntos (1; 1), (2; 4) y (3;9) unidos por una lı́nea
recta. Matlab, por omisión, une los puntos x, y mediante un trazo recto. Si nuestra
orden hubiera sido plot(x,y,’+r’) entonces habrı́a pintado nuestros puntos x, y como
cruces rojas. La relación de posibilidades de colores y marcas es la siguiente

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

Ejemplo 2.10.1. n=1:10


a=2.^n
plot(a,’ob’)
% Para ver más opciones teclea la orden: help plot
2. Funciones Básicas 26

Ejemplo 2.10.2. Introduciendo una a una en la ventana de comandos las siguientes


órdenes obtendremos la representación gráfica de la función f (x) = sen xe−0,4x en el
intervalo [0,10].
x=0:0.05:10;
y=sin(x).*exp(-0.4.*x);
plot(x,y)
axis([0,10,-1,1]) La x valora en [0, 10] y la yen[−1, 1]
xlabel(’eje x’), ylabel(’eje y’) Rótulos en los ejes x, y
title(’Gráfica primera’) Tı́tulo de la gráfica
grid sitúa una rejilla en la gráfica
text(4,-0.1,’Mı́nimo’) Sitúa un comentario en el punto (4,-0.1)

Gráficas en el plano

Presentaremos comandos al igual del plot son de igual importancia:

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

>> x=-4:0.2:4; 3.5

>> y=abs(sin(x).^3-x); 2.5

>> plot(x,y,’o’) 1.5

0.5

0
−4 −3 −2 −1 0 1 2 3 4

90
1
120 60
0.8

>> t=0:0.1:2*pi; 150


0.6

0.4
30

0.2
>> y=cos(3*t);
180 0

>> polar(t,y)
210 330

240 300
270
2. Funciones Básicas 28

Matlab dispone de un grupo de comandos para representar formas geométricas espe-


ciales en el plano, estos se describen en la siguiente tabla.

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

Circunferencia: Sea C la semicircunferencia unitaria. Para hallar los puntos que se


obtienen al variar el parámetro t en el intervalo [0,2π], con un incremento de π/4, us-
2. Funciones Básicas 29

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

1 1.5 2 2.5 3 3.5 4


x

amos el comando LINSPACE de la manera siguiente. linspace(0,2*pi,n); donde las dos


primeras coordenadas nos indican el intervalo y la última nos indica en cuantas partes
se va a dividir el intervalo de tal manera que al hacer correr el parámetro t, nos arroje
un bosquejo de la gráfica. Siempre se recomienda colocar un número grande para dividir
el intervalo. Ubicando y uniendo los puntos en el plano cartesiano, obtenemos:

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?

Para facilitar el cálculo de curvatura y radio de curvatura, haremos uso de la sigu-


iente proposición:
2. Funciones Básicas 30

Proposición 2.10.1. Si f : I → R una función diferenciable entonces su gráfica es una


curva regular y su curvatura y radio de curvatura estan determinados por:

3
f ′′ (t) (1 + f ′ (t)2 ) 2
k(t) = 3 ; ρ(t) =
(1 + f ′ (t)2 ) 2 f ′′ (t)

Función Cuadrática Su ecuación paramétrica de dicha curva es α(t) = (t, t2 ), ∀t ∈


[a, b]
luego graficaremos su traza.

>> t=linspace(-5,5,3000);
% divide el intervalo [-2,3] en 3000 partes.
>> y=t^2;
%imágenes de las componentes de x
7

>>plot(t,y), grid on, 6

>> hold on; 4

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

Calcularemos su longitud de arco.

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

Haciendo uso de la proposición 1 anteriormente mencionada, obtenemos rápidamente la


evoluta de α(t) = (t, t2 ) es : e(t) = (−4t3 , 12 + 3t2 ) y su traza la podemos observar en
la figura anterior de color rojo.

Cicloide: La ecuación de la cicloide es α(t) = (t − sen(t), 1 − cos(t)) y si nosotros la


representamos en un intervalo [0, 6π]. El comando en matlab será:

>> t = linspace(0,6*pi); 1.8

1.6

>> x = t-sin(t); y = 1-cos(t); 1.4

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

>>f plot(’8/((x^2)+4)’,[-50,50]) 1.2

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

2. Graficar la siguiente curva con ecuaciones paramétricas:


x=t*sen(t),y=t*cos(t),z = t2 .

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

>>plot3(t.*sin(t),t.*cos(t),t.^2),grid on,axis Square 0


40
20 40
0 20
0
−20 −20
−40 −40

de la función f=f(t) en el intervalo definido para t


quiver3(x,y,z,u,v,w,c) .- Gráfica los vectores de componentes (u,v,w) en los puntos
(x,y,z),c indica el tamaño de los vectores
2. Funciones Básicas 34

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

Esfera Para poder trazar la esfera usaremos el comando Sphere


>>[x; y; z] =sphere(n) , donde n indica el número de puntos en los que queda
dividido tanto el ecuador de la esfera como el meridiano principal
>> surf(x,y,z)
Dibuja a una esfera de radio 1 y centro (0; 0; 0).Si el centro es (x0; y0; z0) y el radio r
bastarı́a poner

>> [x,y,z]=sphere(20); 5

>> x=2+3*x;y=2+3*y;z=3*z;% con 4

centro (2,2,0)y r=3 2

1
>> surf(x,y,z) 0

−1
6
4 6
2 4
2
0 0
−2 −2

Vectores normales a una esfera:


>>[x,y,z]=sphere(20); >>surfnorm(x,y,z) gráfica la esfera y los vectores en cada
punto de intersección de los paralelos con los meridianos.
2. Funciones Básicas 35

Toro de revolución Consideremos en R3 la circunferencia C = {(x, y, z)/(y−2)2 +z 2 =


1, x = 0},al rotar C alrededor del eje Z se obtiene el toro.
Una parametrización para esta curva esta dado por
ϕ(u, v) = (cos u(2 + cos v), sen u(2 + cos v), sen v), 0 6 u 6 2π; 0 6 v 6 2π
La gráfica del toro se obtiene con la secuencia de comandos:

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

>> axis([-3 3 -3 3 -1 1]) −1


3
−2 2
1
0
−1
−3 −2
−3
2. Funciones Básicas 36

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

Elipsoide: Para graficar el elipsoide simplemente se tiene e cuenta las parametrizaciones


siguientes:
ϕ(u, v) = (cos(u). cos(v), sen(u). cos(v), 3 sen(v))
. Luego, veamos como es su gráfica en Matlab.

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

>> surf(X,Y,Z) −3 1.5


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

Preparación de pelı́culas o Movies ,Matlab dispone de funciones para generar una


pelı́cula que se compone de varias imágenes, denominadas frames.
La función getframe devuelve un vector columna con la información necesaria para
reproducir la imagen que se acaba de representar en la ventana gráfica activa, el tamaño
de este vector columna depende del tamaño de la ventana,pero no de la complejidad del
dibujo.

La función moviein(n) reserva memoria para almacenar n frames.

>> M=moviein(30);
>> M=moviein(30); 1

0.8
>> x=[-2*pi:0.2:2*pi];
0.6

>> for j=1:30 0.4

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

>> axis off;


>> m=moviein(30);
>> for n=1:30;
xa=-2:0.2:2;
ya=-2:0.2:2;
[x,y]=meshgrid(xa,ya);
z=x.^2-y.^2;
surf(z);
view([-37.5+6*n 30]);
axis([0 25 0 30 -4 4]);
axis off;
m(:,n)=getframe;
end
>> movie(m,60,10)

Un ejemplo más sencillo en curvas es la siguiente animación de la hélice circular recta


(hacer correr un punto en su traza de dicha curva).
2. Funciones Básicas 40

x = cos(t), y = sin(t), z = 1/2 t/π

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

>> surf(X,Y,Z) 0.5

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

2.10.2. Conveniencia de los ficheros “m”

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)

La carpeta bin es fundamental ya que en ella se encuentra el ejecutable de Matlab.


Por defecto, en la carpeta ..\Matlab*\work se guardan todos los archivos que realice-
mos en nuestras sesiones con Matlab y es la razón que justifica que nosotros colguemos
de esta carpeta la subcarpeta Mt. En ella tendremos todos los ficheros que son nece-
sarios para ejecutar todos los listados de estas prácticas y que se caracterizan por tener
en su nombre un guión bajo ’_’. Para obtener los ficheros de la carpeta Mt deberemos
acceder al enlace de nombre ’Carpeta Mt’.
Una vez obtenida la carpeta work\Mt y con el fin de que Matlab sepa donde buscar
los ficheros en ella contenidos debemos, la primera vez, incluir dicha carpeta dentro del
’path’ de Matlab, para ello:

1. Ejecutamos en la ventana de comandos la instrucción editpath

2. En la ventana que nos aparece vamos al menú ’Path’ y seleccionamos ’Add to


Path’.
2. Funciones Básicas 42

3. En la nueva ventanita, seleccionamos la carpeta Mt y salimos dando a ’OK’.

4. Salimos de la ventana de editor del ’path’, nos preguntará si queremos conservar


los cambios para futuras sesiones y le decimos que sı́.

Es importante tener en cuenta lo siguiente:

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

Con el fin de ordenar nuestros ficheros utilizaremos como criterio a la hora de


asignar nombre a un archivo el siguiente: La primera letra de dicho archivo corre-
sponderán, respectivamente, al capı́tulo del tema correspondiente.

Vamos ahora a realizar el siguiente ejemplo que nos enseña a editar y ejecutar un fichero
“m”.

Ejemplo 2.10.3. EDICIÓN DE UN FICHERO “M”.


creamos un fichero m Para ello vamos al menú File\New\M-file
editamos Escribimos el contenido del fichero m. En esta práctica,
escribimos el listado de la práctica anterior
guardamos el fichero m Vamos al menú File\save y damos el nombre
1grafo.m al fichero que hemos editado
ejecutamos work\1grafo.m Vamos a la ventana de comandos y escribimos1grafo
Capı́tulo 3

TIPOS DE DATOS Y MANEJO DE


FUNCIONES

3.1. Tipos de datos.


A continuación se presenta un organigrama de los diferentes tipos de datos con los cuales
trabaja MATLAB.

ARRAY
FUNCTION
HANDLE

CHAR NUMERIC CELL STRUCTURE JAVA


CLASS
int8, unit8
int16, unit16
single - double
int32, unit32

Sparse
3. Tipos de datos y manejo de Funciones 44

3.1.1. Datos numéricos

Números enteros

Tipo de Dato Rango de valores Función de conversión


Entero con signo de 8 bits -2^7 a 2^7-1 int8
Entero con signo de 16 bits -2^15 a 2^15-1 int16
Entero con signo de 32 bits -2^31 a 2^31-1 int32
Entero con signo de 64 bits -2^63 a 2^31-1 int64
Entero sin signo de 8 bits 0 a 2^8-1 int8
Entero sin signo de 16 bits 0 a 2^16-1 int16
Entero sin signo de 32 bits 0 a 2^32-1 int32
Entero sin signo de 64 bits 0 a 2^32-1 int64

Ejemplo 3.1.1. >> x=int16(32767)


x= 32767

luego podemos verificar el tipo de dato de x mediante:

>> whos x
Name size bytes class Attributes
x 1x1 2 int16

o sino mediante

>> tipo x= class(x)


tipox =
int 16

si desea verificar que x es un tipo de dato entero se utiliza la función isinteger.

>> isinteger (x)


ans =
1

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

>> str= ’SEMINARIO’

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

Creación de datos de doble precisión


Como el tipo numérico por defecto de Matlab es doble precisión, entonces sólo se
requiere una simple sentencia de comandos:

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

Conversión a doble precisión


Se pueden convertir otros datos numéricos, caracteres o cadenas, y datos lógicos a
doble precisión usando la función Matlab double.

>> y=int64(-961258) ; %crea un entero de 64 bits


>> x=double(y) % convierte a doublé
x= -961258
>> whos x
Name Size Bytes Class Attributes
x 1x1 8 bouble
3. Tipos de datos y manejo de Funciones 47

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

Los números más grandes que realmax(’single’) o menores que realmin(’single’) se


les asigna valores de infinito positivo (inf) y negativo (-inf) respectivamente.

Creación de datos de simple precisión


Como el tipo de dato numérico por defecto de Matlab es doble precisión, entonces
se requiere una función de conversión single para crear un número de simple pre-
cisión.

>> x= single(13.04); % crea un tipo de dato decimal single


>> whos x
Name size Bytes Class Attributes
x 1x1 4 single
>> isfloat(x)
ans= 1
3. Tipos de datos y manejo de Funciones 48

Conversión a simple precisión


Se pueden convertir otros datos numéricos, caracteres o cadenas, y datos lógicos a
doble precisión usando la función Matlab single.

>> y=int64(-270819080303); %crea un entero de 64 bits


>> x=single(y) %convertir a single
x= -2.7082e+011
>> whos x
Name size Bytes Class Attributes
x 1x1 4 single

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

La segunda es utilizando la función complex. Se comninan 2 entradas, la primera es real


y la segunda imaginaria.

>> x=[10 20; 6 12]


x=
10 20
6 12

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

Casos en que se retoma el valor NaN


MATLAB representa valores que no son números relaes ni complejos con un valor es-
pecial NaN (Not a Number). Expresiones como 0/0 y Inf/Inf dan como resultado NaN,
por ejemplo
pi Número π = 3,01415926
exp(1) 0 a 2^16-1
Inf 0 a 2^32-1
NaN 0 a 2^32-1

Comandos que identifican el tipo de dato numérico

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

Formato de valores numéricas

A continuación se presenta los diferentes formatos que usa MATLAB en la visualización


de sus variables.
3. Tipos de datos y manejo de Funciones 51

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.

La función format cambia la visualización de los valores numéricos mostrados en la


ventana de comandos.
Esta configuración sólo afectan la forma en la que los números son visualizados, no como
MATLAB los calcula.

Format, por si sólo, cambia al formato por defecto, que es short.


Format tipo, cambia al formato especificado por tipo.
La función get(0,’format’) verifica el formato actual.

>> x=[17/6 25.786543e-3];


>> format short
>> x
x = 2.8333 0.0258
>> format short e
>> x
x = 2.8333e+000 2.5787e-002
>> format short g
>> x
x = 2.8333 0.025787
3. Tipos de datos y manejo de Funciones 52

>> format long


>> x
x = 2.833333333333334 0.025786543000000
>> format long e
>> x
x = 2.833333333333334e+000 2.578654300000000e-002
>> format long g
>> x
x = 2.83333333333333 0.025786543
>> format bank
>> x
x = 2.83 0.03
>> format rat
>> x
x = 17/6 259/10044
>> format compact
>> x
x = 17/6 259/10044
>> format loose
>> x
x = 17/6 259/10044
3. Tipos de datos y manejo de Funciones 53

3.1.2. Cadena de Caracter

En MATLAB, cadena se refiere a un arreglo de caracteres UNICODE. La cadena es un


vector, donde cada elemento de este vector es un carácter.

Creación de una cadena de caracteres (Arreglo de caracteres de 1 dimensión)

Se especifica el dato carácter ubicado a los caracteres dentro de un par de comillas


simples.

>> curso=’seminario de aplicada ’


curso =
seminario de aplicada
>> whos curso
Name Size Bytes Class Attributes
curso 1x22 44 char

Como se puede apreciar cada caracter usa 2 bytes en su almacenamiento interno.


las funciones class e ischar muestran la identidad de curso como un arreglo de carac-
terres.

>> class(curso)
ans =
char
>> ischar(curso)
ans =
1
3. Tipos de datos y manejo de Funciones 54

La función de concatenación atrcat o el operador de concatenación MATLAB[], per-


miten unir 2 o mas caracteres generando un nuevo arreglo de caracteres.

>> curso= ’seminario de aplicada’;


>> universidad=’UNPRG’;
>> strcat(universidad,’,’,curso)
ans =
UNPRG,seminario de aplicada

Para concatenar cadenas verticalmente use strvcat.

Creación de arreglos de caracteres de 2 dimensiones

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

Cuando creamos arreglos de caracteres desde cadenas de diferentes tamaños, se debe


rellenar las cadenas más cortas con espacios en blanco para forzar a que filas sean de la
misma longitud.

>> provincias=[’Chiclayo ’;’Lambayeque’;’Fere~


nafe ’]
provincias =
Chiclayo
Lambayeque
Fere~
nafe

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

La función deblank permite extraer una o más cadenas de un arreglo.

>> pronvicia_mas_comercial=deblank(provincias(1,:))
pronvicia_mas_comercial =
Chiclayo

La función deblank tambien permite remover los espacios en blanco.

>> A{1,1}=’seminario ’;
>> A{1,2}=’aplicada ’;
>> A=deblank(A)
A =
’seminario’ ’aplicada’

Comparación de cadenas

Se puede compara cadenas utilizando funciones u operadores.

a) Comparación con funciones

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

b) Comparación utilizando operadores


Se puede utilizar los operadores relacionales de MATLAB en arreglos de caracteres,
siempre que los arreglos que se están comparando tengan iguales dimensiones, o
uno sea escalar.
Todos los operadores relacionales ( >,>=,<,<=,==,~=) comparan los valores de
sus respectivos caracteres.

>> A=’Manuel’;
>> B=’Miguel’;
>> A==B
ans= 1 0 0 1 1 1

Comandos que identifican a un carácter

isletter determina si un carácter es una letra.


3. Tipos de datos y manejo de Funciones 57

>> curso=’seminario MM635’;


>> A=isletter(curso)
A= 1 1 1 1 1 1 1 1 1 0 0 0 0 0 0

isspace, determina si un carácter escun espacio en blanco (blanco, tab o nueva


linea)

Comparación que busca y reemplazan caracteres

strrep permite cambiar los caracteres de una cadena.

>> fecha=’miercoles 27/07/1821’;


>>correccionfecha=strrep(fecha,’27/07/1821’,’28/07/1821’)
correccionfecha= miercoles 28/07/1821

findstr devuelve la posición inicial de una subcadena contenida a lo largo de la


cadena.

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

Evaluación de cadenas: Función eval

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

3.1.3. Conversión de valores numéricos a cadenas y viceversa,


y entre diferentes bases
COMANDO OPERACIÓN
chard Convierte un entero positivo a su equivalente carácter
( código UNICODE). Trunca cualquier parte fraccional
int2str Convierte un entero positivo o negativo a un tipo carácter.
num2str Convierte un tipo numérico a un tipo carácter de precisión y
formato especı́fico
mat2str Convierte un tipo numérico a un tipo carácter de una
determinada precisión, retornando una cadena MATLAB que
puede ser evaluada
dec2hex Convierte un entero positivo a un tipo carácter de base
hexadecimal
dec2bin Convierte un entero positivo a un tipo carácter de base
binaria
dec2base Convierte un entero positivo aa un tipo carácter de cualquier
base 2 a 36.
3. Tipos de datos y manejo de Funciones 59

Conversión de cadenas a valores numericos

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.

3.2. Análisis de error


Cualquier problema numérico se resuelve a tráves de un algoritmo que nos proporciona
unos resultados a partir de unos datos iniciales. Es decir, se trata de realizar un proceso
del tipo: Datos ⇒ Algoritmo ⇒ Resultados

En nuestro mundo matemático permitimos la existencia de números con una canti-



dad infinita de cifras. En este mundo define a 3 como el único número positivo tal
que al multiplicarse por el mismo produce el entero 3. Sin embargo, en el mundo de las
computadoras, cada número representable tiene sólo un número finito de cifras significa

que sólo los números racionales se pueden representar con exactitud. Puesto que 3 no
es racional, se da una representacion aproximada, una cuyo cuadrado no será 3, pero si
lo bastante cercano a 3 como para ser aceptable.

Existen dos causa principales de errores en los cálculos númericos. La primera es el


error de truncamiento y la segunda es el error de redondeo. El error de truncamiento se
debe a las aproximaciones utilizadas en la fórmula matemática.
Los errores de redondeo surgen al usar una calculadora o computadora para cálculos con
números reales, pues la aritmética de la máquina sólo utiliza números con una cantidad
3. Tipos de datos y manejo de Funciones 60

finita de cifras, de modo que los cálculos se realizan únicamente con representaciones
aproximadas de los números verdaderos.

3.2.1. Punto flotante

Un punto flotante es un número que es expresado mediante un exponente y una mantisa.


Por ejemplo el número 10.75 puede ser expresado como.

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.

3.2.2. Tipos de errores

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

para cada i = 1, 2, . . . , k. Los números de esta forma se llaman números de máquina


decimales con k dı́gitos.
Cualquier número positivo real dentro del intervalo numérico de la máquina se puede
normalizar como y = 0.d1 d2 . . . dk dk+1 dk+2 . . . × 10n
La forma de punto flotante de y, que denotamos f l(y), se obtiene terminando la mantisa
de y en k cifras decimales. Hay dos formas de realizar esto.
Método 1: llamado truncamiento, consiste simplemente en cortar los digitos dk+1 dk+2 . . .
para obtener: f l(y) = 0.d1 d2 . . . dk × 10n .
Tambien corresponden a procedimientos infinitos (desarrollados en Series, etc.) como en
el caso del término del residuo del teorema de Taylor.
Método 2: llamado redondeo, suma S × 10n−(k+1) a y y luego trunca el resultado
para obtener un número de la forma f l(y) = 0.δ1 δ2 . . . δk × 10n .
Si dk+1 ≤ S, sumamos 1 a dk para obtener f l(y); esto es , redondeamos hacia arriba, si
dk+1 < S, Simplemente truncamos todo excepto los primeros k digitos; ası́, redondeamos
hacia abajo.
Observacion: Los errores de redondeo son debidos a redondeos en los cálculos porque
están hechos con un número finito de cifras significativas.
En muchas ocasiones el método de redondeo son poco significativos y no tienen ninguna
importancia. Sin embargo, en algunos problemas pueden llegar a destruir por completo
el significado de un resultado.

Ejemplo 3.2.1. El número pi (π) tiene un desarrollo decimal infinito de la forma π =


3,14159265 . . .. Escrito en forma decimal normalizada, se tiene: π = 0,314159265 . . .×101
Método 1: La forma de punto flotante de cinco digitos de n utilizando truncamiento
es:f l(π) = 0,31415 · 101 = 3,1415
Método 2: Dado que el sexto dı́gito de la expansión decimal de π es 9, la forma de π
con redondeo a cinco digitos es:
f l(π) = (0,31415 + 0,00001) · 101 = 3,1416 dk+1 ≤ 5

En la siguiente definición se describen dos métodos para medir errores de aproximación.

Definición 3.2.1. (Errores absoluto y relativo) Supongamos que el valor exacto de


un dato es p y disponemos de un valor aproximado p∗ .
3. Tipos de datos y manejo de Funciones 62

Se denomina error absoluto de p∗ a la distancia que lo separa del valor exacto p,


es decir |p − p∗ |.

Se denomina error relativo de p∗ al cociente entre el error absoluto y el objeto



evaluado, es decir, | p−p
p
|. En el caso p = 0 sólo se utiliza el error absoluto.

Consideremos los errores absolutos y relativos al representar p por p∗ en el ejemplo


siguiente.

Ejemplo 3.2.2. a. Si p = 0,3000 × 101 y p∗ = 0,3100 × 101 , el error absoluto es 0.1


y el error relativo es 0,3333̄ × 10−1

b. Si p = 0,3000 × 10−3 y p∗ = 0,3100 × 10−3 , el error absoluto es 0,1 × 10−4 y el


error relativo es 0,3333̄ × 10−1 .

c. Si p = 0,3000 × 104 y p∗ = 0,3100 × 104 , el error absoluto es 0,1 × 103 y el error


relativo es de nuevo 0,3333̄ × 10−1
Este ejemplo se muestra el mismo error relativo, para una gran variedad de errores
absolutos. Como una medida de la precisión, el error absoluto puede llevar a confusiones,
en tanto que el error relativo es más significativo, pues toma en cuenta el tamaño del
valor.

La siguiente definicion utiliza el error relativo como una medida de las cifras significa-
tivas de precisión para una aproximación.

Definición 3.2.2. El número p∗ aproxima a p con t cifras significativas si t es el mayor


entero no negativo para el cual
|p − p∗ |
< 5 × 10−t
|p|
Ejemplo 3.2.3. 1.p = 3,141592, p∗ = 3,14
|p − p∗ | 10−2
≈ 0,000507 <
|p| 2
Luego p∗ aproxima a p con 3 cifras significativas
2. p = 106 , p∗ = 999996,
|p − p∗ | 10−5
≈ 0,000004 <
|p| 2
Luego p∗ aproxima a p con 6 cifras significativas
3. Tipos de datos y manejo de Funciones 63

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

De regreso a la representación de los números en la máquina, vemos que f l(y) como


punto flotante para el número y tiene el error relativo | y−fyl(y) |.
Si se empleam K cifras decimales y el truncamiento para la representación en la máquina
de:
y = 0.d1 d2 . . . dk dk+1 . . . × 10n
0.d1 d2 ...dk dk+1 ...×10n −0.d1 d2 ...dk ×10n 0.dk+1 dk+2 ...×10n−1 0.dk+1 dk+2 ...
entonces | y−fyl(y) | = | 0.d1 d2 ...×10n
| =| 0.d1 d2 ...×10n
| =| 0.d1 d2 ...

10−k
Como d1 6= 0, el valor mı́nimo del denominador es 0.1. El numerador está acotado su-
periormente por 1. entonces:
| y−fyl(y) | ≤ 1
0,1
· 10−k = 10−k+1 (Cota de error relativo por truncamiento)
De manera similar, una Cota para el error relativo cuando se usa aritmeética con re-
dondeo a K dı́gitos es 0,5 × 10−k+1
La pérdida de precisión debida al error de redondeo se puede evitar a menudo mediante
la reformulación del problema, como se muestra en el siguiente ejemplo.

Ejemplo 3.2.4. La fórmula cuadrática establece que las raı́ces de ax2 + bx + c = 0,


cuando a 6= 0, son
√ p√
−b + b2 − 4ac −b − b2 − 4ac
x1 = y x2 =
2a 2a

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:

−62,10 + 62,06 −0,04000


f l(x1 ) = = = −0,02000.
2,000 2,000

una mala aproximación a x1 = −0,01611, con el error relativo grande

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

lo que se simplifica como una fórmula cuadrática alternativa

−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

3.3. Definición de funciones

3.3.1. Funciones de MATLAB

Damos la relación de las funciones escalares más importantes de Matlab

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

Y ahora damos la relación de las funciones vectoriales más importantes de Matlab

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.

3.3.2. Definición funciones propias

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:

Primero se edita el fichero m de listado:

function [media, cuadrado]=1medcd(x)


n=length(x);
media=sum(x)/n;
cuadrado=sum(x.^2);

En un segundo paso asignamos el nombre work\1medcd.m al fichero editado (seguimos


con nuestro criterio de recordar que debemos guardar los ficheros creados en la car-
peta de Métodos).

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

>> x=[1 2 3 4 5],


>> [xmed,cd]=1medcd(x)

obteniendo xmed=3 y cd=55.

Ejemplo 3.3.2. Definimos la funcion g(x) = − sen(x)e−0,4x con el listado

function y=1expn(x)
y=-sin(x).*exp(-0.4.*x);

y con el nombre work\1expn.m. Aprovechamos ahora para calcular su mı́nimo relativo


en el intervalo [1, 2] lo cual lo conseguimos con el comando fminbnd ejecutando en la
ventana de comandos lo siguiente
>> fminbnd(’1expn’,1,2)
obteniéndose que el mı́nimo se produce para x = 1,19028.
Si nuestra tolerancia para el error fuera de 10−8 entonces ejecutaremos
>> fminbnd(’1expn’,1,2,optimset(’TolX’,1e-8,’Display’,’iter’))
3. Tipos de datos y manejo de Funciones 68

con ello, además, conseguiremos que se nos informe del número de iteraciones necesario
y del carácter del mı́nimo.

Matlab no cuenta con la operación fmaxbnd análoga a la anterior. Si nosotros quisiéramos


hallar el máximo de una función h lo que tendrı́amos que hacer es calcular el mı́nimo
de −h.

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

que funciona de forma análoga al comando fminbnd; en este caso no se considera el


intervalo de trabajo como argumento de entrada, sino un vector −

x0 que indica el punto
en torno del cual deseamos minimizar la función.

Ejemplo 3.3.3. Minimizar la función f (x, y) = sen(xy) en un entorno del origen de


coordenadas.

>> fminsearch(’sin(x(1)*x(2))’,[0,0])
ans=
1.0268 -1.5298
Capı́tulo 4

PROGRAMACIÓN EN MATLAB

4.1. Operadores Relacionales


Los operadores relacionales son sı́mbolos que se usan para comparar dos valores. Si el
resultado de la comparación es correcto la expresión considerada es verdadera, en caso
contrario es falsa.

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.

OPERADOR NOMBRE EJEMPLO SIGNIFICADO


< Menor que a < b a es menor que b
> Mayor que a > b a es mayor que b
== Igual a a == b a es igual a b
~= no Igual a a ~= b a no es igual a b
<= Menor que ó igual a a <= b a es menor que ó igual a b
>= Mayor que ó igual a a >= b a es mayor que ó igual a b

El carácter se obtiene manteniendo pulsada la tecla Alt y pulsando en el teclado numéri-


co las teclas 126. Corresponde al carácter ASCII decimal 126.

Se debe tener cuidado en no confundir el operador asignación con el operador relacional


igual a. Las asignaciones se realizan con el sı́mbolo =, las comparaciones con ==.
4. Programación en Matlab 70

4.2. Operadores Lógicos


El resultado de una operación lógica es siempre verdadero (1) ó falso (0). Los operadores
lógicos actúan sobre expresiones lógicas o variables con valores lógicos.

MATLAB nos ofrece los siguientes operadores:

OPERADOR NOMBRE SINTAXIS


& AND (Y Lógico) A & B & ... and(A, B)
| OR (Ó Lógico) A | B | ... or(A, B)
~ NOT (Negación) ~A ... not(A)
xor EXCLUSIVE OR C = xor(A, B)

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. Lectura y Escritura de Variables


Mediante las funciones input, disp, fprintf y sprintf podremos leer variables y
visualizarlas en nuestro COMMAND WINDOW.

4.3.1. Input

Mediante el comando input se pueden asignar valores escalares, vectores y matrices a


las variables dadas, además se puede utilizar para asignar una cadena a una variable.

Listing 4.1: FORMATO NÚMERICO


n o m b r e _ v a r i a b l e=i n p u t ( ' Mensaje ' )

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 =

Listing 4.2: FORMATO PARA CADENA


n o m b r e _ v a r i a b l e=i n p u t ( ' Mensaje ' , ' s ' )

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

El comando disp se utiliza para mostrar un escalar, un mensaje (string), un vector o


una matriz tambien el contenido de una variable sin mostrar su nombre En la lı́nea de
comandos escribimos

Listing 4.3: FORMATO


d i s p ( ' Mensaje ' )

EJEMPLO :
d i s p ( ' G r a c i a s por L e e r ' )
Gracias por Leer

Listing 4.4: FORMATO VARIABLE


d i s p ( Variable )

EJEMPLO :
V =[1 2 3 4 5 ] ;
disp (V )
1 2 3 4 5

Listing 4.5: USO DE AMBOS


V =[1 2 3 4 5 ] ;
d i s p ( ' Los v a l o r e s d e l V e c to r son : ' ) ;
disp (V ) ;

Los valores del Vector son :


1 2 3 4 5
4. Programación en Matlab 73

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.

Listing 4.6: FORMATO


f p r i n t f ( ' Mensaje en forma de cadena ' )

Listing 4.7: FORMATO NÚMERICO


f p r i n t f ( ' % wi % w. b f % w . be % w . bg ' , N , M , T , U )
Donde :
w establece el ancho del campo .
b especific a el número de dı́gitos después del punto decimal .
i indica un número entero r e a l .
s indica una forma de cadena de caracteres .
d indica una forma entera .
e indica una forma exponenci a l .
f indica un número entero r e a l de forma decimal ( s i n exponente ) .
lf indica para grandes variables decimales .
g indica las dos formas e y f .
. indica el punto decimal .
−, alinea el número hacia la izquierda
+, imprime el signo (+ si es positivo y − si es negativo )
0 , a~
n ade ceros

Listing 4.8: CARACTERES ADICIONALES


Caráctere s utilizado s para controlar Ia salida .
\ n salto de lı́nea
\ r regreso de carro
\ t tabulador
\ b retroceder un espacio
\ v El tabulador vertical
\ a La alarma o carácter beep
\ e El carácter escape
\ s Cualquier carácter espacio en blanco , equivalent e al conjunto [ \ t \ f \ n \ r ]
\ x { N } El carácter con valor hexadecim a l N \ xN o
. Cualquier carácter simple ( incluyendo el espacio en blanco )
4. Programación en Matlab 74

Listing 4.9: EJEMPLO 1


f p r i n t f ( ' El s i s t e m a e s i n c o m p a t i b l e . ' )
f p r i n t f ( ' Por f a v o r : \ r \ t V e r i f i q u e l o s d a t o s . \ n ' )
f p r i n t f ( ' \ t \ bCambie l o s d a t o s . \ n ' )

El sistema es i n c o m p a t i b l e . Por favor :


Verifique los datos .
Cambie los datos .

Listing 4.10: EJEMPLO 2


f p r i n t f ( ' El v a l o r de p i e s %8.2 f \n ' , p i ) ;
f p r i n t f ( ' El v a l o r de p i e s %8.2 e \n ' , p i ) ;
f p r i n t f ( ' El v a l o r de p i e s % i \n ' , p i ) ;
a =2.3; b =4.3; c =0.00000000000854;
f p r i n t f ( ' Ejemplo a= % g b= % i y c= %1.2e . . . ' , a , b , c ) ;
x = 1:5;
f p r i n t f ( ' %8.2 f \n ' , x ) ;
pie = 1 : 3 ;
pulgada = pie . ∗ 1 2 ;
tabla = [ pie ; pulgada ] ;
f p r i n t f ( ' %4.0 f %7.2 f \n ' , tabla ) ;

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.

Listing 4.11: EJEMPLO


n =2;
RES = s p r i n t f ( ' El cuadrado de % f e s %12.4 f \n ' , n , n ∗ n )

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

4.4. Sentencias en Matlab


En el entorno de Matlab se tienen sentencias condicionales asi como las sentencias it-
erativas o repetitivas. Normalmente, las sentencias de un programa son ejecutadas en
el orden en el que aparecen. Cada sentencia es ejecutada una y solamente una vez.
MATLAB como en la mayorı́a de los lenguajes de programación, proporciona senten-
cias denominadas iterativas que permiten realizar una tarea una y otra vez hasta que
se cumpla una determinada condición, dicha tarea viene definida por un conjunto de
sentencias agrupadas en un bloque.

4.4.1. Sentencias Condicionales

(a) IF

Si la condición es verdadera, la sentencia se ejecuta, de otro modo, se salta dicha senten-


cia, continuando la ejecución del programa con otras sentencias a continuación de ésta.
La forma general de la sentencia if es:

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

Listing 4.12: FORMATO IF-END


i f condicion
sentencias
end
4. Programación en Matlab 77

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

Listing 4.13: FORMATO IF-ELSE-END


i f condicion
sentencias_1
else
sentencias_2
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.

Listing 4.14: FORMATO IF-ELSEIF-ELSE-END


i f condicion
sentencias_1
elseif
sentencias_2
else
sentencias_3
end
4. Programación en Matlab 78

Un ejemplo muy practico es la Función SIGNOPLUS la cual definiremos de la siguiente


manera:



 0 si x > 10


 x+1

si 5 < x <= 10
sgnp(x) =


 4−x si 0 < x <= 5


0 si x < 0

Listing 4.15: EJEMPLO


f u n c t i o n sgnp = signoplus ( x )
i f x>10
sgnp = 0 ;
e l s e i f 5<x & x<=10
sgnp = x +1;
e l s e i f 0<x & x<=5
sgnp = 4−x ;
else
sgnp = 0 ;
end
end

RESULTADOS
>> signoplus ( 4 )
ans =
0

>> signoplus ( 6 )
ans =
7

>> signoplus ( 1 2 )
ans =
0

>> signoplus ( −2)


ans =
0
4. Programación en Matlab 79

(b) Switch

Si analizamos el CASO 3 de la Sentencia Anterior podremos darnos cuenta que en


realidad se trata de un ingreso a diferentes casos (condiciones) concatenadas que de
manera general podrian expresarse asi:

Listing 4.16: FORMATO SWITCH


switch expresion
case exp_1
sentencias_1
case exp_2
sentencias_2
case exp_3
sentencias_3
otherwise
sentencias_4
end

Veamos el siguiente ejemplo:

Listing 4.17: EJEMPLO


N = i n p u t ( ' I n g r e s e un número p o s i t i v o : ') ;
switch N
case 1 , d i s p ( 'Ud . i n g r e s o 1 ' ) ,
case 2 , d i s p ( 'Ud . i n g r e s o 2 ' )
case 3 , d i s p ( 'Ud . i n g r e s o 3 ' )
otherwise , d i s p ( ' El número e s mayor que 3 ' )
end

RESULTADO S
Ingrese un número positivo : 2
Ud . ingreso 2

Ingrese un número positivo : 4


El número es mayor que 3

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

La construcción try...catch...end permite gestionar los errores que se pueden producir en


tiempo de ejecución.

Listing 4.18: FORMATO


try
sentencias 1
catch msjerror
sentencias 2
end

En el caso de que durante la ejecución del bloque sentencias1 se produzca un error, el


control de la ejecución se transfiere al bloque sentencias2. Si la ejecución transcurriera
normalmente, sentencias2 no se ejecutarı́a nunca.
Veamos el siguiente ejemplo:

Listing 4.19: EJEMPLO


>>try
X =[1 2 3 ; 4 5 6 ; 7 8 9 ] ∗ [ 1 2 3 ; 4 5 6 ]
catch
d i s p ' ∗∗ E r r o r en Producto '
end
RESULTADO S
∗∗ Error en Producto

Listing 4.20: EJEMPLO 2


>>try
X =[1 2 3 ; 4 5 6 ; 7 8 9 ] ∗ [ 1 2 3 ; 4 5 6 ; 7 8 9 ]
catch
d i s p ' ∗∗ E r r o r en Producto '
end
RESULTADO S
X =

30 36 42
66 81 96
102 126 150
4. Programación en Matlab 81

4.4.2. Sentencias Iterativas

(a) FOR

La sentencia for repite un conjunto de sentencias un número predeterminado de veces.


La sentencia for de MATLAB es muy diferente y no tiene la generalidad de la sentencia
for de C/C++/Java. La siguiente construcción ejecuta sentencias con valores de i de 1
a n, variando de uno en uno.

Listing 4.21: FORMATO


f o r i =1: n
sentencias
end

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

Listing 4.22: FORMATO


f o r indice = inicial : increment o : final

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.

Listing 4.23: EJEMPLO 1


% E s c r i b i r un programa que imprima l o s 10 p r i m e r o s n úmeros e n t e r o s empezando por e l ←֓
cero .
f or k = 0:9
disp ( k)
end
4. Programación en Matlab 82

Listing 4.24: EJEMPLO 2


% E s c r i b i r un b u c l e f o r que imprima l o s n úmeros p a r e s p o s i t i v o s menores o i g u a l e s que←֓
20 en o r d e n d e c r e c i e n t e
f o r k =20: −2:0
disp ( k)
end

Listing 4.25: EJEMPLO 3


% E s c r i b i r un b u c l e f o r que imprima una M a tr i z c u y o s e l e m e n t o s son i g u a l e s a l maximo ←֓
entre f i l a s y columnas
m=i n p u t ( ' F i l a s : ') ;
n=i n p u t ( ' Columnas : ') ;
x=z e r o s ( m , n ) ;
f o r i =1: m
f o r j =1: n
x ( i , j )=max( m , n ) ;
end
end
disp (x )

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.

Listing 4.26: FORMATO


w h i l e condicion
sentencia s
end
4. Programación en Matlab 83

Listing 4.27: EJEMPLO 1


% E s c r i b i r un programa que imprima l o s 10 p r i m e r o s n úmeros e n t e r o s empezando por e l ←֓
cero .
k =0;
w h i l e k<10
disp ( k)
k=k +1;
end

Listing 4.28: EJEMPLO 2


% E s c r i b i r un programa que imprima l o s n úmeros p a r e s p o s i t i v o s menores o i g u a l e s que ←֓
20 en o r d e n d e c r e c i e n t e
k =20;
w h i l e k>=0
disp ( k)
k=k −2;
end

Listing 4.29: EJEMPLO 2


% E s c r i b i r un programa que v a l i d e e l i n g r e s o de un tamaño de un v e c t o r s i e n d o e n t e r o ←֓
mayor a 10
m=i n p u t ( ' I n g r e s e e l tamaño d e l V e c to r : ' ) ;
w h i l e ( f l o o r ( m )˜=m | m <10)
display ( ' Debe s e r e n t e r o mayor a 10 ' )
m=i n p u t ( ' I n g r e s e e l tamaño d e l V e c to r : ' ) ;
end
f p r i n t f ( ' El tamaño d e l V e c to r e s % d \n ' , m ) ;

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.

Si se desea salir manualmente de un cálculo, teclee CRTL + C


4. Programación en Matlab 84

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

Listing 4.30: EJEMPLO 2


n=0 ;
w h i l e ( n <10)
n=n+1 ;
a=i n p u t ( ' I n g r e s e un v a l o r mayor que 0 : ' ) ;
i f ( a<=0)
d i s p ( ' Debe i n g r e s a r un número p o s i t i v o ' )
d i s p ( ' E s te programa t e r m i n a r á ' )
break
end
d i s p ( ' El cubo de e s t e número e s : ' )
d i s p ( a ˆ3)
end

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

Listing 4.31: EJEMPLO 2


n=0 ;
w h i l e ( n <10)
n=n+1 ;
a=i n p u t ( ' I n g r e s e un v a l o r mayor que 0 : ' ) ;
i f ( a<=0)
d i s p ( ' Debe i n g r e s a r un número p o s i t i v o ' )
d i s p ( ' I n t e n t e de nuevo ' )
continue
end
d i s p ( ' El cubo de e s t e número e s : ' )
d i s p ( a ˆ3)
end
Capı́tulo 5

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.

Listing 5.1: SOLUCIÓN


clc
clear all
t=i n p u t ( ' I n g r e s e e l número de minutos de l a l l a m a d a : ')
w h i l e ( t<0 | f l o o r ( t )˜=t )
display ( ' Debe s e r e n t e r o p o s i t i v o ' )
t=i n p u t ( ' I n g r e s e e l número de minutos de l a l l a m a d a : ')
end
i f t==0
pago =0;
e l s e i f 0<t & t<=3
pago = 0 . 5 ;
else
pago =0.5+0.1∗( t −3) ;
end
f p r i n t f ( ' El Costo de l a l l a m a d a e s %7.2 f \n ' , pago ) ;

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.

Listing 5.2: SOLUCIÓN


clc
clear all
T=i n p u t ( ' I n g r e s e l a Nota de T r a b a j o s : ')
w h i l e ( T<0 | T >20)
display ( ' La C a l i f i c a c i o n debe e s t a r e n t r e 0 y 20 ' )
T=i n p u t ( ' I n g r e s e l a Nota de T r a b a j o s : ')
end
M=i n p u t ( ' I n g r e s e l a Nota de Medio C i c l o : ')
w h i l e ( M<0 | M >20)
display ( ' La C a l i f i c a c i o n debe e s t a r e n t r e 0 y 20 ' )
M=i n p u t ( ' I n g r e s e l a Nota de Medio C i c l o : ')
end
F=i n p u t ( ' I n g r e s e l a Nota de Fin de C i c l o : ')
w h i l e ( F<0 | F >20)
display ( ' La C a l i f i c a c i o n debe e s t a r e n t r e 0 y 20 ' )
F=i n p u t ( ' I n g r e s e l a Nota de Fin de C i c l o : ')
end
Promediof =0.5∗ T +0.20∗ M +0.30∗ F
Promedio=round ( Promediof ) %round r e d o n d e a e l Promediof
i f 16<=Promedio&Promedio <=20
display ( 'EL ALUMNO ES BUENO ' )
e l s e i f 11<=Promedio & Promedio <=15
display ( 'EL ALUMNO ES REGULAR ' )
e l s e i f 6<=Promedio & Promedio <=10
display ( 'EL ALUMNO ES MALO' )
else
display ( 'EL ALUMNO ES PÉSIMO ' )
end
5. Ejemplos Aplicativos 87

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.

Listing 5.3: SOLUCIÓN


clc
clear all
s =0;
v ( 1 ) =0;
f o r n =100:999
c= f l o o r ( n / 1 0 0 ) ;
d = f l o o r ( ( n −100∗c ) / 1 0 ) ;
u= n −100∗c −10∗d ;
n u m e r o _ i n v e r t i d o= 100∗ u + 10∗ d + c ;
i f n u m e r o _ i n v e r t i d o == n + 297
s= s +1;
v ( s )= n ;
end
end
v

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.

Listing 5.4: SOLUCIÓN


clear all
clc
f o r i =1:30;
B =(28∗ i ) ˆ 3 ;
X ( i )=B ;
end
C=sum ( X )

Ejemplo 5.0.5. Programar un menú matemático simple. Se ha de ingresar un número


entero A por medio del teclado y luego el usuario debe escoger una opción entre 4. Si la
opción es 1, deberá hallar el valor absoluto del número. Si la opción es 2, deberá elevar
al cuadrado el número . Si la opción es 3, deberá elevar al cubo el número. Si la opción
es 4, deberá hallar el factorial del número
5. Ejemplos Aplicativos 88

Listing 5.5: SOLUCIÓN


clc ,
clear
A=i n p u t ( ' I n g r e s e un Número Entero : ')
w h i l e ( f l o o r ( A )˜=A )
display ( ' Debe s e r e n t e r o ' )
A=i n p u t ( ' I n g r e s e un Número Entero : ')
end
opcion=menu ( ' S e l e c c i o n e l a o p c i ó n d e s e a d a : ' , ' V a l o r A b s o l u to ' , ' Cuadrado d e l número ' , ' ←֓
Cubo d e l número ' , ' F a c t o r i a l d e l v a l o r a b s o l u t o ' )
switch opcion
case 1
abs ( A )
case 2
A ˆ2
case 3
A ˆ3
case 4
factorial ( abs ( A ) )
end

Ejemplo 5.0.6. Haga un programa en MATLAB que genere la siguiente matriz.


 
3 3 3 3 3 3
 
 3 1 1 1 1 3 
 
 
 3 1 1 1 1 3 
 
A= 
 3 1 1 1 1 3 
 
 
 3 1 1 1 1 3 
 
 
3 3 3 3 3 3

Listing 5.6: SOLUCIÓN


clc
clear all
D=ones ( 6 ) ;
f o r m =1:6
f o r n =1:6
i f min ( m , n )==1 | | max( m , n )==6
D ( m , n ) =3;
end
end
end
D
5. Ejemplos Aplicativos 89

Ejemplo 5.0.7. Haga un programa en MATLAB que genere la siguiente matriz.

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

Listing 5.7: SOLUCIÓN


clc
clear all
D=z e r o s ( 9 )
f o r i =0:8
f o r m =1:9
f o r n =1:9
i f n+m<=9
D ( m , n ) =10;
e l s e i f ( n<=m | n>=m ) & n+m==10+i
D ( m , n )=9−i ;
end
end
end
end
D
5. Ejemplos Aplicativos 90

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.

Listing 5.8: SOLUCIÓN


clc
clear all
s =0;
v ( 1 ) =0;
f o r n =1000:9999
a= f l o o r ( n / 1 0 0 0 ) ;
b = f l o o r ( ( n −1000∗ a ) / 1 0 0 ) ;
c = f l o o r ( ( n −1000∗ a −100∗b ) / 1 0 ) ;
d= n− 1000∗ a −100∗b −10∗c ;
n u m e r o _ i n v e r t i d o= 1000∗ d + 100∗ c + 10∗ b+ a ;
i f n u m e r o _ i n v e r t i d o == n + 3177
s = s + 1;
v(s) = n ;
end
end
v
5. Ejemplos Aplicativos 91

Ejemplo 5.0.9. Si u representa a un vector y usted escribe en MATLAB

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.

Listing 5.9: SOLUCIÓN


clear all
clc
m=i n p u t ( ' I n g r e s e e l tamaño d e l V e c to r : ')
w h i l e ( m<=0 | f l o o r ( m )˜=m )
display ( ' Debe s e r e n t e r o p o s i t i v o ' )
m=i n p u t ( ' I n g r e s e e l tamaño d e l V e c to r : ')
end
f o r n =1: m
u ( n )=i n p u t ( ' I n g r e s a r componente = ' ) ;
w h i l e ( u ( n )<0 | f l o o r ( u ( n ) )˜=u ( n ) )
display ( ' Los n úmeros deben s e r e n t e r o s p o s t i v o s ' )
u ( n )=i n p u t ( ' I n g r e s a r número = ' ) ;
end
end
t = sort (u) ;
f o r n =1: m
w ( n )=t ( m+1−n ) ;
end
f o r n =1: m
i f rem ( w ( n ) , 2 )==0
ww ( n ) =(w ( n ) ) ˆ 2 ;
else
ww ( n ) =(w ( n ) ) −1;
end
end
w
ww
5. Ejemplos Aplicativos 92

Ejemplo 5.0.10. Si a1 = 3, a2 = 5 y a3 = 7, , definimos:

an = an−1 + 2an−2 + 3an−3 ; para n ≧ 4

Hacer un programa en MATLAB que calcule la siguiente suma:


30
X
an
n=1

Listing 5.10: SOLUCIÓN


clc
clear all
V =[3 5 7 ]
f o r k =4:30
V ( k )=V ( k −1)+2∗V ( k −2)+3∗V ( k −3) ;
end
V;
s=sum ( V )

Ejemplo 5.0.11. Haga un programa en MATLAB que genere la siguiente matriz.


 
6 6 6 6 6 6 6 6 6 6 6
 
 0 5 5 5 5 5 5 5 5 5 0 
 
 
 0 0 4 4 4 4 4 4 4 0 0 
 
 
 0 0 0 3 3 3 3 3 0 0 0 
 
 
 0 0 0 0 2 2 2 0 0 0 0 
 
 
A= 0 0 0 0 0 1 0 0 0 0 0 
 
 
 0 0 0 0 0 0 0 0 0 0 0 
 
 
 0 0 0 0 0 0 0 0 0 0 0 
 
 
 
 0 0 0 0 0 0 0 0 0 0 0 
 
 
 0 0 0 0 0 0 0 0 0 0 0 
 
0 0 0 0 0 0 0 0 0 0 0
5. Ejemplos Aplicativos 93

Listing 5.11: SOLUCIÓN


clc
clear all
D=z e r o s ( 1 1 ) ;
f o r m =1:11
f o r n =1:11
i f ( m>n | | m+n >12)
D ( m , n ) =0;
e l s e i f m<7
D ( m , n )=7−m ;
end
end
end
D

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.

Listing 5.12: SOLUCIÓN


clear all
clc
B=rand ( 5 , 8 ) ;
f o r k =1:5;
f o r l =1:8;
i f ( rem ( k , 2 ) ==0|rem ( l , 2 ) ==0) ;
B ( k , l )=s q r t ( k+l ) ;
e l s e B ( k , l )=kˆ2+l ˆ 2 ;
end
end
end
B

Ejemplo 5.0.13. Hacer un programa en MATLAB en el cual se ingrese un vector u


con más de 10 componentes usando input y devuelva otro vector W en donde las com-
ponentes se obtengan del siguiente modo:

a) Aplique el valor absoluto a las componentes negativas de u menores que -7.


b) Aplique el logaritmo natural a las componentes de u que son positivas y mayores que
8.
c) Eleve al cubo a las componentes de u restantes.
5. Ejemplos Aplicativos 94

Finalmente encuentre la Suma (s) y el Promedio (p) de las componentes del vector W

Listing 5.13: SOLUCIÓN


clear all
clc
m=i n p u t ( ' I n g r e s e e l tamaño d e l V e c to r : ' ) ;
w h i l e ( f l o o r ( m )˜=m | m <10)
display ( ' Debe s e r e n t e r o mayor a 10 ' )
m=i n p u t ( ' I n g r e s e e l tamaño d e l V e c to r : ' ) ;
end
f o r n =1: m
u ( n )=i n p u t ( ' I n g r e s a r componente = ' ) ;
end

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.14. Hacer un programa en MATLAB en el cual genere la siguiente Matriz:


 
8 8 8 8 8 8 8 8 8 8
 
 8 1 1 1 1 1 1 1 1 8 
 
 
 8 1 8 8 8 8 8 8 1 8 
 
 
 8 1 8 1 1 1 1 8 1 8 
 
 
 8 1 8 1 8 8 1 8 1 8 
 
A=  
 8 1 8 1 8 8 1 8 1 8 

 
 8 1 8 1 1 1 1 8 1 8 
 
 
 
 8 1 8 8 8 8 8 8 1 8 
 
 
 8 1 1 1 1 1 1 1 1 8 
 
8 8 8 8 8 8 8 8 8 8
5. Ejemplos Aplicativos 95

Listing 5.14: SOLUCIÓN


clc
clear all
D=ones ( 1 0 ) ;
f o r m =1:10
f o r n =1:10
i f min ( m , n ) ==1||max( m , n )==10
D ( m , n ) =8;
elseif ( ( min ( m , n ) ==3||max( m , n )==8) && min ( m , n )>=3 && max( m , n )<=8)
D ( m , n ) =8;
e l s e i f ( m+n>=10 && min ( m , n )>=5 && max ( m , n )<=6)
D ( m , n ) =8;
end
end
end
D

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.

Listing 5.15: SOLUCIÓN


clc
clear all
f o r n =1:5
v ( n )=i n p u t ( ' I n g r e s a r número = ' ) ;
w h i l e ( v ( n )<0 | f l o o r ( v ( n ) )˜=v ( n ) )
display ( ' Los n úmeros deben s e r n a t u r a l e s ' )
v ( n )=i n p u t ( ' I n g r e s a r número = ' ) ;
end
end
f p r i n t f ( ' El número mayor e s % d \n ' , max( v ) ) ;
f p r i n t f ( ' El número menor e s % d \n ' , min ( v ) ) ;
f p r i n t f ( ' El promedio e s %7.3 f \n ' , sum ( v ) / 5 ) ;
5. Ejemplos Aplicativos 96

Listing 5.16: SOLUCIÓN 2


clc
clear all
f o r n =1:5
v ( n )=i n p u t ( ' I n g r e s a r número = ' ) ;
w h i l e ( v ( n )<0 | f l o o r ( v ( n ) )˜=v ( n ) )
display ( ' Los n úmeros deben s e r n a t u r a l e s ' )
v ( n )=i n p u t ( ' I n g r e s a r número = ' ) ;
end
end
v=s o r t ( v ) ;
f p r i n t f ( ' El número mayor e s % d \n ' , v ( n ) ) ;
f p r i n t f ( ' El número menor e s % d \n ' , v ( 1 ) ) ;
f p r i n t f ( ' El promedio e s %7.3 f \n ' , sum ( v ) / 5 ) ;

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.

Listing 5.17: SOLUCIÓN


clc
clear all
f o r n =1:3
v ( n )=i n p u t ( ' I n g r e s a r número = ' ) ;
w h i l e ( f l o o r ( v ( n ) )˜=v ( n ) )
display ( ' Los n úmeros deben s e r e n t e r o s ' )
v ( n )=i n p u t ( ' I n g r e s a r número = ' ) ;
end
end
f o r r =1: n
f o r s=r +1: n
i f v ( r )>v ( s )
x=v ( r ) ;
v ( r )=v ( s ) ;
v ( s )=x ;
end
end
end
display ( ' Los n úmeros o r d e n a d o s son : ' )
v
5. Ejemplos Aplicativos 97

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.

Listing 5.18: SOLUCIÓN


clear all
clc
suma =0;
a=i n p u t ( ' a : ' ) ;
w h i l e ( f l o o r ( a )˜=a | a <0)
display ( ' a debe s e r e n t e r o s p o s i t i v o s ' )
a=i n p u t ( ' a : ' ) ;
end
b=i n p u t ( ' b : ' ) ;
while ( f l o o r ( b )˜=b | b<0 | b<=a )
display ( ' b debe s e r e n t e r o p o s i t i v o mayor de a ' )
b=i n p u t ( ' b : ' ) ;
end
f o r v =[ a : b ]
i f ( rem ( v , 2 ) ==0)
suma=suma +1;
x ( suma )=v ;
e l s e suma=suma +1;
w ( suma )=v ;
end
end
f p r i n t f ( ' La suma de l o s numeros p a r e s e s % d \n ' , sum ( x ) ) ;
f p r i n t f ( ' La suma de l o s numeros i m p a r e s e s % d \n ' , sum ( w ) ) ;
5. Ejemplos Aplicativos 98

Ejemplo 5.0.18. Hacer un programa en MATLAB en el cual genere la siguiente Matriz:


 
6 1 1 1 1 1 1 1 1 6
 
 0 6 1 1 1 1 1 1 6 0 
 
 
 0 0 6 1 1 1 1 6 0 0 
 
 
 0 0 0 6 1 1 6 0 0 0 
 
 
 0 0 0 0 6 6 0 0 0 0 
 
A= 
 0 0 0 0 6 6 0 0 0 0 
 
 
 0 0 0 6 1 1 6 0 0 0 
 
 
 0 0 6 1 1 1 1 6 0 0 
 
 
 
 0 6 1 1 1 1 1 1 6 0 
 
6 1 1 1 1 1 1 1 1 6

Listing 5.19: SOLUCIÓN


clc
clear all
D=z e r o s ( 1 0 ) ;
f o r m =1:10
f o r n =1:10
if m==n | | m+n==11
D ( m , n ) =6;
e l s e i f n+m<11 && m<n
D ( m , n ) =1;
e l s e i f n+m>11 && m>n
D ( m , n ) =1;
end
end
end
D

Listing 5.20: SOLUCIÓN 2


clear all
clc
A=t r i u ( ones ( 5 , 5 ) ) +5∗ e y e ( 5 ) ;
vertcat ( horzcat ( A , r o t 9 0 ( A ) ) , horzcat ( r o t 9 0 ( A ' ) , A ' ) )
5. Ejemplos Aplicativos 99

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

Listing 5.21: SOLUCIÓN


clc
clear all
n =1;
w h i l e abs (( −1) ˆ ( n −1) / n ˆ 2 ) >5∗10ˆ−5
v ( n ) =(−1) ˆ ( n −1)/ n ˆ 2 ;
n=n +1;
end
f p r i n t f ( ' La s u m a to r i a de l a s e r i e e s %4.6 f \n ' , sum ( v ) ) ;

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.

Listing 5.22: SOLUCIÓN


clear
clc
f o r i =1:9;
f o r j =1:9;
i f ( i==j )
A ( i , j ) =5;
e l s e i f ( i>j )
A ( i , j ) =4;
e l s e A ( i , j ) =2;
end
end
end
A
5. Ejemplos Aplicativos 100

Ejemplo 5.0.21. Hacer un programa en MATLAB que genere las matrices A y B,


donde,
A6x6 = (ars ) y ars = r 2 − s2
B6x6 = (brs ) y brs = 2r − 3s
y además obtenga C = (3A − 2B)2

Listing 5.23: SOLUCIÓN


clear all
clc
f o r r =1:6
f o r s =1:6
A ( r , s )=rˆ2−s ˆ 2 ;
B ( r , s ) =2∗r−3∗s ;
end
end
A
B
C =(3∗ A−2∗B ) ˆ2

Ejemplo 5.0.22. Los vértices consecutivos de un octógono irregular consisten en 8-


parejas (xk ; yk ); k = 1; :::; 8. Suponga que se dispone de una matriz P de orden 2x8
cuyas componentes son P (1; k) = xk y P (2; k) = yk , Si:
 
8 20 25 25 20 8 3 3
P = 
2 2 7 14 19 19 14 7

Hacer un programa que calcule el perı́metro del polı́gono.

Listing 5.24: SOLUCIÓN


clc
clear all
P =[8 20 25 25 20 8 3 3 ; 2 2 7 14 19 19 14 7 ] ;
d ( 1 )=s q r t ( ( P ( 1 , 1 )−P ( 1 , 8 ) ) ˆ2+( P ( 2 , 1 )−P ( 2 , 8 ) ) ˆ 2 ) ;
f o r n =2:8
d ( n )=s q r t ( ( P ( 1 , n )−P ( 1 , n −1) ) ˆ2+( P ( 2 , n )−P ( 2 , n −1) ) ˆ 2 ) ;
end
sum ( d )
5. Ejemplos Aplicativos 101

Ejemplo 5.0.23. Hacer un programa en MATLAB que resuelva la ecuación de segundo


grado:
ax2 + bx + c = 0

leyendo a través del teclado los coeficientes a, b y c. Considere separadamente los casos
de soluciones reales y complejas.

Listing 5.25: SOLUCIÓN


clear all
clc
a=i n p u t ( ' I n g r e s e e l v a l o r de a : ' ) ;
b=i n p u t ( ' I n g r e s e e l v a l o r de b : ' ) ;
c=i n p u t ( ' I n g r e s e e l v a l o r de c : ' ) ;
d=(bˆ2−4∗ a ∗ c ) ;
i f d>=0
f p r i n t f ( ' \n Las R a i c e s son R e a l e s \n ' ) ;
else
f p r i n t f ( ' \n Las R a i c e s son Complejas \n ' ) ;
end
x1=(−b+d ˆ 0 . 5 ) / (2 ∗ a )
x2=(−b−d ˆ 0 . 5 ) / (2 ∗ a )
5. Ejemplos Aplicativos 102

Ejemplo 5.0.24. Cree un programa que al introducir el número de DNI diga si el


alumno ha aprobado un examen, si ha desaprobado, si no se ha presentado o si no se ha
matriculado. Suponga que dentro de los alumnos matriculados aquéllos con número de
DNI 1001, 1002 o 1003 han aprobado ; el de número 1004 ha suspendido y el de número
1005 no se ha presentado.

Listing 5.26: SOLUCIÓN


clear all
clc
dni=i n p u t ( ' I n t r o d u c e tu numero de DNI= ' ) ;
a1 =1001; a2 =1002; a3 =1003; a4 =1004; a5 =1005;
i f ( dni== a1 ) | ( dni== a2 ) | ( dni== a3 )
d i s p ( ' Aprobado ' )
e l s e i f ( dni== a4 )
d i s p ( ' Desaprobado ' )
e l s e i f ( dni== a5 )
d i s p ( ' No P r e s e n ta d o ' )
else
d i s p ( ' No M a t r i c u l a d o ' )
end

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.

Listing 5.27: SOLUCIÓN 1


clear all
clc
f o r a =1:20
f o r b =1:20
f o r c =1:20
i f a ˆ2 + b ˆ2 == c ˆ2
disp ( [ a , b , c ] ) ;
end
end
end
end
5. Ejemplos Aplicativos 103

Listing 5.28: SOLUCIÓN 2


clear all
clc
f o r a =1:20
f o r b=a : 2 0
f o r c=b : 2 0
i f a ˆ2 + b ˆ2 == c ˆ2
disp ( [ a , b , c ] ) ;
end
end
end
end

Ejemplo 5.0.26. Determine si la proposición (a ∧ b) =⇒ (a ∨ c) es una tautologı́a, una


contradicción ó una contingencia y genere su respectiva Tabla de verdad.

Recordemos que la expresión es equivalente a: ∼ (a ∧ b) ∨ (a ∨ c)

Listing 5.29: SOLUCIÓN


clear all
clc
s =1;
disp ( ' a b c p');
f o r a =0:1
f o r b =0:1
f o r c =0:1
p ( s ) =˜(( a&b ) ) | ( a | c ) ;
disp ( [ a , b , c , p(s) ] ) ;
s=s +1;
end
end
end
i f sum ( p )==8
d i s p ( ' Es una T a u t o l o gı́ a ' ) ;
e l s e i f sum ( p )==0
d i s p ( ' Es una C o n t r a d i c c i ó n ' ) ;
else
d i s p ( ' Es una C o n t i n g e n c i a ' ) ;
end
5. Ejemplos Aplicativos 104

Ejemplo 5.0.27. Escriba un programa con un menú para realizar la conversión de


grados Celsius (C) a Fahrenheit (F) y viceversa:

Listing 5.30: SOLUCIÓN


clear all
x =0;
w h i l e x˜=3
d i s p ( ' 1) Convertir F a C ' ) ;
d i s p ( ' 2) Convertir C a F ' ) ;
d i s p ( ' 3) S a l i r ' ) ;
x=i n p u t ( ' E l i j a una o p c i ó n ' ) ;
switch x
case 1
f=i n p u t ( ' I n g r e s e g r a d o s F ' ) ;
c =5/9∗( f −32) ;
f p r i n t f ( ' \n %6.4 f g r a d o s F son %6.4 f g r a d o s C \n\n ' , f , c ) ;
case 2
c=i n p u t ( ' I n g r e s e g r a d o s C ' ) ;
f=9/5∗c +32;
f p r i n t f ( ' \n %6.4 f g r a d o s C son %6.4 f g r a d o s F \n\n ' , c , f ) ;
otherwise
clc
end
end
BIBLIOGRAFÍA

[1] Buhmann, M. D. (2004). Radial Basis Functions: Theory and Implementations.


Cambridge University Press. United Kingdom.

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

[4] Cobos J. Apuntes de Cálculo Numérico[en lı́nea].


http://ma1.eii.us.es/Material/Cal_Num_itis_Apuntes.pdf [consulta
2012]

[5] Comer E.(2009) Métodos Numéricos Instituto Tecnologico de Tijuana.

[6] Mathews J.; Fink K.(2000) Métodos Numéricos con MATLAB. Prentice Hall,
Madrid.

[7] Mejı́a C.(2002) Invitación al Análisis Numérico. Universidad Nacional de Colom-


bia, Medellı́n.

[8] Mora W.F.(2010) Introducción a los Métodos Numéricos. Instituto Tecnologico de


Costa Rica.

[9] Müller H. (1996) Una Introducción al Análisi Numérico. Universidad Mayor de


San Simón. Cochabamba, Bolivia.

[10] Nakamura, S. (1992). Metódos Numericos Aplicados con Software. Pearson Edu-
cación.
BIBLIOGRAFÍA 106

[11] A. Quarteroni, F. Saleri. (2006). Cálculo Cientifico con MATLAB y Octave.


Springer-Verlag, Italia, Milano.

[12] Velásquez J.(2007) Análisis Numérico. Ediciones Uninorte.

[13] Won Y. Yang , Wenwu Cao , Tae-Sang Chung , John Morris(2005) Applied Nu-
merical Methods Using MATLAB. John Wiley Sons.

[14] V. Dominguez. L. Rapun Matlab en cinco lecciones de Numérico[en lı́nea].


http://www.unavarra.es/personal/victor dominguez/ [consulta 2012]

[15] Carrasco V.(2011) Métodos Numericos Aplicados a la Ingenierı́a Problemas en


Polymath y Matlab. MACRO

[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

[18] Moler, C. (2004) Numerical computing with Matlab. SIAM

[19] Pineiro G. APUNTES DE MATLAB [en lı́nea].


http://www.uhu.es/candido.pineiro/docencia/apuntesmatlab.pdf [consul-
ta 2012]

[20] J. Cooper A Matlab Companior for Multivariable Calculus

[21] Chavil M. Sistema experto en Maple Para el análisis de Curvas y superficies en


R3

[22] Gonzáles M., Sánchez R. Gráficas de curvas y superficies usando Matlab