Sunteți pe pagina 1din 168

Coleccin

G UAS P RCTICAS

B
A
L
T
A
M

Aplicado a Mtodos Numricos e Ingeniera

MatLAB: Aplicado a los Mtodos Numricos e Ingeniera


Autor: Hider Pimentel Dextre
Derecho de autor reservado
Derecho de edicin, arte grfico y diagramacin reservados
Empresa Editora Macro E.I.R.L.
Edicin a cargo de:
Empresa Editora Macro E.I.R.L.
Av. Paseo de la Repblica N 5613 - Miraflores
Lima - Per

(511) 719 - 9700

ventas@editorialmacro.com
www.editorialmacro.com

Primera edicin: Marzo 2012 - 1000 ejemplares


Impresin
Talleres Grficos de la Empresa Editora Macro E.I.R.L.
Lima - Per
ISBN N
Hecho el Depsito Legal en la Biblioteca Nacional del Per N
Prohibida la reproduccin parcial o total, por cualquier medio o mtodo de este
libro sin previa autorizacin de la Empresa Editora Macro E.I.R.L.

ndice
ndice
ndice
ndice
ndicendiceIndice
ndice
Captulo 1: Introduccin

El GUI de Matlab..........................................................................................................9
Ingreso de Datos...........................................................................................................10
Tipos de Datos..............................................................................................................13
Datos Numricos.........................................................................................................................13
Nmeros Reales...........................................................................................................................13
Nmeros Complejos....................................................................................................................14
Nmeros Enteros.........................................................................................................................15
Conversin de Tipo de Datos.......................................................................................................16
Valores Especiales.......................................................................................................................16
Funciones de Identificacin de Tipo de Dato..............................................................................17
Cadenas de Caracteres................................................................................................................17
Comparacin de Cadenas............................................................................................................18
Conversin de Valores Numricos a Cadenas y Viceversa...........................................................20
Tipos de Formato de Salida.........................................................................................................22

Captulo 2: Operaciones con Matrices y Vectores

Matrices.......................................................................................................................25
Matriz de Nmeros Complejos....................................................................................................25
Matriz Nula..................................................................................................................................26
Definicin de Vector....................................................................................................................27
Operador Paso (:).......................................................................................................................27
Reconocimiento de los Elementos de una Matriz.......................................................................27
Matrices Especiales.....................................................................................................................29
Funcin Generador de Vectores..................................................................................................32
Funciones Para el Anlisis de una Matriz....................................................................................32
Operadores y Funciones Matemticas........................................................................................42
Operadores Aritmticos..............................................................................................................42
Operadores Relacionales.............................................................................................................43
Operadores Lgicos.....................................................................................................................44
Funciones Relacionales y Lgicas Adicionales.............................................................................44
Funciones Matemticas...............................................................................................................45
Funciones de Fecha y Hora..........................................................................................................47
Operaciones con Funciones.........................................................................................................48

Ejercicio de aplicacin.................................................................................................................49
Indexacin de Matrices...............................................................................................................51
Concatenacin de matrices (Agrupacin)...................................................................................53

Ejercicios propuestos....................................................................................................54
Ejercicios ms avanzados..............................................................................................55
Captulo 3: Programacin en Matlab

M-FILES........................................................................................................................57
Funciones de Ingreso y Salida de datos.........................................................................61
Sentencias de Control de Flujo......................................................................................64
if else end.............................................................................................................................65
if elseif else end................................................................................................................66
switch case otherwise end...............................................................................................68
while end.................................................................................................................................69
for end.....................................................................................................................................70
Sentencias Especiales..................................................................................................................71

Ejercicios de Aplicacin.................................................................................................72
Ejercicios Propuestos....................................................................................................73

Captulo 4: Grficos

Ventana de Figura.........................................................................................................75
Funciones de Grficas en 2 Dimensiones.......................................................................76
Graficas en 2D..............................................................................................................77
Puntos.........................................................................................................................................77
Cartesianas..................................................................................................................................80
Paramtricas................................................................................................................................82
Polares.........................................................................................................................................83
Quiver..........................................................................................................................................84

Grficos Mltiples........................................................................................................85
Subplot........................................................................................................................................86

Funciones de Grficas en 3 Dimensiones.......................................................................88


Puntos.........................................................................................................................................88
Cartesianas..................................................................................................................................89
Paramtricas................................................................................................................................90

Superficies....................................................................................................................91
Forma z=f(x,y)..............................................................................................................................91
Sombras y Colores.......................................................................................................................92

Rotacin de Grfica.....................................................................................................................93
Superficies Complejas.................................................................................................................93
Estadsticas..................................................................................................................................94

Superficies: Generados por Funciones..........................................................................94


Esfera...........................................................................................................................................94
Vectores Normales a una superficie............................................................................................95
Cilindro........................................................................................................................................95

Geometra diferencial de curvas...................................................................................96


Longitud de arco..........................................................................................................................96
Vectores tangente, normal y binormal: Triedro de Frnet-Serret...............................................96
Curvatura y torsin......................................................................................................................97
Plano osculador...........................................................................................................................98
Centro de curvatura....................................................................................................................99
Teorema fundamental de curvas.................................................................................................99

Ejercicios Propuestos....................................................................................................100

Captulo 5: Polinomios

Definicin.....................................................................................................................103
Operaciones con Polinomios.........................................................................................105
Ejercicios......................................................................................................................108
Ajuste de Curvas Bidimensionales ................................................................................108
Funciones de Interpolacin...........................................................................................109
Ejercicios......................................................................................................................111

Captulo 6: Interpolacin

Polinomios de Lagrange ...............................................................................................113


Polinomio de Interpolacin por Diferencias Divididas de Newton.................................115

Captulo 7: Resolucin de Sistema de Ecuaciones Lineales

Definicin.....................................................................................................................119
Aplicacin a los Circuitos Elctricos...............................................................................121
Operaciones Elementales de Regln.............................................................................122
Eliminacin Gaussiana................................................................................................................122
Metodo de Gauss Jordan..........................................................................................................124
Pivote Mximo............................................................................................................................125

Mtodo Montante.......................................................................................................................126

Matriz Inversa..............................................................................................................127
Metodos Iterativos: Jacobi............................................................................................127
Mtodos Iterativos: Gauss-Seidel..................................................................................129
Ejercicios Propuestos....................................................................................................131

Captulo 8: Solucin de Ecuaciones No Lineales

Definicin del Problema...............................................................................................133


Mtodo de la Biseccin.................................................................................................133
Ejercicio propuesto......................................................................................................................136

Mtodo de Punto Fijo (iteracin simple).......................................................................136


Mtodo de Newton-Rapson..........................................................................................139
Mtodo de la Secante...................................................................................................141
Newton-Rapson para Funciones de ms de una Variable..............................................143
Ejemplo de dos variables.............................................................................................................144

Ejercicios propuestos....................................................................................................145
Captulo 9: Integracin

Mtodo de los Trapecios...............................................................................................148


Mtodo de Romberg.....................................................................................................149
Mtodo de Simpson 1/3...............................................................................................150
Mtodo de Simpson 3/8...............................................................................................152
Funciones de Cuadratura..............................................................................................153
Captulo 10: Solucin de Ecuaciones Diferenciales Ordinarias

Mtodo de Euler...........................................................................................................155
Mtodo de Euler Modificado........................................................................................157
Mtodo de Runge Kutta................................................................................................159
Funciones Ode..............................................................................................................160
Solucin de Ecuaciones Diferenciales de Orden Superior..............................................164

MatLAB
El presente manual: MATLAB Aplicado a los Mtodos Numricos e Ingeniera est
orientado a todos los interesados, estudiantes y profesionales de las diferentes
especialidades, en desarrollar la capacidad de manejo de la herramienta MATLAB.
Tiene un enfoque, principalmente, a la adecuacin y familiarizacin del programa
con el usuario. Y al ser la eficiencia en la resolucin de problemas matemticos
la principal caracterstica de esta herramienta, este manual proporciona los
siguientes temas: una introduccin al ambiente de trabajo del MATLAB, tipos de
datos, entrada y salida de datos, el manejo y visualizacin de variables, creacin
de m-files, estadstica bsica, programacin utilizando la sentencias de control
de flujo, el desarrollo de visualizaciones grficas, la aplicacin a los Mtodos
Numricos, as como ejemplos directos de aplicacin a la ciencia e ingeniera.
Al ser una herramienta de un lenguaje de muy alto nivel, fcil de aprender y
usar, muy potente, flexible, extensible, de gran exactitud, robusto y rpido. No
predispone como requisito necesario el conocimiento de algn otro tipo de lenguaje
de programacin, pero si es de su conocimiento acelerara el estudio del programa.
Dentro de este manual encontraremos un conjunto de herramientas (grupo
de funciones con propsito de aplicacin directa) que nos permitirn resolver
problemas diversos mucho ms rpidos y eficientes, comparados con otro lenguaje
tales como FORTRAN, C/C++ e inclusive JAVA.
Al finalizar el uso de este manual el lector podr ser capaz de interpretar todo
tipo de expresin de clculo al lenguaje MATLAB, adems de poder implementar
estructuras de cdigo para solucionar problemas con una metodologa adecuada
que podemos describir de la siguiente manera: Planteamiento claro del problema,
descripcin de las informacin de entrada y salida, resolucin del problema de
forma manual para ciertos conjuntos de datos sencillos, implementacin de una
solucin en MATLAB, comprobacin de la solucin ingresando datos distintos.
Espero que este manual didctico pueda servir como gua tanto a los programadores
expertos como para principiantes, pero sobretodo que sea un medio de difusin
para lograr el inters de la comunidad acadmica en esta herramienta sofisticada
que actualmente se dispone.

Captulo

Introduccin

En esta parte presentamos al entorno de manejo de Matlab para su mejor adaptacin, como un
entorno interactivo para realizar anlisis de datos, clculo numrico y de visualizacin grfica. Tambin
se explicar cmo pueden representarse los datos y comandos para imprimir informacin. En las
primeras secciones comenzaremos explorando Matlab de la forma ms simple, en modo comando: el
usuario pregunta y Matlab responde.
El GUI de Matlab

El software se desarroll originalmente como un Laboratorio de Matrices, de ah su nombre, y


actualmente cuenta con una capacidad superior debido a su lenguaje de programacin para cmputo
cientfico y tcnico en general.
La siguiente figura define la interfaz grfica para la versin r20011b:

Cuando se instala el programa, en este caso se realiz en el sistema operativo Windows 7, este por
defecto crea una carpeta de nombre MATLAB en el directorio Documentos, y es ese lugar donde por
defecto el programa almacenar todo archivo creado.

Captulo 1

La Ventana de Comandos (Command Window): Es el espacio principal de interaccin entre el usuario


y el software, ah se ejecutan las instrucciones y muestran los resultados. Mantiene las mejoras de
la versin anterior, algunas de las cuales recordaremos a continuacin:
S e permiten lneas de comandos muy largas que automticamente siguen en la lnea siguiente
al llegar al margen derecho de la ventana. Para ello hay que activar la opcin Wrap Lines, en el
men File/Preferences/Command Window.
Haciendo clic con el botn derecho sobre el nombre de una funcin que aparezca en esta ventana
se tiene acceso a la pgina del Help sobre dicha funcin.
Al iniciar la escritura de una funcin y pulsando la tecla Tab, el programa completa automticamente
el nombre de la funcin, o bien muestra un men de todas las funciones disponibles que comienzan
con las letras digitadas.
Cuando al ejecutar un fichero *.m se produce un error y se obtiene el correspondiente mensaje
en la Command Window, MATLAB muestra mediante un subrayado un enlace a la lnea del
fichero fuente en la que se ha producido el error. Haciendo clic en ese enlace se va a la lnea
correspondiente del fichero por medio del Editor/Debugger.
Ventanas auxiliares: command history, workspace, current directory, que informan sobre (y permiten
editar) los comandos insertados, las variables declaradas y el directorio en el que estamos trabajando.
Ventana de ayuda: Es una ventana independiente que proporciona un acceso completo a las funciones
de ayuda de Matlab, incluyendo bsquedas, demostraciones, etc.
Estas son las caractersticas bsicas que debemos considerar:
E l prompt de Matlab es >>. El usuario escribe a continuacin y para ejecutar se pulsa la tecla
Enter.
Se pueden recuperar comandos anteriores navegando con las flechas y .
Ingreso de Datos

Todo dato ingresado al programa es un ordenamiento en filas y columnas, matemticamente conocido


como matriz y que se define como arreglo en la programacin. Y mantiene la siguiente estructura de
sentencia:
>> variable = valor;

Donde:

variable:

Es la combinacin de caracteres alfabticos, numricos y el carcter especial (_), siendo


la cantidad de 63 caracteres como agrupamiento mximo para nombrarla teniendo en cuenta que
los caracteres minsculos y maysculos se diferencian. Las nicas restricciones para nombrar a una
variable son que esta no debe iniciar con un carcter numrico ni el especial (_) y tampoco ser igual
a una palabra reservada.

10

Gua Prctica MatLAB

Ejemplo:
a1, dato, data, f1

variables validas

es diferente a meDia23
45va, _p1, 3w1 variables invalidas

media23
1p,

Las palabras reservadas son las siguientes:


>>iskeyword
ans =
break
case
catch
classdef
continue
else
elseif
end
for
function
global
if
otherwise
parfor
persistent
return
spmd
switch
try
while

Es un dato o un conjunto de datos ordenados en filas y columnas. Por defecto los datos
toman el tipo double, y se puede cambiar de tipo definindolo segn la necesidad del usuario (ver
ejemplos).

valor:

;: Es la sentencia de la instruccin. Si una expresin termina en este signo su resultado se calcula,

pero no se muestra en pantalla, y si se omite, entonces el programa ejecutar la tarea y adems


mostrar el resultado.
Se define que los valores ingresados al programa pueden
ser de los siguientes tipos (se detallar en el siguiente
tem):

Tipo

Bytes

doubl
int
char
logical

8B
4B
2B
1B

11

Captulo 1

Ejemplos:
Ingrese los siguientes datos:
double:
>> x = 7;

int:
>>a = int16(23);

char: Los caracteres deben estar entre apstrofes.


>> c = hola mundo;

logical: Son los resultados de una comparacin o relacin que en programacin se define como 0
(falso) y 1 (verdadero).
>> m = 6>4;

La funcin who y whos, nos permite ver las variables creadas hasta el momento y a las variables con
sus caractersticas de ingreso, respectivamente que estn almacenados en el workspace.

Nota

>> who
Your variables are:
a

>> whos
Name
a
c
m
x

x
Size
1x1
1x10
1x1
1x1

Bytes
2
20
1
8

Class
int16
char
logical
double

Attributes

Si deseamos ver las caractersticas de una o de slo algunas variables, entonces especificamos ellas
de la siguiente manera:
>> whos a m
Name
Size
a
1x1
m
1x1

12

Bytes
2
1

Class
int16
logical

Attributes

Gua Prctica MatLAB

Tipos de Datos

Los tipos de datos definidos son de dos clases: numricos y las cadenas de caracteres.
Datos Numricos

Nmeros Reales

Matlab representa los nmeros reales en doble precisin y en simple precisin.


a

D oble Precisin: double


Es el tipo por defecto de un dato ingresado al programa. A continuacin se muestra la creacin,
conversin y los valores mximos y mnimos de un dato de doble precisin:
>> d = 45.78;
>> whos d
Name
Size
d
1x1

Bytes
8

Class
double

Attributes

La funcin isfloat nos permite verificar si el dato ingresado es de punto flotante (decimal).
>> d1=isfloat(d)
d1 =
1

Las funciones realmax y realmin devuelven el valor mximo y mnimo para el tipo de doble
precisin.
>> realmax
ans =
1.7977e+308
>> realmin
ans =
2.2251e-308
b

Simple Precisin: single


Estos tipos de datos son creados de la siguiente manera:
>> s=single(78.012);
>> whos s
Name
Size
s
1x1

Bytes
4

Class
single

Attributes

>> s1=isfloat(s)
s1 =
1

13

Captulo 1

Las funciones realmax y realmin devuelven el valor mximo y mnimo para el tipo de simple
precisin si es que especificamos el argumento single.
>> realmax(single)
ans =
3.4028e+038
>> realmin(single)
ans =
1.1755e-038

Nmeros Complejos

Se conoce que los nmeros complejos se definen como un valor que tiene parte real y parte imaginaria.
Donde la base imaginaria es i=(-1) y que en el programa se define con el carcter i j.
Existen 2 formas de ingresar un dato complejo:
La primera es digitar la expresin a+bi.
>> c = 7-15i
c =
7.0000 -15.0000i

La segunda forma es utilizando la funcin complex de la siguiente manera:


>> z = complex(12,8)
z =
12.0000 + 8.0000i

Podemos obtener los valores numricos de la parte real e imaginaria de un nmero complejo ya
ingresado al programa con las funciones real e imag y si queremos conocer su mdulo y argumento
en radianes utilizaremos las funciones abs y angle, respectivamente.
>> zr=real(z)
zr =
12
>> zi=imag(z)
zi =
8
>> modulo_z=abs(z)
modulo_z =
14.4222
>> argumento_z=angle(z)
argumento_z =
0.5880

14

Gua Prctica MatLAB

Estos datos tendrn un atributo caracterstico de complex, segn se puede observar si visualizamos
a las variables en el workspace.
>> whos z c
Name
Size
c
1x1
z
1x1

Nota

Bytes
16
16

Class
double
double

Attributes
complex
complex

Las funciones real, imag, abs y angle, son aplicables tambin a un arreglo de datos
(matriz de datos).

Nmeros Enteros

Definimos un dato entero como aquel valor exacto dentro del programa. La siguiente tabla muestra
cmo definir los datos enteros:

Tipo

Funcin

Rango de Valores

Entero con signo de 8 bits


Entero con signo de 16 bits
Entero con signo de 32 bits
Entero con signo de 64 bits
Entero sin signo de 8 bits
Entero sin signo de 16 bits
Entero sin signo de 32 bits
Entero sin signo de 64 bits

int8
int16
int32
int64
uint8
uint16
uint32
uint64

-27 a 27 -1
-215 a 215 -1
-232 a 232 -1
-264 a 264 -1
0 a 28 -1
0 a 216 -1
0 a 232 -1
0 a 264 -1

Class
int64
int8
int16
int32

Attributes

Ejemplos de ingreso de datos enteros:


>>
>>
>>
>>
>>

x=int8(23);
y=int16(46);
w=int64(-6);
z=int32(157);
whos x y w z
Name
Size
w
1x1
x
1x1
y
1x1
z
1x1

Bytes
8
1
2
4

15

Captulo 1

Si se desea verificar si un dato es de tipo entero, utilizaremos la funcin isinteger:


>>isinteger(x)
ans =
1
>> isinteger(y)
ans =
1

Conversin de Tipo de Datos

Conocidos los tipos de datos, es posible cambiar de un tipo a otro tal como mostraremos a continuacin:
>>
>>
>>
>>

a=int16(24);
b=double(a);
c=single(a);
whos a b c
Name
Size
a
1x1
b
1x1
c
1x1

Valores Especiales

Bytes
2
8
4

Class
int16
double
single

Attributes

La herramienta MATLAB considera los siguientes valores especiales inf, -inf y NaN, para
representar a las cantidades infinito positivo, infinito negativo y a todos aquellos que no son un
nmero, respectivamente. Verifique los resultados dados a continuacin:
>> x=45^245
x =
Inf
>> x=log10(0)
x =
-Inf
>> x=0/0
x =
NaN
>> x=inf/inf
x =
NaN

16

Gua Prctica MatLAB

La siguiente tabla muestra algunos valores especiales:

Sintaxis MatLab
pi
ij
inf
NaN

Significado

(-1)

No es un nmero

Funciones de Identificacin de Tipo de Dato

Mostramos a continuacin una tabla de funciones que nos permiten conocer los tipos de datos
ingresados al programa. Sea x un ordenamiento, entonces:

Funcin

Descripcin

whos x
isnumeric(x)

Muestra la caracterstica del dato x.


Determina si el dato x es un tipo de dato numrico.
Determina si x es un tipo de dato numrico especfico, donde arg puede
tomar los siguientes textos: integer (entero), uintxx (no entero de xx: 8,
16, 32 64), float, doubl o single.
Determina si el tipo de dato x es un nmero real.
Determina si el tipo de dato x no es un nmero.
Determina si el valor de x es infinito.
Determina si el valor de x es finito.

isa(x, arg)
isreal(x)
isnan(x)
isinf(x)
isfinite(x)

Cadenas de Caracteres

Una cadena de texto se define como un ordenamiento o arreglo de caracteres UNICODE.


Para crear una cadena al valor de la instruccin se debe encerrar entre comillas simples, por ejemplo:
>> cadena = Bienvenidos al Matlab 2011
cadena =
Bienvenidos al Matlab 2011
>> whos cadena
Name
Size
cadena
1x26

Bytes
52

Class
char

Attributes

17

Captulo 1

Las funciones class e ischar identifican si un dato es un arreglo de caracteres:


>> m = class(cadena)
m =
char
>> n = ischar(cadena)
n =
1

Es posible la agrupacin de 2 o ms cadenas de caracteres, para ello utilizaremos la funcin strcat,


como veremos a continuacin:
>> nombre = Jose;
>> apellido = Manrique;
>> completo = strcat(nombre,apellido)
completo =
JoseManrique

Para crear una matriz de 2 ms filas de caracteres debemos tener en cuenta que cada cadena debe
tener la misma cantidad de caracteres. Se debe rellenar con espacios en blanco a las cadenas ms
cortas para forzar que sean del mismo tamao.
Ejemplo:
>> nombres=[Jose Carlos;Rosario
nombres =
Jose Carlos
Rosario
Bartolomeo

;Bartolomeo ]

La manera ms simple para crear matriz de cadenas de texto es usando la funcin char. Esta funcin
rellena automticamente a las cadenas de menor longitud para igualar a la cadena de mayor longitud.
Ejemplo:
>> nombres=char(Jose Carlos,Rosario,Bartolomeo)
nombres =
Jose Carlos
Rosario
Bartolomeo

Comparacin de Cadenas

Las cadenas de texto tambin pueden compararse y esta se realiza carcter con carcter. La siguiente
tabla muestra las funciones con las que se pueden realizar dicha comparaciones:

Funcin
strcmp

18

Descripcin
Determina si dos cadenas son idnticas. Diferencia las maysculas y
minsculas.

Gua Prctica MatLAB

Determina si los n primeros caracteres de dos cadenas son idnticas.


Diferencia las maysculas y minsculas.
Determina si dos cadenas son idnticas. No diferencia las maysculas y
minsculas.
Determina si los n primeros caracteres de dos cadenas son idnticas. No
diferencia las maysculas y minsculas.

strncmp
strcmpi
strncmpi

Recordemos que los resultados de una comparacin tiene como resultado los valores de 1 (verdadero)
0 (falso).
>>
>>
>>
c1

cad_1=masa;
cad_2=mazo;
c1=strcmp(cad_1,cad_2)
=
0

Como los primeros 2 caracteres de ambas cadenas anteriores son iguales, entonces podemos realizar
la comparacin siguiente:
>> c2=strncmp(cad_1,cad_2,2)
c2 =
1
c3=strncmp(cad_1,cad_2,3)
c3 =
0

Tambin podemos comparar cadenas utilizando los operadores relacionales, siempre que dichas
cadenas tengan iguales dimensiones, o uno sea escalar.
Ejemplo:
>> A=Rodrigo;
>> B=Roberto;
>> C = A==B
C =
1
1

La funcin isletter determina si un carcter es una letra.


>> dia = MatLab 2011b;
>> str = isletter(dia)
str =
1
1
1
1

19

Captulo 1
Conversin de Valores Numricos a Cadenas y Viceversa

En algunos casos es necesario el cambio de tipo de dato para facilitar la salida en pantalla de
combinaciones de nmeros y caracteres. La tabla siguiente muestra las funciones que hacen posible
algunas conversiones:

Comando
char
int2str
num2str y
str2num
mat2str y
str2mat
dec2hex y
hex2dec
dec2bin y
bin2dec
dec2base

Descripcin
Convierte un entero positivo a su equivalente carcter (cdigo ASCII). Trunca
cualquier parte fraccional.
Convierte un valor numrico de tipo int a un dato de tipo char (carcter).
Convierte un valor numrico de tipo double a un dato de tipo char (carcter) de
precisin con formato especfico y viceversa, respectivamente.
Convierte un tipo numrico a una de tipo carcter de una determinada
precisin, retornando una cadena Matlab que puede ser evaluada y viceversa,
respectivamente.
Convierte un entero positivo a un dato de tipo char de base hexadecimal y
viceversa, respectivamente.
Convierte un entero positivo a un dato de tipo char de base binaria y viceversa,
respectivamente.
Convierte un entero positivo a un dato de tipo char de cualquier base de 2 a 36.

A continuacin, mostramos algunas formas de usar las funciones definidas:


>> M=[77 65 84 76 65 66 50 48 49 49 66];
>> Mc=char(M)
Mc =
MATLAB2011B

Realizando lo contrario:
>> newM=int8(Mc)
newM =
77
65
84

76

65

>> enteros=[ 23 34 11];


>> cadena=int2str(enteros)
cadena =
23 34 11
>> num=[23.5 56 -0.34];
>> cad=num2str(num)
cad =
23.5 56 -0.34

20

66

50

48

49

49

66

Gua Prctica MatLAB

Realizando lo contrario:
>> newnum=str2num(cadena)
newnum =
23

34

11

>> d=[123 37 98];


>> h=dec2hex(d)
h =
7B
25
62

Realizando lo contrario:
>> newd=hex2dec(h)
newd =
123
37
98
>> b=dec2bin(d)
b =

1111011
0100101
1100010

21

Captulo 1
Tipos de formato de salida

Matlab tiene forma especfica y diferente de visualizar sus datos en el command window. La siguiente
tabla nos muestra estos tipos:

Tipo

Descripcin

Formato con 4 cifras significativas exactas.


Formato de 5 dgitos. Incluye potencia de 10.
Formato de 5 dgitos.
Formato de 15 cifras significativas exactas.
Formato de 15 dgitos. Incluye potencia de 10.
Formato de 15 dgitos.
Formato en fraccin irreductible.
Formato en base 16 (hexadecimal).
Formato de 2 cifras significativas exactas.
Formato que suprime el exceso de lneas.
Formato que aade ms lneas para que sea ms legible.

short
short e
short g
long
long e
long g
Rat
Hex
Bank
Compact
Loose

Por defecto el tipo de formato del Matlab es el short, para cambiar a un diferente tipo de formato
podemos usar la funcin format, estos cambios slo afectan la forma en la que los nmeros son
visualizados y no como el programa los calcula.
El cambio de formato lo realizamos as:
>> format

tipo

Ejemplo:
>> x=[26/14 3 16.567246
>> format short
>> x
x =

1.8571

16.5672

4e-4];

0.0004

>> format long


>> x
x =
1.857142857142857
>> format rat
>> x

22

16.567246000000001

0.000400000000000

Gua Prctica MatLAB

x =

13/7

2833/171

1.86

16.57

1/2500

>> x
x =

0.00

Para volver al formato por defecto bastara con sentenciar la funcin format.
Nota

Para representar las potencias del nmero diez, Matlab abrevia la forma de su
definicin utilizando la forma exponencial.

Entonces:
104 1e4 510-7 5e-7

23

Captulo

Operaciones con
Matrices y Vectores
Matrices

Cuando resolvemos problemas de ingeniera, es importante saber visualizar los datos relacionados
con el problema. A veces consiste en un solo nmero, como el peso de un cuerpo, en otras ocasiones
podra ser una coordenada en un plano, la cual podemos representar como un par de nmeros. En
todo caso, podemos representar cualquier ejemplo usando un ordenamiento de datos dispuestos en
filas y columnas llamado matriz.
Ejemplo:

Entonces tenemos 2 representaciones de datos para ingresar:


>> x = [4]
x=
4
>>mt = [23.7 6.7]
mt =

23.7 6.7

Ahora, para ingresar una matriz de cualquier orden debemos realizarlo fila por fila, donde un espacio
en blanco o una coma diferencian los datos de cada columna. Entonces:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5]
A =
3
-6
8
0
2
1
7
-1
11
-7
2
-5

Matriz de Nmeros Complejos

Si una matriz tiene al menos un elemento complejo, entonces dicha matriz es compleja.
Sea:
>> C = [7+i -2+5i;4 -9i]
C =
7.0000 + 1.0000i -2.0000 + 5.0000i
4.0000
0 - 9.0000i

25

Captulo 2

Tambin podemos obtener la matriz de los valores de la parte real y de la parte imaginaria de la matriz
C anteriormente definida.
>> Creal = real(C)
Creal =
7
-2
4
0
>> Cimaginario = imag(C)
Cimaginario =
1
5
0
-9
>> Carg = angle(C)
Carg =
0.1419
1.9513
0
-1.5708
>> Carg = angle(C)*180/pi
Carg =
8.1301 111.8014
0 -90.0000

Al igual que para un par de valores, podemos construir una matriz de complejos con la funcin
complex utilizando un par de matrices de igual orden. Tomando los resultados anteriores, tenemos:
>> Cnew = complex(Creal,Cimaginario)
Cnew =
7.0000 + 1.0000i -2.0000 + 5.0000i
4.0000
0 - 9.0000i

Matriz Nula

Se define la matriz nula, como aquella matriz que no tiene elementos, es decir, es la representacin
del vaco. En Matlab se define as:
>> M = []
M=

[ ]
Nota

26

Se define como comentario a toda lnea de texto que el programa no identifica como sintaxis de cdigo,
su ingreso es despus de anteponer el carcter % y que toma el color verde para su identificacin.

Gua Prctica MatLAB

Definicin de Vector

Una matriz de orden nx1 o 1xm, se le conoce como vector fila o vector columna, respectivamente.
Ejemplo:
>> col = [2;-7;12;0]
col =
2
-7
12
0
>> fila = [14 -6 10 18 43]
fila =
14
-6
10
18

43

Operador paso (:)

Permite crear un vector fila de elementos en progresin aritmtica.


Sintaxis:

var = Vini : paso : V fin paso 1


var =Vini : V fin

paso = 1

Ejemplos:
>> V = 9:3:21
V =
9
12

15

18

21

>> V1 = 6:10
V1 =
6
7

10

>> V2=45:-6:18
V2=

45

39

33

27

21

Reconocimiento de los Elementos de una Matriz


a

P or sus ndices
Sea A una matriz ingresada:
A = aij

n m

, donde : i = 1, 2, , n y j = 1, 2, , m

Entonces :
El elemento aij se reconoce por A(i, j )

27

Captulo 2

Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> a24 = A(2,4)
a24 =
-1
>> a12 = A(1,2)
a12 =
-6
b

P or su posicin en la matriz
Matlab asigna una numeracin de posicin a cada elemento de una matriz, donde:
A = [ ak ]nm , donde k = 1, 2, , n m
Entonces :
El elemento ak se reconoce por A(k )

El programa inicia la asignacin de la posicin desde el primer elemento de la primera columna y


prosigue con los dems elementos con posiciones consecutivas, si ya asign a todos los elementos
contina en la columna que sigue con la posicin siguiente. Vea el ejemplo a continuacin, donde
los subndices de cada elemento son sus respectivas posiciones en la matriz.
Sea:

31
A = 22
113

64
15
7 6

87
78
29

010
111
512

>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];


A =
3 -6
8 0

2
1
7
-1

11
-7
2
-5
>>a6 = A(6)
a6 =
-7
>>a3 = A(3)
a3 =
11

28

Gua Prctica MatLAB

Matrices Especiales

Existen en Matlab varias funciones orientadas a definir, con gran facilidad y muy rpidamente, algunas
matrices de tipo particular. La siguiente tabla especifica las funciones para crear estas matrices
especiales:

Funcin

Descripcin

Crea matriz de elementos igual a cero.


Crea matriz de elementos igual a la unidad.
Crea matriz identidad.
Crea matriz de elementos aleatorios entre 0 y 1.
Crea matriz de elementos aleatorios con media 0.

zeros
ones
eye
rand
randn

Las funciones anteriores tienen la siguiente sintaxis general para su generacin:


Sintaxis:

var = funcion(n)

= funcion(n,m)
var = funcion([n m])

matriz cuadrada

rectangular

rectangular

var

La 1ra forma permite crear matrices cuadradas de orden n, la 2da y 3ra forma crea matrices
rectangulares de orden nxm.
Ejemplos:
Matrices de puros ceros:
>> Z1 = zeros(3)
Z1 =
0
0
0
0
0
0
0
0
0
>> Z2 = zeros(2,7)
Z2 =
0
0
0
0
0
0

0
0

0
0

0
0

0
0

>> Z3 = zeros([3 2])


Z3 =
0
0
0
0
0
0

29

Captulo 2

Si queremos crear una matriz de ceros del mismo orden que la matriz A3x4 definida en los ejemplos
anteriores, utilizaremos la 3ra sintaxis definida.
>> Z4 = zeros(size(A))
Z4 =
0
0
0
0
0
0
0
0
0
0
0
0

Ya definida la matriz, podemos asignar a un dato un valor diferente a cero.


>> Z4(7) = 99
Z4 =
0
0
0
0
0
0

99
0
0

0
0
0

>> Z4(3) = 11
Z4 =
0
0
0
0
11
0

99
0
0

0
0
0

Matrices de elementos igual a la unidad:


>> U = ones(2)
U =
1
1
1
1
>> U1 = ones(2,9)
U1 =
1
1
1
1
1
1
>> U2 = 27*ones(4,6)
U2 =
27
27
27
27
27
27
27
27
27
27
27
27

30

1
1

1
1

1
1

27
27
27
27

27
27
27
27

27
27
27
27

1
1

1
1

1
1

Gua Prctica MatLAB

Matriz Identidad:
>> I = eye(4)
I =
1
0
0
1
0
0
0
0

0
0
1
0

0
0
0
1

>> I1 = eye(3,6)
I1 =
1
0
0
0
1
0
0
0
1

0
0
0

0
0
0

0
0
0

Matriz de valores aleatorios entre 0 y 1:


>> x = rand
x =
0.8147

% un valor aleatorio

>> x = rand
x =
0.9058

% nuevamente un valor aleatorio

>> X = rand(5) % matriz de orden


X =
0.1270
0.5469
0.9572
0.9134
0.9575
0.4854
0.6324
0.9649
0.8003
0.0975
0.1576
0.1419
0.2785
0.9706
0.4218
>> X1 = rand(2,4)
X1 =
0.3922
0.1712
0.6555
0.7060

0.0318
0.2769

5x5
0.9157
0.7922
0.9595
0.6557
0.0357

0.8491
0.9340
0.6787
0.7577
0.7431

0.0462
0.0971

Si se desea cambiar el domino entre 0 y un valor, solo multiplicamos por dicho valor.
>> X2 = 25*rand(3)
X2 =
20.5864
23.7556
17.3707
0.8612
7.9275
10.9686

9.5390
19.1379
19.8800

31

Captulo 2

Si deseamos tener datos entre dos valores consecutivos, slo sumamos dicho valor.
>> X3 = 25+rand(3) % datos entre 25 y 26
X3 =
25.1869
25.6463
25.2760
25.4898
25.7094
25.6797
25.4456
25.7547
25.6551
>> X4 = 12+9*rand(1,5) % datos entre 12 y 21
X4 =
13.4635
13.0710
16.4853
20.6377
15.0635

Es lo mismo al trabajar con la funcin randn, slo que en este caso algunos valores sern negativos.

Funcin Generador de Vectores


linspace:

constante.

Crear un vector fila de una cierta cantidad de elementos distribuidos en un dominio

Sintaxis: var

= linspace(Val_ini,Val_fin,# datos)

Los nmeros de datos incluyen a Val_ini

y Val_fin.

Ejemplo:
>> L = linspace(3,19,3)
L =
3
11
19
>> L = linspace(3,19,6)
L =
3.0000
6.2000
9.4000
12.6000
15.8000
19.0000
>> L = linspace(3,19); % crea un vector de 100 datos desde 3 a 19
logspace (a,b,n):

con n elementos.

logspace (a,b):

con 50 elementos.

Genera un vector logartmicamente espaciado entre los valores 10^a y 10^b

Genera un vector logartmicamente espaciado entre los valores 10^a y 10^b

Funciones Para el Anlisis de Una Matriz

Existen diferentes funciones de aplicacin directa a una matriz que realizan tareas especficas, las
cuales nos facilitan y agilizan, en muchos casos, soluciones de diversos problemas de clculo. A
continuacin mostramos algunas de estas funciones y su sintaxis de ejecucin para su adecuado uso.
size: Al aplicarse a una matriz obtiene un vector de 2 elementos que indica el orden de dicha matriz.
El 1er elemento indica el nmero de fila y el 2do el nmero de columna.

Sintaxis:

32

var = size(matriz)

var = [#f

#c]

Gua Prctica MatLAB

Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> ordenA = size(A)
ordenA =
3
4
length: Obtiene la longitud mxima, en nmero de datos, de los lados de la matriz. Esto es similar
a obtener el max{# f , # c}

Sintaxis:

var = length(matriz)

var = max{#f,#c}

Un caso particular es cuando aplicamos la funcin a un vector, donde el resultado es numricamente


igual a su cantidad de elementos.
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> longitudA = length(A)
longitudA =
4

Aplicando a un vector:
>> fila = [14 -6 10 18 43];
>> Lf = length(fila)
Lf =
5
>> q = [19 5 10 -3];
>> Lq = length(q)
Lq =
4

Esta funcin calcula la suma de los elementos de cada columna o fila y los resultados de dicho
clculo los ordena en un vector.

sum:

Sintaxis:

var = sum(matriz)
var = sum(matriz,1)
var = sum(matriz,2)

Las 2 primeras sintaxis realizan por defecto la suma de los elementos de cada columna, ordenando
cada resultado en un vector fila, y la ltima sintaxis suma los elementos de cada fila, ordenando cada
resultado en un vector columna. Y si aplicamos esta funcin a un vector, obtendremos como resultado
el valor de la suma de todos sus elementos.

33

Captulo 2

Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> As1 = sum(A,1)
As1 =
16
-12
17
-6
>> As2 = sum(A,2)
As2 =
5
9
1
>> fila = [14 -6 10 18 43]
>> sf = sum(fila)
sf =
79
prod: Esta funcin calcula el producto de los elementos de cada columna o fila y los resultados de
dicho clculo los ordena en un vector.

Sintaxis:

var = prod(matriz)
var = prod(matriz,1)
var = prod(matriz,2)

Anlogamente a la funcin anterior, las 2 primeras sintaxis realizan por defecto el producto de los
elementos de cada columna, ordenando cada resultado en un vector fila y la ltima sintaxis realiza
el producto de los elementos de cada fila, ordenando cada resultado en un vector columna. Y si
aplicamos esta funcin a un vector, obtendremos como resultado el valor del producto de todos sus
elementos.
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> Ap1=prod(A,1)
Ap1 =
66
42
112
0
>> Ap2 = prod(A,2)
Ap2 =
0
-14
770
>> fila = [14 -6 10 18 43];
>> pf = prod(fila)
pf =

34

650160

Gua Prctica MatLAB

Obtiene los mximos de cada columna de una matriz y los ordena en un vector fila, tambin
podemos conocer a qu fila pertenece el dato mayor de cada columna. Aplicando la funcin a un
vector nos muestra el mayor valor de todos los datos.

max:

Sintaxis:

mayor = max(matriz)
[mayor,#fila] = max(matriz)

Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5]
A =
3
-6
8
0
2
1
7
-1
11
-7
2
-5
>> mayor = max(A)
mayor =
11
1
8

>> [mayor,filas] = max(A)


mayor =
11
1
8
0
filas =
3

>> vec = [14 -6 10 18 43];


>> Mv = max(vec)
Mv =

43

El valor mayor de una matriz se puede calcular as:


>> mayorT = max(max(A))
mayorT =

11

Obtiene los mnimos de cada columna de una matriz y los ordena en un vector fila, tambin
podemos conocer a qu fila pertenece el dato menor de cada columna. Aplicando la funcin a un
vector nos muestra el menor valor de todos los datos.

min:

Sintaxis:

menor = min(matriz)
[menor,#fila] = min(matriz)

35

Captulo 2

Ejemplo:
Teniendo en cuenta la matriz A y el vector vec ingresados anteriormente.
>> menor = min(A)
menor =
2
-7
2

-5

>> [menor,filas] = min(A)


menor =
2
-7
2
-5
filas =
2

>> Mv = min(vec)
Mv =

-6

El valor menor de una matriz se puede calcular as:


>> menorT = min(min(A))
menorT =

-7

diag: Aplicado a una matriz extrae la diagonal principal k-sima y lo ordena en un vector. Si es
aplicado a un vector nos crear una matriz diagonal con los elementos de dicho vector.
Sintaxis:

var
var
var
var

=
=
=
=

diag(matriz)
diag(martiz,k)
diag(vector)
diag(vector,k)

k=..-2,-1,1,2..
k=..-2,-1,1,2..

Ejemplo:
Definiendo una matriz W y obteniendo sus diagonales k-simas.
>> W = [1 6 -2;0 9 3;-5 8 4]
W =
1
6
-2
0
9
3
-5
8
4
>> Do = diag(W) % diagonal principal de W
Do =
1
9
4

36

Gua Prctica MatLAB

>> D1 = diag(W,1) % diagonal N 1 de W


D1 =
6
3
>> D2m = diag(W,-2) % diagonal N -2 de W
D2m =
-5

Creando matriz diagonal


>> v = [3 2 1];
>> Dv = diag(v)
Dv =
3
0
0
2
0
0

0
0
1

>> Dvk = diag(v,2)


Dvk =
0
0
3
0
0
0
0
0
0
0
0
0
0
0
0

0
2
0
0
0

>> Dvk = diag(v,-1)


Dvk =
0
0
0
3
0
0
0
2
0
0
0
1

0
0
0
0

0
0
1
0
0

Las siguientes funciones son utilizadas para aproximar valores numricos de una matriz.

Funcin
ceil
fix
floor
round

Descripcin

Redondea el valor hacia el infinito.


Redondea el valor hacia cero.
Redondea el valor hacia el menos infinito.
Redondea el valor hacia el entero prximo.

37

Captulo 2

Aplicacin:
>> P = [12.5624 4.2351 56.9870]
P =
12.5624
4.2351
56.9870
>> Pc = ceil(P)
Pc =
13
5
57
>> Pf1 = fix(P)
Pf1 =
12
4

56

>> Pf2 = floor(P)


Pf2 =
12
4
56
>> Pr = round(P)
Pr =
13
4
57

La siguiente tabla muestra ms funciones de aplicacin.

Funcin
cond(A)
det(A)
inv(A)
A'
poly(A)
eig(A)
norm(A)
normmest(A,2)
null(A)
orth(A)
pinv(A)
trace(A)
rank(A)
rref(A)
tril(A)
triu(A)
dot(v1,v2)
cross(v1,v2)

Descripcin
Muestra el nmero de condicin
Calcula la determinante
Calcula la inversa
Calcula la transpuesta
Obtiene el polinomio caracterstico
Calcula los valores propios
Halla la norma
Estima la norma-2
Reconoce los espacios nulos
Calcula la ortogonalizacin
Calcula la seudo inversa
Calcula la traza
Calcula el rango
Obtiene la reduccin mediante eliminacin de Gauss
Obtiene la matriz triangular inferior
Obtiene la matriz triangular superior
Calcula el producto escalar de los vectores
Calcula el producto vectorial de los vectores v1 y v2,
donde ambos deben ser de orden 1x3 3x1.

(Con A matriz, v1 y v2 vectores).

38

Gua Prctica MatLAB

Aplicacin:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5;2 -1 6 1]
>> dA = det(A) % determinante
dA =
-786.0000
>> iA = inv(A) % inversa
iA =
-0.1985
-0.1221
0.0992
-0.1845
0.0916
0.0089
0.0611
0.1145
-0.0305
-0.1539
-0.3511
-0.0064

0.3740
0.1361
-0.0382
0.6170

>> At = A % transpuesta
At =
3
2
11
2
-6
1
-7
-1
8
7
2
6
0
-1
-5
1
>> Ap = poly(A) % polinomio caracterstico
Ap =
1.0000
-7.0000
19.0000 377.0000 -786.0000
>> Avp = eig(A) % valores propios
Avp =
-5.6726
5.3413 + 6.4108i
5.3413 - 6.4108i
1.9900
>> Atz = trace(A) % traza
Atz =
7
>> Ar = rank(A) % rango
Ar =
4
>> Ag = rref(A) % eliminacion por Gauss
Ag =
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1

39

Captulo 2

>> Atl = tril(A) % triangular inferior


Atl =
3
0
0
0
2
1
0
0
11
-7
2
0
2
-1
6
1
>> Atu = triu(A) % triangular superior
Atu =
3
-6
8
0
0
1
7
-1
0
0
2
-5
0
0
0
1
>> v1=[1 2 3];v2=[4 5 6];
>> Pp=dot(v1,v2)
Pp =
32
>> Pc=cross(v1,v2)
Pc =

-3
6
-3

Funciones Adicionales

Funcin
find(A)

fliplr(A)
flipud(A)
reshape(A,n,m)
rot90(A)
rot90(A,n)
expm(A)
sqrtm(A)
logm(A)
funm(A,@funcion)
[Vep,Vap]=eig(A)
[L,U]=lu(A)
[Q,R]=qr(A)
[U,S,V]=svd(A)

Descripcin

Devuelve los ndices donde las entradas de A son distinto de cero


Intercambia la matriz de izquierda a derecha
Intercambia la matriz de arriba abajo
Devuelve una matriz m x n cuyos elementos se toman por
columnas de A, si A no contiene m x n elementos dara un error
Gira la matriz 90 en sentido contrario a las agujas del reloj
Gira la matriz nx90
Matriz exponencial de A
Matriz raz cuadrada
Matriz logartmica
Evala la funcin que indiquemos en la matriz A
Vep son los vectores propios y Vap son los valores propios de A
Factorizacin LU
Factorizacin QR
Calcula la descomposicin en valores singulares de A. Donde U y
V son matrices unitarias

(Con A matriz, m y n naturales).

40

Gua Prctica MatLAB

Ejemplos:
>> A = [pi 0; pi/4 pi/3]
A =

3.1416 0

0.7854 1.0472
>>Af = find(A) % devuelve los ndices como un vector columna
Af =

1

2

4
>> Arsh = reshape(A,1,4)
Arsh =

3.14160.7854 0 1.0472
>>A90 = rot90(A) % gira la matriz 90
A90 =
0 1.0472

3.1416 0.7854
>>A270 = rot90(A,3) % gira la matriz 270 ( 90 x 3 = 270 )
A270 =

0.7854 3.1416

1.0472
0
>> funm(A,@sin) % calcula el seno de cada elemento de la matriz
ans =

0.0000 0

-0.3248 0.8660
>> Ae = expm(A)
ans =

23.1407

7.6091 2.8497

41

Captulo 2
Operadores y Funciones Matemticas

En la realizacin de operaciones con las matrices, debemos tener en cuenta si dicha operacin
es matricial o de elemento a elemento (operacin de arreglos), pues ambos son muy diferentes y
pueden realizarse por operadores o funciones, entonces es necesario conocer cmo se aplica las
funciones y adems cmo se realizan las operaciones.

Operadores Aritmticos

Tabla de Operadores Aritmticos I

Operador
A + B
A - B
A * B
A / B
A ^ n

Descripcin

Adicin de matrices
Sustraccin de matrices
Producto de matrices
Divisin de matrices = A*B-1
Potencia de matriz

(Siendo A y B matrices del mismo orden, n escalar).


>> A=[1 3;3 4];
>> B=[2 1;4 3],
B =
2
1
4
3
>> A+B
ans =
3
7

4
7

>> A-B
ans =
-1
-1

2
1

>>A*B
ans =
14
22

10
15

>> A/B
ans =
-4.5000
-3.5000
>> A^3
ans =
55
90

42

2.5000
2.5000

90
145

Gua Prctica MatLAB

Si anteponemos un punto a los operadores *,/ y ^, la operacin se realizar elemento a elemento.


Ver tabla siguiente:
Tabla de Operadores Aritmticos II

Operador

Descripcin

A .* B

Producto elemento a elemento: aij*bij

A ./ B

Divisin elemento a elemento: aij/bij

A .^ B

Potencia elemento a elemento: aij^bij

A .^ n

Potencia elemento a elemento: aij^n

(Siendo A y B matrices del mismo orden, n escalar).


>> A.*B
ans =
2
12

3
12

>> A./B
ans =

0.5000

0.7500
>> A.^B
ans =
1
81

3
64

>> A.^4
ans =
1
81

81
256

3.0000
1.3333

Operadores relacionales

Matlab como lenguaje de programacin dispone de operadores relacionales que permite hacer
comparaciones entre los elementos de dos arreglos de igual dimensin; en cualquiera de los casos
siguientes, el resultado es un arreglo de 0 (ceros) o 1 (unos) cuando la relacin es falsa o verdadera,
respectivamente. Estos operadores son los siguientes:
Tabla de Operadores Relacionales

Operador
>
<
==
<=
>=
~=

Descripcin

Mayor que
Menor que
Igual que
Menor que
Mayor que
Diferente que

43

Captulo 2
Operadores lgicos

Permite hacer comparaciones entre los elementos de dos arreglos de igual dimensin; en cualquiera
de los casos siguientes, el resultado es un arreglo de 0 (ceros) o 1 (unos) como en el tem anterior.
Estos operadores son los siguientes:
Tabla de Operadores Lgicos

Operador
&
|
~
=

Descripcin
y (and)
o (or)
no (not)
identico

Ejemplos:
Teniendo en cuenta a las matrices A y B definidas anteriormente, tendremos:
>> C=A>B
C =
0
0

1
1

>> C=(A==B)
C =
0
0
0
0

Funciones Relacionales y Lgicas Adicionales

Funcin
xor(x,y)
any(x)
all(x)
exist('x')
isnan(x)
isinf(x)
isfinite(x)
Nota

44

Tabla de Funciones

Descripcin

Operacin o exclusiva, devuelve 0 si ambas son falsas o ambas verdaderas


y devuelve 1 si una es falsa y la otra verdadera.
Devuelve 1 si algn elemento en un vector x es no nulo y devuelve 0 si son
todos nulos, si se trata de una matriz da una respuesta por cada columna
Devuelve 1 si todos los elementos en un vector x son no nulos y 0 si existe
alguno nulo y si se trata de una matriz da una respuesta por cada columna
Devuelve uno si existe y cero si no existe
Devuelve unos en magnitudes no numricas (NaN) en x
Devuelve unos en magnitudes infinitas (Inf) en x
Devuelve unos en valores finitos en x

Podemos ver muchos ms casos pero todos seran similares: ischar, isempty, isequal,

isfloat, isinteger, islogical, isnumeric, isprime, isreal, isscalar, isspace

Gua Prctica MatLAB

Ejemplo:
>> c = [Inf 0 5 -8 NaN 94];
>> exist (c) % pregunta si existe alguna variable llamada c
ans =
1
>> isnan (c) %c es NaN? devuelve 1 si es verdadero y 0 si es falso
ans =
0 0 0 0 1 0
>> isinf (c) %c es Inf? devuelve 1 si es verdadero y 0 si es falso
ans =
1 0 0 0 0 0

Funciones Matemticas

Para la simplicidad de clculo, Matlab tiene una variedad de funciones que afectan solamente a todos
los elementos de cada matriz a la que es aplicada, mas no altera el orden de estas. De ah que al
aplicarse a vectores podemos deducir la forma de operar entre vectores que es al de elemento a
elemento. La siguiente tabla nos indica las funciones matemticas ms conocidas:
Tabla de Funciones Algebraicas

Operador
abs(A)
sqrt(A)
sign(A)
exp(A)
log(A)
log10(A)
log2(A)
power(A,n)
mean(A)
diff(A)
cumprod(A)

Descripcin

Valor absoluto de A
Raz cuadrada de A
Funcin signo de A
Exponencial de A
Logaritmo natural de A
Logaritmo en base 10 de A
Logaritmo en base 2 de A
Potencia n-sima de A
Calcula la mediana de las columnas de la matriz A la
mediana de un vector A
Calcula la diferencias divididas de primer orden a las
columnas de la matriz A y lo mismo para un vector A
Devuelve el producto acumulativo de las columnas de la
matriz A y lo mismo para un vector A.

Observacin: La funcin mean al aplicarse a una matriz slo devuelve un vector fila de una cantidad
de elementos igual al de dicha matriz y un elemento si es que se aplica a un vector. La funcin diff
al aplicarse a una matriz devuelve otra matriz de igual cantidad de columnas, pero de nmero de filas
menor en una unidad de la matriz aplicada.

45

Captulo 2

Ejemplos:
>> A=[-2 4;1 -6];
>> abs(A)
ans =
2
4
1
6
>> exp(A)
ans =
0.1353
2.7183

54.5982
0.0025

>> power(A,3)
ans =
-8
64
1 -216
>> mean(A)
ans =
-0.5000

-1.0000

>> diff(A)
ans =
3
-10

Tabla de Funciones Trigonomtricas

Operador
sin(A)
cos(A)
tan(A)
cot(A)
csc(A)
sec(A)
asin(A)
acos(A)
atan(A)
sinh(A)
cosh(A)
tanh(A)
asinh(A)
acosh(A)
atanh(A)

Descripcin

Seno de A
Coseno de A
Tangente de A
Cotangente de A
Cosecante de A
Secante de A
Arco Seno de A
Arco Coseno de A
Arco Tangente de A
Seno hiperblico de A
Coseno hiperblico de A
Tangente hiperblico de A
Arco Seno hiperblico de A
Arco Coseno hiperblico de A
Arco Tangente hiperblico de A

Observacin: Para las funciones inversas asin y acos tener en cuenta que los datos deben estar
definidos entre el dominio [-1 , 1].

46

Gua Prctica MatLAB

De la matriz A, anterior definida:


>> sin(A)
ans =
-0.9093
0.8415

-0.7568
0.2794

>> sinh(A)
ans =
-3.6269
27.2899
1.1752 -201.7132
>> csc(A)
ans =
-1.0998
-1.3213
1.1884
3.5789

Funciones de fecha y hora

Tabla Principal

Operador
date
calendar
calendar(ao,mes)
Eomday(ao,mes)

Descripcin

Devuelve la fecha actual del sistema


Muestra el calendario del mes actual
Calendario del mes y ao especfico
ltimo da de mes y ao especfico

Ejemplo:
>> date
ans =
14-Feb-2012
>> calendar

S
0
5
12
19
26

M
0
6
13
20
27

Tu
0
7
14
21
28

Feb 2012
W
Th
1
2
8
9
15
16
22
23
29
0

F
3
10
17
24
0

S
4
11
18
25
0

47

Captulo 2
Operaciones con Funciones

Debemos tener en cuenta la forma de ejecucin y sobretodo del tipo de resultado que deseamos
obtener cuando realicemos las operaciones utilizando las funciones matemticas de Matlab. A
continuacin, mostramos una forma prctica de realizar los clculos:
Sea:
>> x=[0:2] % vector de 1x3
x =
0
1
2
>> y1=exp(x) % al afectar a x la dimensin no cambia
y1 =
1.0000
2.7183
7.3891

Donde:

y1 = [y1(1) y1(2) y1(3)]

>> y2=sin(x) % igualmente la dimensin de x no cambia


y2 =
0
0.8415
0.9093

Donde:

y2 = [y2(1) y2(2) y2(3)]

Pero si necesitamos calcular una expresin algebraica que depende de dos o ms funciones
matemticas, debemos recordar que cada funcin es una matriz o vector de igual dimensin que el
argumento a la cual se aplica, por lo tanto se tendra que realizar la operacin elemento a elemento.
Entonces, si queremos representar la siguiente expresin en el Matlab:
para

, el resultado debera ser:

Para lo cual realizamos en el programa lo siguiente:


>>y=exp(x).*sin(x) %
y =
0
2.2874

Donde:

y = [y1(1)*y2(1)

6.7188
y1(2)*y2(2)

y1(3)*y2(3)]

Anlogamente la divisin ser de la forma siguiente:


>>Y=exp(x)./sin(x) %
y =
0
2.2874

Donde:

Y = [y1(1)/y2(1)

48

6.7188
y1(2)/y2(2)

y1(3)/y2(3)]

Gua Prctica MatLAB

Ejercicio de aplicacin

Sea el sistema de ecuaciones lineales:

Resuelva dicho sistema y calcule el valor de E, siendo:

Solucin:
Resolvemos el sistema de ecuaciones lineales representndola en la forma matricial:
AX=b, donde A es la matriz de coeficientes, X es el vector de las variables y, b el vector de los
resultados. Entonces, tendremos lo siguiente:

Sabiendo que X=A-1b, donde

, realizamos los clculos en Matlab:

>> A=[-3 6 -2 4;4 -2 3 -5;7 8 -4 -2;5 -9 -7 8]; %ingresando matriz


>> b=[19;-11;3;-2]; % ingresando vector resultado
>> X=inv(A)*b % obteniendo el vector solucin
X =
1.0000
2.0000
3.0000
4.0000

Entonces podemos observar que:

49

Captulo 2

Pero aplicando la sintaxis de Matlab podemos resolver la expresin de E de la siguiente manera:








Por lo tanto, realizaremos la siguiente sintaxis:
>> E=(sum(X.^2)^2+prod(X))/sum(X.^X)
E =
3.2083

Ejercicios: Con sintaxis de Matlab realice lo siguiente:


a) Halle el valor del factorial de un nmero natural cualquiera.
b) La suma de los primeros 100 nmeros naturales.
c) La suma de los primeros 250 nmeros pares.
d) La suma de los primeros 250 cuadrados perfectos.
e) La suma de los primeros 250 cubos perfectos.
Solucin:
a) f=prod(1:n) % n debe ser un nmero mayor o igual a 1
b) s1=sum(1:100)
c) s2=sum(2:2:500)
Sea
>> x=1:250; % vector de los primeros 250 nmero naturales
d) s3=sum(x.^2) % suma de los 250 primeros cuadrados perfectos
e) s4=sum(x.^3) % suma de los 250 primeros cubos perfectos

50

Gua Prctica MatLAB

Indexacin de Matrices

Consiste en obtener una submatriz de otra que ya fue definida.


Sea:

donde:

Si deseamos obtener una submatriz a partir de A, entonces haremos lo siguiente:

Ejemplo:
>> P=round(50*rand(6,8)) % creando una matriz aleatoria
P =
41
14
48
40
34
35
35
38
45
27
24
48
38
2
16
40
6
48
40
33
37
14
48
9
46
48
7
2
20
2
2
24
32
8
21
42
33
5
22
22
5
49
46
47
9
41
19
32
>> subP1=P([3 5 6],[2 3 5 7 8])
subP1 =
48
8
49

40
21
46

37
33
9

48
22
19

9
22
32

Un caso particular es cuando deseamos extraer una fila o una columna, pues normalmente tendramos
que hacer lo siguiente:
>>Pf5=P(5,[1:8]) % Obtencin de la 5ta fila
Pf5 =
32
8
21
42
33
5
22

22

51

Captulo 2

En este caso involucra un vector que especifica a todas las cantidades de columnas, si eso ocurre,
podemos abreviar la sintaxis, que realizar accin semejante, de la siguiente manera:
>> Pv5=P(5,:) % obtencin de la 5ta fila
Pv5 =
32
8
21
42
33
5
22
22
>>Pc3=P(:,3) % obtencin de la 3ra columna de P
Pc3 =
48
24
40
7
21
46

Conocido esto, nos resultar fcil eliminar una(s) fila(s) o columna(s) si es que asignamos a estas
el valor del vaco.
>> P
P =

41
45
6
46
32
5

14
27
48
48
8
49

48
24
40
7
21
46

40
48
33
2
42
47

34
38
37
20
33
9

35
2
14
2
5
41

34
38
37
20
33
9

35
2
14
2
5
41

35
16
48
2
22
19

38
40
9
24
22
32

>> P([2 5],:)=[]


P =
14
40
34
48
33
37
48
2
20
49
47
9

35
14
2
41

35
48
2
19

38
9
24
32

35
16
48
2
22
19

38
40
9
24
22
32

>> P(:,[1 3])=[]


P =
14
27
48
48
8
49

40
48
33
2
42
47

Observacin: Slo es posible eliminar filas o columnas de forma completa.

52

Gua Prctica MatLAB

Concatenacin de matrices (Agrupacin)

Consiste en agrupar 2 o ms matrices para formar una de ordenmayor. Se mantiene las caractersticas
de cada matriz, porque son las variables que representan a estas con las que se realiza la
concatenacin. Por su forma de agrupacin se definen dos tipos:
Concatenacin Horizontal: Para agrupar de esta forma a un conjunto de matrices se debe tener
en cuenta que el nmero de filas de estas deben ser iguales y se agruparn como elementos de
un vector fila.
Concatenacin Vertical: En este caso la agrupacin se realizar con matrices que tienen igual
nmero de columnas y se agruparn como elementos de un vector columna.
Ejemplo:
% Generando las matrices R3x5, T2x5 y W3x1
>>R=round(32*rand(3,5))
R =
18
24
18
17
4
29
24
2
25
18
9
12
2
30
15
>>T=round(16*rand(2,5))
T =

0
3
5
3
5
13
8
10

4
10

>> W=round(56*rand(3,1))
W =
39
42
25

Se observa que R y W tienen igual cantidad de filas,adems R y T tienen la misma cantidad de


columnas. Entonces:
>>I1=[R W] % Concatenacin horizontal entre R y W
I1 =

18
24
18
17
4
39
29
24
2
25
18
42
9
12
2
30
15
25
>>I2=[R;T] % Concatenacin vertical entre R y T
I2 =
18
24
18
17
4
29
24
2
25
18
9
12
2
30
15
0
3
5
3
4
5
13
8
10
10

53

Captulo 2
Ejercicios propuestos

1. Sea la matriz cuadrada:

a)
b)
c)
d)
e)

Construya una matriz aadiendo la matriz identidad de rango 3 a la derecha de la matriz A.


Sume a la tercera fila, la primera fila multiplicada por -3.
Cambie la primera columna de A por la tercera.
Construya una nueva matriz cuyas columnas sean las columnas 1ra y 3ra de A.
Construya una nueva matriz cuyas filas sean las columnas 1ra y 3ra de A.

2. Sea la matriz cuadrada:

a)
b)
c)
d)
e)

Halle el valor mnimo dentro de cada fila de A.


Ordene los elementos de A en orden descendente dentro de cada columna.
Ordene los elementos de A en orden ascendente dentro de cada fila.
Forme una lista con los elementos de A ordenada de forma ascendente.
Halle el mximo en valor absoluto de los elementos de la matriz A.

3. Con una sola orden de MATLAB cree una matriz aleatoria 4x4 de nmeros reales entre -5 y 5.
Indicacin: Ejecute help rand para saber cmo generar nmeros aleatorios en distribuciones
uniformes (randn se emplea para distribuciones normales).
4. En una sola orden de MATLAB cree una matriz 3x5 cuyo nico elemento sea el 7.
5. Con una sola orden de MATLAB cree una matriz aleatoria 4x4 de nmeros enteros entre -5 y 5.
6. Considere la siguiente orden de MATLAB: A=magic(5). En una sola orden:
a)
b)
c)
d)

Defina una matriz B formado por las filas pares de la matriz A.


Defina una matriz C formado por las columnas impares de la matriz A.
Defina una vector d formado por la tercera columna de la matriz A
Elimine la tercera fila de la matriz A.

7. Sea x=0:pi/2:2*pi, con una sola orden de MATLAB cree una matriz cuya primera fila es x, su
segunda fila es el seno de cada elemento de x y cuya tercera fila es el coseno de cada elemento
de x.

54

Gua Prctica MatLAB

8. Defina un vector aformado por los cuatro primeros nmeros impares y otro bformado por los
cuatro primeros nmeros pares de varias formas distintas. Emplelos para construir la matriz:

9. Construya una matriz


Con
Con

Ejercicios ms avanzados

1. En una sola instruccin, cambie todos los valores de la diagonal de una matriz cuadrada a cero.
2. En una sola instruccin, sustituya todos los valores de la diagonal de una matriz cuadrada por los
elementos de un vector dado.
3. Ordene los elementos de una matriz del menor a mayor manteniendo su forma (indicacin:
emplee la orden reshape).
4. En una sola instruccin, ponga a cero todos los elementos negativos de una matriz.
5. En una sola instruccin, ponga a cero todos los elementos de una matriz que estn entre -1 y 1.
(La conjuncin lgica es &).
6. De tres formas distintas (cada una en una sola instruccin), averigue el nmero de elementos de
una matriz, de forma que al final tengamos un nmero.

55

Captulo

Programacin
en Matlab

Un lenguaje de programacin es un lenguaje que puede ser utilizado para controlar el comportamiento
de una mquina, particularmente una computadora. Consiste en un conjunto de smbolos y reglas
sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones,
permite especificar de manera precisa sobre qu datos de una computadora debe operar, cmo
deben ser estos almacenados, transmitidos y qu acciones debe tomar bajo una variada gama
de circunstancias. Todo esto, a travs de un lenguaje relativamente prximo al lenguaje humano
(lenguaje de alto nivel).
Todo programa en su edicin debe tener en cuenta las 3 lgicas de programacin, que se definen
como: Lgica Secuencial, Lgica Selectiva y Lgica Repetitiva.
En este captulo conoceremos cmo editar e implementar un programa utilizando la sintaxis del
Matlab, manteniendo los criterios de las lgicas en la cual se gobiernan, y que dependiendo de su
estructura podr ser reconocido como M-File.
M-FILES

La programacin en Matlab se realiza bsicamente sobre archivos M o M-files. Se los denomina de


esta forma debido a su extensin ".m". Pueden ser creados y editados desde cualquier editor de texto
comn; por ejemplo, el Bloc de Notas. Pero el Matlab incluye un lugar propio llamado editor debuggerel
cual se invoca con la instruccin edit. Si se opta por un editor externo se debe tener en cuenta que
los archivos deban ser guardados con esta extensin.
De acuerdo a su edicin, estos archivos pueden separarse en dos tipos:
Script o Archivo de Comandos
Funciones
Script: Son archivos que contiene lneas de instrucciones del Matlab, manteniendo mnimamente una
lgica secuencial en su edicin. Este archivo ya editado se guarda con un nombre especfico dando a
lugar que dichas instrucciones sean desde ese instante representadas por tal nombre, entonces, si
queremos ejecutar las instrucciones bastar con escribir dicho nombre en la ventana de comandos.
Aqu se debe notar algo importante: Todas las variables que se hayan definido o creado dentro de este
archivo, luego de su ejecucin pasarn a formar parte del workspace. Se debe tratar de que la variable
del workspace no coincida con las que aparecen en el script que se ha de ejecutar.

57

Captulo 3

Ejemplo:
Implementar un script que calcule el valor de la hipotenusa de un tringulo rectngulo cuyos catetos
tienen los valores de 12 y 17.
Solucin:
Invocamos al editor debugger.
>> edit

Iniciando la edicin del script:

El archivo fue guardado con el nombre de hipotenusa, note en la parte superior de la ventana el
nombre con el que fue guardado.
Ejecutando el script en la ventana de comandos:
>> hipotenusa
Your variables are:
a

Segn la lnea 8 del script hipotenusa la salida de la ejecucin que debe dar la instruccin who son
las variables creadas en el workspace.

58

Gua Prctica MatLAB

Funcin: En principio existen dos tipos de funciones: las funciones inline, que se insertan enla lnea
de comandos y las que se escriben en un documento de texto externo (M-File). Esta ltimaforma,
que es la evolucin natural de los ficheros script, es ms flexible y es en la que noscentraremos a
continuacin. La funcin es un M-file con cabecera de ejecucin definida, es decir tiene por primera
lnea una sintaxis definida por:
function [argumentos_salidas]=nombre(argumentos_entradas)

Donde:

Corresponde al nombre de la funcin.


argumentos_salidas:Representa a un vector de elementos o variables de retorno de la
funcin. El valor de cada uno de los elementos vara a medida que se ejecuta el algoritmo. Los
valores devueltos por la funcin convocada sern los valores que se encuentran en argumentos_
salidas en el momento en que termina la ejecucin de la funcin. La definicin de esta salida es
opcional; de no aparecer la funcin se convertir en un procedimiento, puesto que no devuelve
nada; slo acepta parmetros y ejecuta el algoritmo dado.
argumentos_entradas:Son los parmetros que recibe la funcin para
realizar su
procesamiento. Estos argumentos, durante la ejecucin, son parmetros recibidos por valor (by
value); es decir, se hacen duplicados de los parmetros y en estos sobre los cuales se realizan
todas las modificaciones.
nombre:

Contrario a los scripts, todas las variables que se definan dentro del cuerpo o definicin de la funcin,
si la funcin es invocada desde la ventana de comandos, no pasarn a formar parte de nuestro
workspace.
Nota

Es muy importante que guardemos el archivo con el mismo nombre de la funcin definida en la cabecera.
De no hacer esto ser un error

La funcin solamente se aplica y es de la siguiente manera:


>>[variables_de_salida]=nombre(argumentos_entradas)

Ejemplo:
Vamos a crear una funcin que obtenga el conjunto solucin para un sistema de n ecuaciones
lineales compatible determinado, haciendo uso de una matriz A de coeficientes, y un vector dado B
de trminos independientes, es decir, obtendremos un X tal que AX=B. Dicho vector X ser devuelto
por la funcin.
Solucin:
Observamos que las matrices A y B son los argumentos de entrada, y particularmente estn definidas
as:
, las cuales ingresamos de esta manera:
>> A=[1 0 2;5 4 1;-2 1 -1];
>> B=[12;4;-8];

59

Captulo 3

Entonces, editamos nuestro cdigo para la funcin:

Note que el archivo fue guardado con el mismo nombre solucin que de la funcin.
Aplicamos la funcin de la siguiente manera:
>> Xo=solucion(A,B)
Xo =
0.5714
-1.1429
5.7143

inline: Permite crear en lnea una funcin que representar a una expresin algebraica.
Sintaxis:

var = inline('Expresin matemtica en forma de cadena')

Ejercicio:
Usando un archivo de funcin en MATLAB para la siguiente funcin:
La entrada de la funcin ser x, y la salida ser y. Escriba la funcin de forma que xpueda ser un
vector, y utilcela para calcular el valor de la expresin evaluada en x e [-2,2] siendo x entero.
Solucin:
Usando funciones en lnea, escribiremos en el editor lo siguiente:
1
2
3

60

x=[-2:2]; % extension de x como vector


f=inline('0.9*x.^4-12*x.^2-5*x'); % funcion f(x)
y=g(x) % evaluando la funcion f en los valores de x

Gua Prctica MatLAB

Guardando el archivo con el nombre sol_inline y ejecutando, tendremos:


>> sol_inline
y =
-23.6000
-6.1000

-16.1000

-43.6000

Funciones de Ingreso y Salida de datos

Normalmente al realizar un M-File nos vemos en la necesidad de interactuar con el usuario del
programa, ya sea para solicitar ingreso de datos o mostrando resultados en pantalla. Estas acciones
estn definidas en Matlab como funciones in/out de datos. A continuacin especificamos algunos de
estos que son muy utilizados en la edicin de un cdigo:
input: Permite al usuario ingresar un conjunto de datos desde el teclado previa exhibicin de una
cadena de texto como mensaje de solicitud, dicho ingreso de dato es asignado a una variable.
Sintaxis:

var = input('cadena de mensaje');


var = input('cadena de mensaje','s');

La primera sintaxis permitir el ingreso de datos como si estuviramos en la ventana de comandos


y la segunda forma especifica que todo lo ingresado ser una cadena de texto, es decir los datos
ingresados sern ya de tipo char.
Ejemplo:
>> w=input('Ingresar un vector fila de 3 elementos: ');
Ingresar un vector fila de 3 elementos: [6 9 1]
>> w % invocando a la variable w
w =
6
9
1

En este caso se tuvo que ingresar el vector fila [6 9 1] para que termine la ejecucin realizada. La
variable w tom el valor del vector ingresado.
Se muestra a continuacin cmo ingresar una cadena de texto desde el teclado:
>> n=input('Nombre: ','s');
Nombre: Rosario Taipe
>> n
n =
Rosario Taipe

disp: Muestra en pantalla lo representado por una variable.


Sintaxis:
var = disp(variable);

61

Captulo 3

Ejemplo:
>> n=input('Nombre: ','s');
Nombre: Rosario Taipe
>> disp(n) % muestra lo representado por la variable n
Rosario Taipe

Tambin es aceptado mostrar de forma directa una cadena de texto:


>> disp('Hola Mundo') % muestra la cadena de texto
Hola Mundo

fprintf: Se utiliza para visualizar salidas de programas (texto y datos) en la pantalla, o bien
almacenarlas en un fichero. Con este comando, y a diferencia de disp, la salida puede tener un
formato preestablecido. En este caso se puedencombinar texto y resultados numricos provenientes
de clculos o variablespredefinidas en la misma lnea. Adems, el formato de los nmeros se
puedecontrolar directamente.
Uso del comando fprintf para visualizar mensajes de texto:
>>fprintf('Mensaje en forma de cadena\n')
Nota

Para cambiar de lnea en un mensaje de texto se debe insertar el cdigo \n.

A este cdigo se le denomina Cdigo de escape.


Utilizacin del comando fprintf para visualizar datos y texto juntos:
Para visualizar texto y datos (valores de variables) juntos, el comando
siguiendo la sintaxis:

fprintf

>>fprintf('Texto %-5.2f texto adicional', nombre_variable)

El smbolo % marca
del lugar donde se
insertar el nmero
dentro del texto

62

Elementos de formato
(definen el formato del
nmero)

Nombre de la variable
cuyo valor ser
visualizado

debeutilizarse

Gua Prctica MatLAB

Los elementos del formato son:

-5.2f

Flag o bandera
(opcional)

Ancho del campo y


precisin (opcional)

Caracter de conversin
(obligatorio)

El flag o bandera, cuyo carcter es opcional, puede ser uno de los siguientes:

Caracter
+ (signo mas)
- (signo menos)
0 (cero)

Descripcin

Justificacin izquierda del nmero dentro del campo


Visualiza el carcter de signo ( + o -) delante del nmero
Aade ceros si el nmero es ms pequeo que el campo

La especificacin del ancho y precisin del campo (5.2 en el ejemplo anterior) es opcional. El primer
nmero (5 en nuestro ejemplo) es el ancho del campo, el cual nos indica el menor nmero de dgitos
en la visualizacin. Si el nmero que se visualiza esmenor que el ancho del campo, se aadirn ceros
o espacios delante del nmero encuestin. La precisin se corresponde con el segundo nmero en el
ejemplo anterior, y especifica el nmero de dgitos que se mostrarn a la derecha del punto decimal.
El ltimo elemento es el correspondiente al formato de conversin (f en el ejemplo anterior). ste es
obligatorio.
A continuacin se muestran los caracteres de conversinms utilizados:
e Notacin exponencial en minsculas (ej. 1.709098e+001).
E Notacin exponencial en maysculas (ej. 1.709098E+001).
f Notacin de punto fijo (ej. 17.090980).
g Representacin en formato corto de las notaciones e o f.
G Representacin en formato corto de las notaciones E o f.
i Entero.
Se puede obtener informacin adicional sobre estos y otros formatos utilizando la ayudade MATLAB,
el men Help (Ayuda).
Ejemplo:
Pedir al usuario por pantalla tres nmeros y responde con el mensaje: Promedio de los nmeros
ingresados es...
Solucin:
Realizando un script, en el editor escribiremos las siguientes lneas:

63

Captulo 3
1 n1=input('Ingrese el
2 n2=input('Ingrese el
3 n3=input('Ingrese el
4 prom=(n1+n2+n3)/3;
5 fprintf('Promedio de

primer numero: ');


segundo numero: ');
tercer numero: ');
los numeros ingresado es:%f\n',prom);

Guardando este script con nombre solprom1 y ejecutando tendremos:


Ingrese el primer numero: 24
Ingrese el segundo numero: 11
Ingrese el tercer numero: 26
Promedio de los numeros ingresado es: 20.333333

Sentencias de Control de Flujo

Hoy en da las aplicaciones informticas son mucho ms ambiciosas que las necesidades de
programacin existentes antao, principalmente debido a las aplicaciones grficas, por lo que las
tcnicas de programacin estructurada no son suficientes. Ello ha llevado al desarrollo de nuevas
tcnicas, tales como la programacin orientada a objetos y el desarrollo de entornos de programacin
que facilitan la programacin de grandes aplicaciones.La programacin estructurada es una tcnica
para escribir programas (programacin de computadora) de manera clara, teniendo en cuenta el
Teorema del Programa Estructurado, propuesto por Bhm-Jacopini, el cual demuestra que todo
programa puede escribirse en base nicamente a tres estructuras de control:
Secuencial
Selectica (Instruccin condicional)
Repetitiva (Iteracin, bucle de instrucciones, con condicin al principio)
Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles.
Si bien los lenguajes de programacin tienen un mayor repertorio de estructuras de control, stas
pueden ser construidas mediante las tres bsicas citadas.
Estructura secuencial: Una estructura de programa es secuencial si las instrucciones se ejecutan una
tras otra, a modo de secuencia lineal, es decir que una instruccin no se ejecuta hasta que finaliza
la anterior, ni se bifurca el flujo del programa.
Ejemplo:
1
2
3

x = 12;
y = 15;
z = x+y;

Slo es posible realizar el clculo de z si previamente se ha definido x y y.


Estructura selectiva o de seleccin: La estructura selectiva permite que la ejecucin del programa
se bifurque a una instruccin (o conjunto) u otras, segn un criterio o condicin lgica establecida,
slo uno de los caminos en la bifurcacin ser el tomado para ejecutarse. Para ello contamos con las
instrucciones de control ifelseend y switchcaseend.

64

Gua Prctica MatLAB

if else end

Diagrama de Flujo: Sintaxis:


if

condicin

<Sentencias1>;
else
<Sentencias2>;
end

condicin: Es una expresin lgica o relacional cuyo resultado es de tipo lgico, valor de 1 (uno) si
el resultado es verdadero 0 (cero) si el resultado es falso.
Sentencias1: Es un conjunto de sentencias a ejecutarse siempre que la respuesta de condicin sea
verdadera.
Sentencias2: Es un conjunto de sentencias a ejecutarse siempre que la respuesta de condicin sea
falsa.
Casos Especiales:
Ausencia de clusula else
Diagrama de Flujo: Sintaxis:
if

condicin

<Sentencias>;

end

65

Captulo 3

Respuesta solamente ante la clusula else


Diagrama de Flujo: Sintaxis:
if

condicin

% sentencia nula

else

<Sentencias>;

end

if elseif else end (Anidado)

Diagrama de Flujo: Sintaxis:


if

condicin

<Sentencias1>;
elseif

<Sentencias2>;
elseif

<Sentencias3>;
.
.
.
elseif

<SentenciasN>;
else

end

66

<Sentencias por Defecto>;

Gua Prctica MatLAB

Ejemplo ilustrativo:
Implementar un archivo script que solicite el ingreso de dos nmeros cualesquiera y muestre en
pantalla el mayor de ambos.
Solucin: Abrimos el editor y escribimos lo siguiente:
a=input('Ingrese valor de a= ');
b=input('Ingrese valor de b= ');
if a>b

fprintf('\nEl mayor es a=%i\n',a);
else

fprintf('\nEl mayor es b=%i\n',b);
end

Guardamos el script con el nombre mayor2n, ejecutamos y probamos:


>> mayor2n % ejecutando
Ingrese valor de a= 14
Ingrese valor de b= 18
El mayor es b=18

Pero si los valores ingresados por el usuario son iguales nos damos cuenta que el resultado debe ser
diferente, por lo tanto debemos modificar el script para considerar la condicin de igualdad, entonces
tendremos lo siguiente:
a=input('Ingrese valor de a= ');
b=input('Ingrese valor de b= ');
if a>b

fprintf('\nEl mayor es a=%i\n',a);
elseif b>a

fprintf('\nEl mayor es b=%i\n',b);
else

fprintf('\na=%i y b=%i son iguales\n',a,b);
end

Guardamos y ejecutando nuevamente tendremos:



>> mayor2n % ejecutando
Ingrese valor de a= 22
Ingrese valor de b= 22
a=22 y b=22 son iguales

67

Captulo 3
switch case otherwise end (Multibifurcacin)

Diagrama de Flujo: Sintaxis:


switch condicin
case var=cte1;

<Sentencias2>;
case var=cte2;

<Sentencias3>;

.

.

.
case var=cteN

<SentenciasN>;
otherwise

<Sentencias por Defecto>;
end

Ejemplo ilustrativo:
Implementar un archivo script que calcule y muestre el valor respectivo de la funcin f para un valor
de x ingresado por el usuario, siendo la funcin de la siguiente forma:

Solucin:
Implementamos en el editor las siguientes lneas de instruccin:
x=input('x= ');
switch x
case pi/5;
case 5;
case 6.1;
otherwise;

f=sin(3*x)*exp(-x/2);
f=sqrt(x+5)*(x^2+5);
f=x^2.6;
f=0;

end
fprintf('f(%4.3f)=%f\n',x,f)

68

Gua Prctica MatLAB

Guardando el archivo con nombre valorf, ejecutamos y probamos:


>> valorf
x= pi/5
f(0.628)=0.694654
>> valorf
x= 6.1
f(6.100)=110.117811
>> valorf
x= 25
f(25.000)=0.000000

Estructura iterativa: Un bucle iterativo o iteracin de una secuencia de instrucciones hace que se
repita su ejecucin mientras se cumpla una condicin. El nmero de iteraciones normalmente est
determinado por el cambio en la condicin dentro del mismo bucle, aunque puede ser forzado o
explcito por otra condicin. Por la forma de ejecucin del bucle tenemos a la sentencia while, la cual
trabaja segn la evaluacin de condicin, y a la sentencia for, que trabaja segn el recorrido de un
contador.
while end

Diagrama de Flujo: Sintaxis:


while

condicin

<Sentencias>;
end

condicin: Es una expresin lgica o relacional cuyo resultado es de tipo lgico, valor de 1 (uno) si
el resultado es verdadero 0 (cero) si el resultado es falso.
Sentencias: Son las sentencias a ejecutarse siempre y cuando la respuesta de la condicin sea
verdadera.

69

Captulo 3

Ejemplo:
Implementar un script que calcule la suma de los 10 primeros nmeros naturales.
Solucin: Escribimos en el editor las siguientes lneas de instruccin:
k=1;
suma=0;
while k<=10
suma=suma+k;
k=k+1;
end
fprintf('Suma10=%i\n',suma)

Guardando el archivo con el nombre suma10n y ejecutando, tendremos:


>> suma10n
Suma10=55

for end

Diagrama de Flujo: Sintaxis:


for

rango(k)

<Sentencias>;
end

rango(k): Es el valor k-simo de rango que toma la variable contadora. Donde rango es un vector de
n elementos y debido a esto tendremos n iteraciones.
Sentencias: Son las sentencias a ejecutarse para cada uno de los valores del contador.
Si consideramos rango=[4 11 13], entonces tendremos 3 iteraciones y rango tomar el valor del
dato que se encuentra en la posicin numricamente igual al nmero de iteracin. La primera para
k=1 tomar el valor de rango(1)=4, para la segunda iteracin, es decir k=2, tomar el valor de
rango(2)=11 y para la tercera, k=3, tomar el valor de rango(3)=13.

70

Gua Prctica MatLAB

Ejemplo: (igual al anterior)


Implementar un script que calcule la suma de los 10 primeros nmeros naturales.
Solucin: Escribimos en el editor las siguientes lneas de instruccin:
n=10;
suma=0;
for k=1:10
suma=suma+k;
end
fprintf('Suma10=%i\n',suma)

Guardando el archivo con el nombre suma10nf y ejecutando, tendremos:


>> suma10nf
Suma10=55

Sentencias especiales

continue (sentencia de salto)


Pasa el control a la siguiente iteracin de los bucles for y while en el cual aparezca, salteando al
posible conjunto de sentencias del cuerpo del bucle que la sucedan.
for rango(k)
sentencias1;
if condicin
sentencias2;
continue
end
sentencias3;
end

El cuerpo del bucle for contiene una sentencia condicional


if que evala una condicin.
La sentencia de salto continue se ejecutar siempre que la
evaluacin de la condicin resulte verdadera.
Al ejecutarse continue se iniciar una nueva iteracin,
salteando las instrucciones que preceden a continue, es
decir a sentencias3.

break (sentencia de ruptura)


Termina la ejecucin de un bucle for o while. Las sentencias que aparezcan despus de esta sentencia
no se ejecutarn.
for rango(k)
sentencias1;
if condicin
sentencias2;
break
end
sentencias3;
end

La sentencia de ruptura break al ejecutarse finalizar el


ciclo del bucle for obviando la ejecucin de las sentencias
posteriores, es decir las sentencias3.

71

Captulo 3
Ejercicios de Aplicacin

1. Dado el vector v=[-1,3,6,11,-15,2,-7,-18], implemente un script que calcule y muestre los


valores de los resultados al sumar todos los nmeros positivos y todos los nmeros negativos.
Solucin:
v=[-1,3,6,11,-15,2,-7,-18];
Sn=0; Sp=0;
for k=1:length(v)
if v(k)>=0

Sp=Sp+v(k);
else

Sn=Sn+v(k);
end
end
fprintf('Suma Positivos=%i\n',Sp)
fprintf('Suma Negativos=%i\n',Sn)

2. Implemente una funcin de nombre facto que calcule el factorial de un nmero cualquiera; el
programa deber responder ante el ingreso del dato.
3. Implemente un script que calcule la sumatoria de los primeros n nmeros cuadrados perfectos.
Solucin:
n=input('n= ');
Scp=0;
for k=1:n
Scp=Scp+k^2;
end
fprintf('Suma=%i\n',Scp)

4. Implemente una funcin de nombre exponencial que calcule la aproximacin de ex por la serie de
Maclaurin, con un error de 10-4, donde x y n son ingresados por el usuario.

5. Dada la ecuacin de 2do grado:


, implemente un script que calcule y muestre las
races de dicha ecuacin y de qu tipo son dependiendo de su discriminante, donde a, b y c son
ingresados por el usuario.
Solucin:

72

Gua Prctica MatLAB

a=input('a= ');
b=input('b= ');
c=input('c= ');
d=b^2-4*a*c;
if d>0
disp('Raices Reales')
elseif d==0
disp('Raices Reales Iguales')
else
disp('Raices Complejas')
end
x1=(-b+sqrt(d))/2;
x2=(-b-sqrt(d))/2;
fprintf('x1=%8.6f\nx2=%8.6f\n\n',x1,x2)

6. Implemente un script que muestre en pantalla la siguiente lista de artculos de una tienda:
[1] ZapatosS.200.00
[2] Pantalones.S.100.00
[3] Camisas..S. 80.00
Y que el programa permita al usuario elegir el tipo de artculo a comprar, adems que pueda
ingresar la cantidad que desea comprar. Finalmente el programa deber mostrar el valor total a
pagar.

Ejercicios Propuestos

1. Escriba un programa que permita determinar si un nmero entero dado es par o impar. (Utilizar
el operador mod).
2. Utilizando el operador relacional > (mayor que), escriba un archivo.m que permita definir si un
nmero a es mayor que un nmero b. El programa debe admitir ingresar los nmeros a y b, e
imprimir el resultado a es mayor que b, o a es menor que b, o a es igual a b.
3. Implemente un programa que permita ingresar un vector con N nmeros y, posteriormente, permita
evaluar la media aritmtica.
4. Implemente un programa que d como resultado los nmeros primos menores que un nmero
dado n (positivo y entero).

73

Captulo 3

5. Imprima los mltiplos de 7 existentes entre dos valores m y n pedido al usuario. Modifique el
algoritmo para que calcule cuntos nmeros hay y su suma.
6. Solicite al usuario dos nmeros n y k y calcule (combinaciones de n elementos tomados de k en k).
7. Disee un algoritmo que permita calcular la posicin (fila y columna) de la mayor componente de
una matriz pedida al usuario.
8. Realice un programa en Matlab que calcule el centro de masas de un sistema de partculas en
3D. Inters: Sumatorios y medias.
9. Cree un archivo.m que permita evaluar las series. Los argumentos de entrada son x y n, donde n
es el nmero de trminos que se evalan en la serie y x es un nmero real:
a)
b)
c)

74

Captulo

Grficos

MATLAB ofrece numerosas oportunidades para emplear rutinas que realicen grficas en dos y tres
dimensiones, estas grficas son alojadas en una ventana para su visualizacin donde existe una
paleta de comandos que permiten:
Aadir texto en posiciones deseadas.
Aadir flechas o lneas.
Seleccionar alguna de las componentes del grfico.
Rotar el grafico a criterio deseado.
Las grficas de MATLAB se pueden exportar a multitud de formatos grficos puntuales y vectoriales
(jpg, bmp, tiff, eps, png). Adems est la posibilidad de guardarlos con la extensin fig. En ese caso,
cuando se abre la figura se inicia la ejecucin de MATLAB y se ofrece al usuario lafigura tal y como
estaba cuando la guard, incluyendo modificaciones realizadas directamente sobre la ventana grfica.
En lugar de dar instrucciones que se puedan ejecutar en la ventana de comandos, en este captulo
principalmente implementaremos scripts que generen uno o varios grficos al ejecutarse.
Ventana de Figura

Todas las grficas realizadas en MATLAB deben alojarse en una ventana de figura que se identifica por
un nombre seguido de un valor de identificacin, para invocarlo debemos escribir la siguiente sintaxis:
Ejemplo:
>> figure(8) % invocando a la ventana figura 8

Esta invocacin responder mostrando a la ventana figura 8:

75

Captulo 4

Si al realizar una grfica no precisamos una ventana figura en la cual alojarla, al ejecutar el programa
esta se alojar por defecto en la ventana figura 1.
Para cerrar una ventana figura n por comandos lo podremos hacer usando la funcin close(n);
el orden de cerrar las ventanas existentes no interesa, en caso no exista la ventana la funcin
closeretornar un mensaje de error.

>> close(8) % cerrando la ventana figura 8

Funciones de Grficas en 2 Dimensiones

Funcin
plot
bar,barh
hist
stem
stairs
polar
pie
rose
compass
feather
loglog
semilogx
semilogy
fill

Descripcin

Grafico de lneas en el plano cartesiano, ubicando y uniendo los puntos con


segmentos de recta.
Grafica parcela de barras verticales y horizontales
Grafica el histograma
Grfico de bastones verticales, encierra a los puntos y los proyecta al eje x.
Grfica con trazos tipo escalonado.
Grafica las expresiones en coordenadas polares
Realiza grficos de sectores.
Grafica el histograma angular, diagrama polar que muestra la distribucin de
valores agrupados de acuerdo con su rango numrico
Grafica un conjunto de flechas con origen en (0,0), cuya magnitud y
direccin estn determinadas por el mdulo de z=x+iy
Dibuja un conjunto de flechas con origen en el eje "x", cuya magnitud y
direccin estn determinada por el mdulo de y.
Realiza una grfica cartesiana con escala logartmica en los ejes
coordenados.
Realiza una grfica cartesiana con escala logartmica en el eje "x" y escala
normal en el eje y.
Realiza una grfica cartesiana con escala logartmica en el eje "y" y escala
normal en el eje "x".
Dibuja una regin poligonal cuyos vrtices son definidos por sus argumentos.

La funcin ms estndar en ser utilizada es el plot. A continuacin mostramos la caracterstica de


sus sintaxis:
plot(dominio,rango,'caractersticas')
plot(D1,R1,'caract1',D2,R2,'caract2',,Dn,Rn,'caractN')

76

Gua Prctica MatLAB

La primera sintaxis realiza solamente una grfica y la segunda es la forma para realizar hasta N
grficas en un mismo eje cartesiano.
El argumento 'caractersticas' est conformado por 3 caracteres que especifican algunas
propiedades para la grfica a realizarse con la funcin plot. El primer carcter nos especifica el tipo
de trazo a mostrar, el segundo especifica el color de lnea y el tercer carcter especifica la marca del
punto.
Caractersticas de la Grfica

Tipo de lnea
-:
-.
x
o
+

Continua
Discontinua
Punteada
Guin y Punto
Equis
Circunferencias
Cruces

Color de Lnea
b
r
g
c
m
y
k

Tipo de Marca

Azul
Rojo
Verde
Cian
Magenta
Amarillo
Negro

.
+
o
x
s
d
p

Punto
Cruz
Circunferencia
Equis
Cuadrado
Diamante
Pentagrama

Existen mucho ms atributos que podemos asignar a las grficas realizadas, como por ejemplo el
tamao de la marca de punto, el color de fondo y del borde del mismo, as como el ancho de lnea del
trazado. En el transcurso de las aplicaciones se irn mostrando algunos de estos para su futuro uso.
Graficas en 2D

Puntos: Para ubicar puntos en el plano cartesiano es necesario ubicar los valores de las abscisas de
cada par ordenado en un vector y sus respectivas ordenadas en otro vector teniendo en cuenta que
estas deben estar en la misma ubicacin que ocupan sus abscisas.
Ejemplo:
Sean los siguientes puntos:
dichos puntos en el plano cartesiano.

, implemente un script para representar

Solucin: Siguiendo la definicin dada escribimos las siguientes instrucciones:


x=[-2 1 3 6];
y=[-1 1 -2 3];
plot(x,y,'ro') % note que obviamos el 1er caracter

Lo guardamos con el nombre de grafo1.m, lo ejecutamos y visualizando la ventana figura tendremos


lo siguiente:

77

Captulo 4

Debido a que le dimos solamente


atributos de color y marca de punto,
el plot nos muestra esta grfica
que por defecto est alojada en la
ventana figura 1.
Note adems que la extensin
del eje X y del eje Y lo asumi el
programa por defecto tomando los
valores mnimos y mximos de
cada vector. Si queremos ajustar
nuevas extensiones en los ejes,
debemos utilizar la funcin axis.

axis: Permite editar los ejes X e Y en extensiones deseadas.


Sintaxis:

axis([xmin xmax ymin ymax])

Agregando la funcin axis en el script anterior, tendremos el siguiente resultado:


x=[-2 1 3 6];
y=[-1 1 -2 3];

plot(x,y,'ro')

axis([-3 7 -3 4])

78

Gua Prctica MatLAB

MATLAB contiene funciones que nos permiten agregar algunas caractersticas para especificar la
grfica saliente:

Funcin
grid on, grid off
xlabel('cadenax')
ylabel('cadenay')
title('cadena')
legend('cad_Leg')
axis([xo xf yo yf])
hold on, hold off
text(x,y,'cadena')
gtext(x,y,'cadena')
ginput(n)

Descripcin

Activa o desactiva el enrejado de los ejes.


Coloca la etiqueta cadenax al eje x.
Coloca la etiqueta cadenay al eje y.
Coloca el titulo cadena a la grfica.
Coloca la leyenda cad_leg a la grfica
Sita los valores mnimos y mximos para los ejes
Congela y descongela a la ventana figura para poder superponer
otra grafica en los mismos ejes.
Ingresa automticamente el texto cadena en el plano
cartesiano iniciando la escritura en (x,y)
Ingresa manualmente (con mouse) el texto cadena en el plano
cartesiano iniciando la escritura en (x,y)
Importar n puntos de una grfica con el mouse, dichos puntos
son almacenados en una variable asignada.

Por ltimo, al archivo grafo1.m le damos sus atributos para mostrar una mejor salida de nuestra
grfica, el usuario puede visualizar el cdigo del archivo que se encuentra en el disco, teniendo como
resultado la siguiente grfica:

79

Captulo 4

Cartesianas:

Para hacer grficas de funciones de una variable con MatLab, primero tenemos que crear una tabla
de valores de la variable para despus dibujar la funcin. Debemos tener en cuenta que una curva es
la unin de infinitos puntos, debido a eso es necesario contar con una cantidad de datos necesarios
para realizar la simulacin.
Ejemplo:
Realizar la grfica de la siguiente expresin:
x=linspace(-1,5,30);
y=sin(x.^2);
plot(x,y)

% vector dominio
% vector rango
% grafica por defecto

Guardando el archivo con el nombre grafo2.m y ejecutando, tendremos:

Notamos las imperfecciones de la curva debido a la poca cantidad de informacin, pero si aumentamos
la cantidad de puntos al vector x, ver cdigo en el disco, tendremos una curva bastante suave con
respecto a la primera:

80

Gua Prctica MatLAB

Ahora supongamos que queremos representar la funcin:

Para poder graficar f(x), generamos una tabla de valores en el dominio en el que queramos dibujar la
funcin y definimos la funcin, multiplicando cada trozo por el ndice lgico que describa el lugar en
el que queremos dibujarlo.
Implementando en el editor las instrucciones a continuacin y guardando el archivo con nombre
grafo3.m y ejecutando, tendremos:
x=linspace(-2,3,3000);
y1=(x.^2).*(x<0);
y2=1.*((0<=x)&(x<1));
y3=(-x+2).*(1<=x);
y=y1+y2+y3;
plot(x,y,'-b','linewidth',2)
grid on
title('Funcion definida a trozos','fontsize',16)

81

Captulo 4

Utilizando las dems funciones para las grficas tendremos lo siguiente:

stem: stairs:
>>x=-3:0.1:2*pi;
>>y=exp(-x/2).*sin(2*x);
>>stem(x,y)

bar: loglog:
>> x=0:0.1:pi;
>> y=sin(x);
>> bar(x,abs(y))

Paramtricas:

>>x=0:0.1:2*pi;
>>y=sin(x);
>>stairs(x,y)

>> x=0:0.1:pi;
>> y=sin(x);
>> bar(x,abs(y))

Se observa que tanto el domino como el rango dependen de una variable.


Ejemplo:
Graficar la siguiente curva paramtrica:

Implementamos en un editor las siguientes instrucciones:


t=0:0.1:5*pi;
x=2*t.*cos(t);
y=2*t.*sin(t);
plot(x,y,'linewidth',2)
grid on

82

Gua Prctica MatLAB

Guardamos el archivo con nombre grafo4.m y lo ejecutamos, entonces tendremos la siguiente curva
paramtrica:

Polares:

Ejemplo:
Graficar la siguiente curva polar:

para

Solucin:
Editando un archivo las instrucciones siguientes:
u=linspace(0,2*pi,360);
r=3-2*cos(3*u);
polar(u,r);

Guardamos con nombre grafo5.m y ejecutamos para ver la curva polar.

83

Captulo 4

quiver: Permite crear los vectores velocidad en los puntos de una grfica.
Sintaxis:

quiver(x,y,z,dx,dy,dz)

Graficar los vectores velocidad sobre la curva:


Resolviendo en la ventana de comandos:
>> t=linspace(0,2*pi,20);
>>quiver(cos(t),sin(t),-sin(t),cos(t))
>>axis square

El nmero de vectores velocidad que aparecen es 20. Si el nmero de puntos que se indica con el
comando linspacees demasiado grande, puede que no se aprecie con claridad la grfica, ya que sta
ser el nmero de vectores velocidad que se mostrar.
La grfica resultante es:

El comando comet produce un resultado dinmico, la forma de ejecucin es similar al plot, pero esta
vez aparece un circulito (el cometa) que va dibujando la curva. La velocidad de ejecucin depende
del nmero de puntos que hayamos generado con el comando linspace.Ingrese las siguientes lneas
y verifique la salida grfica que resulta de la aplicacin.
>> t=linspace(-5,5,1000);
>> comet((t.*(t.^2-1))./(t.^2+1),(2*(t.^2-1))./(t.^2+1))

84

Gua Prctica MatLAB

hist:
>> x = -4:0.1:4;
>> y = randn(length(x),1);
>> hist(y,x)

pie:
>> x = [1 3 0.5 2.5 2];
>> explode = [0 1 0 0 0];
>> pie(x,explode)

Grficos Mltiples

La funcin plot puede realizar varias grficas superpuestas en una misma ventana figura, las
propiedades las adopta el MATLAB si es que no son especificadas.
Ejemplo:
>>
>>
>>
>>

x=0:0.1:4;
y1=4*exp(-x).*sin(2*x);
y2=2*cos(x);
plot(x,y1,x,y2)

85

Captulo 4

Utilizando la funcin hold antes de un nuevo comando que grfica podemos superponer ms grficas
en una sola ventana figura.
>>
>>
>>
>>
>>
>>
>>
>>

x=0:0.1:5;
y1=3*sin(x);
y2=cos(x);
plot(x,y1)
hold on
% congela la ventana
plot(x,y2)
grid on
hold off
% descongela la ventana

subplot: Permite que una ventana figura pueda dividirse en varios ejes, dividindose en filas y columnas,
asignando a cada divisin un nmero identificador, permitiendo as alojar ms de una grfica.
Sintaxis:

subplot(#filas,#columnas,posicin)

Ejemplo:
Realizar la grfica de las siguientes expresiones en una sola ventana figura.
a)
b)
c)
d)

86

Gua Prctica MatLAB

Solucin:
x=linspace(0,4,300);
y1=8*sqrt(x);
y2=6*sin(4*x);
y3=x.^2;
y4=10*exp(-x).*cos(4*x);
subplot(2,2,1)
plot(x,y1,'linewidth',2)
title('Curva 1')
subplot(2,2,2)
plot(x,y2,'linewidth',2);title('Curva 2')
subplot(2,2,3)
plot(x,y3,'linewidth',2);title('Curva 3')
subplot(2,2,4)
plot(x,y4,'linewidth',2);title('Curva 4')

Tenga en cuenta que cada grfica est sujeta independientemente al manejo de sus diferentes
caractersticas, es decir: color, trazo, marca, etiqueta de ejes, ttulo, leyenda, etc. Pueden ser
diferentes para cada grfica.

87

Captulo 4
Funciones de Grficas en 3 Dimensiones

Funcin
plot3
fill3
stem3
comet3
bar3
pie3
mesh
meshc
meshz
surf
surfc
surfl
waterfall
contour
contour3
sphere
cylinder
ribbony
quiver3

Descripcin

Grafica un conjunto de puntos en los ejes tridimensional.


Dibuja una regin poligonal cuyos vrtices son los elementos de
los vectores que representan a los datos en los ejes XYZ.
Grafica bastones verticales, iniciando desde el plano XY
Realiza el trazado de la curva en forma dinmica
Grafica de barras tridimensionales
Grafica sectores cilndricos tridimensionales
Grafica una superficie z=f(x,y)
Grafica una superficie z=f(x,y) y proyecta las curvas de nivel en
el plano XY.
Grafica una superficie z=f(x,y) cerrando la grafica con las
fronteras del dominio.
Grafica una superficie z=f(x,y) dando relleno de color a cada una
de las celdas.
Grafica una superficie z=f(x,y) , proyectando las curvas de nivel
al plano XY
Grafica una superficie z=f(x,y) considerando una iluminacin en
formato bsico.
Grafica una superficie z=f(x,y) en forma de cascada.
Grafica las curvas de nivel en 2D y 3D
Grafica una esfera unitaria.
Grafica una superficie de revolucin para f(t) en el dominio t
Grafica una superficie z=f(x,y) como cintas tridimensionales
Grafica los vectores velocidad en los puntos de las coordenadas
tridimensionales.

Puntos: En tres dimensiones debemos tener en cuenta que ahora cada punto tendr tres coordenadas,
por lo tanto tendramos tres vectores que alojan al conjunto de abscisas, ordenadas y altura.
Ejemplo:
Sean los siguientes puntos:
representar dichos puntos en el plano cartesiano.

, implemente un script para

Solucin: Generando el script grafo3D1.m, ubicarlo en el CD, podemos visualizar las siguientes
salidas:

88

Gua Prctica MatLAB

plot3(x,y,z,'ro'):

stem3(x,y,z,'r')

Cartesianas:

Cada valor para los ejes estar representado por 3 vectores del mismo orden.
Ejemplo:
Graficar la curva cartesiana representada por:
Solucin:
Editando en un script de nombre grafo3D2.m las siguientes instrucciones:
x=linspace(0,10,300);
y=2*sqrt(x+1);
z=7*exp(-y/4).*cos(4*x);
plot3(x,y,z)
grid on

Ejecutando el archivo, tendremos la grfica siguiente:

89

Captulo 4

Paramtricas:
Ejemplo:
Realizar la grfica de la siguiente expresin:

Solucin: Implementando las siguientes lneas de instruccin:


t=linspace(0,5*pi,300);
x=3*t.*cos(t);
y=3*t.*sin(t);
z=t.^2;
plot3(x,y,z)
grid on

Guardando el archivo con el nombre grafo3D3.m y ejecutando, tendremos:

A partir de las formas de graficar mostradas hasta ahora, podemos deducir que el usuario ya cuenta
con las herramientas necesarias y suficientes para interpretar grficamente cualquier expresin
matemtica en coordenadas cartesianas, paramtricas y polares, ya sea en 2D o en 3D.

90

Gua Prctica MatLAB

Superficies

MATLAB es mucho ms prctico y funcional al momento de representar las superficies 3D, dispone de
una gran variedad de formatos para dibujar grficas de funciones de dosvariables y una componente,
ya sea por mallado, lneas de contorno y cuadrculas de colores que son las usadas. Para visualizar
correctamente las superficies es adecuado y preciso que estn representados como funciones
definidas sobre un domino rectangular en cualquiera de los planos de referencia.
Para trabajar con regiones rectangulares, definiremos los vectores de abscisas
y de
ordenadas
, que representarn a los ejes, entonces la regin de dominio rectangular
estar definida por el conjunto de coordenadas siguientes:
,
generando una matriz de orden nm.
Para facilitar la creacin del enrejado
la siguiente sintaxis:

en MATLAB, utilizaremos la funcin meshgridque tiene

[xmatriz,ymatriz]=meshgrid(xvector,yvector)

Forma z=f(x,y)

Para graficar funciones de dos variables


, al igual que para funciones de una variable,
primero hay que disponer de datos en una extensin del eje x y tambin otro conjunto de datosen
una extensin del eje y. Seguidamente tenemos que generar un mallado interceptando los datos en el
plano XY. Para ello utilizaremos la funcin meshgrid. A continuacin mostramos un ejemplo:
>> x=-1:0.1:1; % orden: 1x21
>> y=-2:0.1:2; % orden: 1x41
>> [xm,ym]=meshgrid(x,y); % enrejado matriz de 21x41


Y finalmente expresaremos la funcin z con las variables enrejadas:
>> zm=exp(-xm.^2-ym.^2).*sin(-xm.^2-ym.^2);

Visualizar la superficie se puede lograr de las siguientes formas:


>> mesh(xm,ym.zm)

mesh(xm,ym,zm)

>> surf(xm,ym,zm)

surf(xm,ym,zm)

91

Captulo 4

waterfall(xm,ym,zm) ribbon(xm,ym,zm)

surf(xm,ym,zm); shading flat

surf(xm,ym,zm); shading interp

SOMBRAS Y COLORES Para conseguir efectos de sombreadosy colores diferentes se pueden consultar

todas las posibilidades de loscomandos colormap y shading. Algo que resulta tambin interesante es
aadir una escala de colores al dibujo, lo que nos permite conocer las alturas (coordenada z) de los
diferentes puntos de la grfica, esto se consigue con el comando colorbar (despus de dibujada la
grfica). A continuacin mostraremos el uso de estos comandos:
>>[x,y]=meshgrid(linspace(-1,1,50));
>>z=cos((x.*y)./(x.^2+y.^2+1));
>>surf(x,y,z)
>>shading interp
>>colorbar

Como se puede observar, los puntos ms altos


corresponden a los colores ms calientes y los
puntos ms bajos de la grfica estn coloreados
con colores fros.

92

Gua Prctica MatLAB

ROTACIN DE GRFICA: Otros comandos interesantes en las grficas 3D es la que manipulan la


vista de los ejes coordenados.
rotate3d nos permite activar la rotacin de la vista utilizando el ratn sobre la figura, rotndola de
manera interactiva en tres dimensiones.
view: Especifica la posicin del espectador (el punto de vista) determinando la orientacin de los ejes. Se
especifica el punto de vista en trminos de azimut y elevacin, o por un punto en el espacio tridimensional.
view([az,el])
view([x,y,z])
Superficies Complejas

Sea la funcin compleja de variable compleja:

El comando cplxmap permite representar grficas de funciones complejas de variable compleja,


dibujando una grfica tridimensional en la que el eje X es la parte real de la variable
; el eje Y
es la parte imaginaria de la variable
y el eje Z es la parte real de la imagen de la funcin, es
decir,
.
La variable z debe pertenecer siempre al dominio constituido por el disco unidad con centro en el
origen y las coordenadas de los puntos deben estar en forma polar.
Esto se consigue utilizando previamente el comando cplxgrid(n), donde n es el nmero entero positivo.
Por ejemplo, para obtener la grfica de la funcin

realizaremos las siguientes lneas de instrucciones:

>>z=cplxgrid(12);
>>cplxmap(z,z.^2)

Obtenindose lo siguiente:

Se observa que para cada valor de z, la


es nica. Esto no es as para
imagen
cualquier funcin compleja. Por ejemplo, la
funcin
es una funcin bivaluada,
la funcin
es una funcin trivaluada,
cada z puede producir tres valores distintos
para , y as sucesivamente.

93

Captulo 4
Estadsticas

bar3: pie3:
>> x=[10 2 3 5 18 20 15 ];
>> bar3(x);

>> x = [1 3 0.5 2.5 2];


>> explode = [0 1 0 0 0];
>> pie3(x,explode)

Superficies: Generados por Funciones

Hay varios comandos en MatLab que permiten generar las grficasde superficies en R3 (superficies
que no son funciones.) Estos comandos son funciones que ya vienen programadas.
ESFERA

Se genera utilizando el comando


>>sphere(n),

donde n es el nmero de puntos en los que queda


dividido el ecuador de la esfera. Cuanto mayor sea n,
mayor sera la aproximacin a la curvatura real dela
esfera (de radio 1, centrada en el origen).Poniendo
slo >>sphere, el valor que tomar n sera 20, por
defecto. A continuacin damos un ejemplo de cmo
realizar la grfica de la esfera de la derecha:
>>sphere;axis square;title('ESFERA')

94

Gua Prctica MatLAB

Vectores Normales a una superficie

Dibujar los vectores normales a la superficie de una esfera siguindolos siguientes pasos:
Dibujar una esfera utilizando lo descrito anteriormente,
pero guardando la informacin en tres variables:
>>[x,y,z]=sphere(30); %

Utilizar el siguiente comando:


>>surfnorm(x,y,z)

Este comando tambin se puede utilizar para dibujar


los vectores normales en superficies de funciones de la
forma z = f(x; y). Para dibujarlas normales en el sentido
opuesto habra que poner surfnorm(x',y',z').

CILINDRO

El comando >>cylinder(R,n) genera automticamente un cilindro de revolucin de radio R, donde


n es el nmero depuntos de la circunferencia de la base del cilindro. Como en el caso de laesfera, si
usamos slo >>cylinder(R), el nmero n es, por defecto, 20.
Lo realmente interesante de este comando es que
tambin admiteradios variables R(t), con
.
De esta forma, puede ser utilizado para obtener
las grficas de diferentes tipos de superficies
de revolucin,donde la generatriz es una funcin
definida por R(t). Por ejemplo, siqueremos dibujar
un paraboloide de revolucin, podemos utilizar
comogeneratriz la funcin
con
,
realizaremos lo siguiente.
>>t=linspace(0,2,20);
>>r=sqrt(t);
>>cylinder(r)

95

Captulo 4
Geometra diferencial de curvas

En matemticas, la geometra diferencial de curvas propone definiciones y mtodos para analizar


curvas simples en Variedades de Riemann, y en particular, en el Espacio Eucldeo.
Longitud de arco

Dada una curva suficientemente suave (diferenciable y de clase


posicin expresado mediante el parmetro ;

), en

y dado su vector de

se define el llamado parmetro de arco como:

La cual se puede expresar tambin de la siguiente forma en la cual resulta ms fcil de recordar
Lo cual permite reparametrizar la curva de la siguiente manera:
donde:
son las relaciones entre las dos parametrizaciones.
Vectores tangente, normal y binormal: Triedro de Frnet-Serret

Dada una curva parametrizada


segn un parmetro cualquiera se define el llamado vector
tangente, normal y binormal como:

96

Gua Prctica MatLAB

Vista esquemtica del vector tangente, vector normal


y vector binormal de una curva hlice.
Estos tres vectores son unitarios y perpendiculares entre s, juntos configuran un sistema de referencia
mvil conocido como Triedro de Frnet-Serret a raz del estudio de Jean Frenet y Joseph Serret. Es
interesante que para una partcula fsica desplazndose en el espacio, el vector tangente es paralelo
a la velocidad, mientras que el vector normal da el cambio direccin por unidad de tiempo de la
velocidad o aceleracin normal.
Si la curva est parametrizada segn la longitud de arco, como se explic en la seccin anterior las
frmulas anteriores pueden simplificarse notablemente:

Donde los parmetros y anteriores designan precisamente a la curvatura y a la torsin.


Curvatura y torsin

La curvatura es una medida del cambio de direccin del vector tangente a una curva, cuanto ms
rpido cambia ste a medida que nos desplazamos a lo largo de la curva, se dice, que ms grande
es la curvatura. Para una curva parametrizada cualquiera la curvatura es igual a:

Si la curva est parametrizada por el parmetro de longitud de arco, la anterior ecuacin se reduce
simplemente a:
Adems de la curvatura se suele definir el llamado radio de curvatura, como el inverso de la curvatura.

97

Captulo 4

La torsin es una medida del cambio de direccin del vector binormal: cuanto ms rpido cambia,
ms rpido gira el vector binormal alrededor del vector tangente y ms retorcida aparece la curva.
Por lo tanto, para una curva totalmente contenida en el plano la torsin es nula ya que el vector
binormal es constantemente perpendicular al plano que la contiene. Para el caso general la torsin
viene dada por:

Si la curva est parametrizada por el parmetro de longitud de arco, la anterior ecuacin se reduce a:

Plano osculador

En cada punto de una curva, el plano osculador es el plano que contiene al su vector tangente y al
vector normal a la curva. Para una partcula desplazndose en el espacio tridimiensional, el plano
osculador coincide con el plano que en cada instante contiene a la aceleracin y la velocidad. La
ecuacin de este plano viene dada por:

Donde:

, el punto de la trayectoria.
, el vector velocidad en el punto considerado.
, las coordenadas de un punto genrico del plano osculador.

Si se tiene una partcula en la posicin , movindose con velocidad y sometida a una aceleracin
, el plano osculador viene dado por el conjunto de puntos:
Obviamente si la partcula tiene un movimiento rectilneo el plano osculador no est definido.

98

Gua Prctica MatLAB

Centro de curvatura

Ilustracin de la circunferencia osculatriz en el punto P de la curva C, en la que se muestra tambin


el radio y centro de curvatura.

En un entorno de un punto de una curva puede ser aproximado por un crculo, llamado crculo
osculador por estar contenido en el plano osculador. El radio del crculo osculador coincide con el
radio de curvatura (inverso de la curvatura). El centro de dicho crculo puede buscarse como:

O ms sencillamente en funcin del parmetro de arco como:

Teorema fundamental de curvas

El teorema fundamental de curvas que enunciamos a continuacin nos dice que conocido un punto
de una curva y su vector tangente, la curva queda totalmente especificada si se conoce la funcin de
curvatura y de torsin. Su enunciado es el siguiente:
Sea
un intervalo. Dadas dos funciones continuas X y t de a y dado un sistema de
referencia fijo (ortonormal) de , {x0; e1, e2, e3}, entonces existe una nica curva parametrizada de
,
y tales que:
1. La curva pasa por x0, y el vector tangente T a la curva en ese punto coincide con e1.
2. A lo largo de la curva pueden definirse tres campos vectoriales T(s), N(s) y B(s) llamados
respectivamente vector tangente, normal y binormal, perpendiculares entre s y tales que en el
punto inicial coinciden con e1, e2, e3 (es decir, T(0) = e1, N(0) = e2, B(0) = e3).

99

Captulo 4

3. Se cumplen las siguientes ecuaciones:

O bien escrito matricialmente:

donde el punto es la derivada con respecto al arco parmetro s.


Esto tiene implicaciones fsicas interesantes, por ejemplo, la trayectoria de una partcula queda
especificada si se conocen la posicin inicial, la velocidad inicial y la variacin en el tiempo de las
derivadas segundas (que estn relacionadas con la curvatura y la torsin). Es por eso por lo que
las leyes de Newton o las ecuaciones de Euler-Lagrange se expresan en trminos de derivadas de
segundo orden (que es necesario complementar con la posicin y velocidades iniciales).
Se pide al usuario ejecutar el script tiedro_movil.m, circ_oscula.m, plano_osculador.m y
long_arco.m, luego ingresar los datos solicitados por el cada uno de los programas para obtener
las definiciones anteriores.

Ejercicios Propuestos

1. Dibuje las grficas de las siguientes funciones eligiendo, en cada caso, una tabla de valores
adecuada para que aparezcan los aspectos ms representativos de la funcin:
a)
b)
c)
d)
e)
f)

100

Gua Prctica MatLAB

g)
h)
i)
2. Dibujar las siguientes curvas en paramtricas; en los apartados a) y b), dibujar adems los
vectores velocidad utilizando el comando quiver:
a)
b)
c)
d)
e)
f)
g)
h)
3. Dibujar las siguientes curvas polares:
a)
b)
c)
d)
e)

101

Captulo 4

f)
g)
h)
4. Graficar las siguientes curvas:
a)

b)

c)

d)

5. Representar las grficas de las siguientes funciones de 2 variables, utilizando alguno de los
comandos descritos anteriormente. Dibujar tambin algunas curvas de nivel. Tome las extensiones
adecuadas para x e y.
a)
b)
c)
d)
6. Dibujar las superficies generadas por >>cylinder(R(t),30), en cada uno de los siguientes
casos:

102

a)

b)

c)

d)

Captulo

Polinomios

En la actualidad los polinomios son utilizados en la mayora de los cursos relacionados con la
programacin de los mtodos numricos, justificando as la facilidad de manipulacin y de
implementacin en cualquiera de los lenguajes existentes. Es muy conocido tambin que en el rea
de control existe la manipulacin de polinomios de estados para representar el comportamiento a
travs del tiempo de un sistema, y es ah donde apuntamos el estudio de este captulo.
Definicin

Con MATLAB se puede trabajar con polinomios de forma sencilla.Es suficiente tener en cuenta que
un polinomio en el programa no es nada ms que un vector que contiene los coeficientes de dicho
polinomio completo y ordenado descendentemente en su grado. Es decir, si tenemos la expresin:
Podemos representarlo en MATLAB de la siguiente manera:
Por ejemplo, si deseamos escribir los polinomios:
y
Slo realizaramos lo siguiente:
>> f=[3 0 1] % polinomio f de grado 2
f =
3
0
1
>>g=[2 0 -1 3] % polinomio g de grado 3
g =
2
0
-1
3

Si deseamos ver la expresin matemtica de los polinomios haremos lo siguiente:


>> F=poly2sym(f) % expresin algebraica de f
F =
3*x^2 + 1
>> G=poly2sym(g) % expresin algebraica de g
G =
2*x^3 - x + 3

103

Captulo 5

Toda matriz est asociada a un polinomio, la cual recibe el nombre de polinomio caracterstico de la
matriz, y este se obtiene de la siguiente forma:
>>A=round(46*randn(4)); % matriz cualquiera
A =

25
84
-104
40

15
-60
-20
16

165
127
-62
140

33
-3
33
-9

>>pA=poly(A) % obtiene de polinomio caracterstico de A


pA =
1.0e+007 *
0.0000
0.0000
0.0014
0.1266
3.5530

Las races de todo polinomio se hallan de la siguienteforma:


>>fr=roots(f) % vector columna de las races de f
fr =
0 + 0.5774i
0 - 0.5774i
>>gr=roots(g) % vector columna de las races de g
gr =
-1.2896
0.6448 + 0.8645i
0.6448 - 0.8645i

Si tenemos un vector cuyos elementos son las races de un polinomio cualquiera, entonces con la
funcin poly podemosconocer a dicho polinomio de coeficiente principal igual a 1. Sea el vector r:
>>r=[-1 2 -2 -1 3];
>>R=poly(r) % polinomio de races r
R =
1
-1
-9
1
20
12
>>r=[-1 2 -2 1 3];
>>R=poly(r) % polinomio de races r
R =
1
-3
-5
15
4
-12

La cantidad de elementos de un vector que representa a un polinomio est relacionada con el grado
de dicho polinomio, dicho grado se halla as:
>>gradoF=length(f)-1 % grado del polinomio F
gradoF =
2
>>gradoG=length(g)-1 % grado del polinomio G
gradoG =
3

104

Gua Prctica MatLAB

Operaciones con polinomios

conv: Calcula el producto de 2 polinomios.


Sintaxis:

var = conv(poly1,poly2)

Ejemplo: De los polinomios f y g definidos anteriormente, tendremos:


>>FG=conv(f,g) % producto de f con g
FG =
6
0
-1
9
-1
3
>>FG=conv(g,f) % producto de g con f
FG =
6
0
-1
9
-1
3

deconv: Calcula la divisin de 2 polinomios.


Sintaxis:

cociente = deconv(poly1,poly2)
[cociente,resto] = deconv(poly1,poly2)

No debe olvidar que el grado de poly1 es mayor o igual al grado de poly2.


Ejemplo: De los polinomios f y g definidos anteriormente, tendremos:
>>cocienteGF=deconv(g,f)
cocienteGF =
0.6667
0
>>[cocienteGF,residuo]=deconv(g,f)
cocienteGF =
0.6667
0
>>residuo =
0

-1.6667

3.0000

Ahora, si deseamos sumar dos polinomios de diferentes grados, debemos tener en cuenta que
dichos polinomios sern representados en MATLAB como dos vectores de diferentes cantidades
de elementos, por lo tanto es imposible realizar la operacin con el operador "+" de forma directa,
debido a esto, debemos aumentar una cantidad de ceros a la izquierda del vector de menor nmero
de elementos para tener la misma cantidad para ambos vectores, slo as se verificar que la suma
es realizable. Las siguientes lneas de instrucciones posibilitan realizar la suma de dos polinomios de
diferentes grados.

105

Captulo 5

function s=sumapol(p,q)
n=length(p)-1;
m=length(q)-1;
if n>m
q=[zeros(1,n-m) q];
else
p=[zeros(1,m-n) p];
end
s=p+q;

Guardando esta funcin creada con el nombre de sumapoly aplicando:


>>S=sumapol(g,f) % g+f
S =
2
3
-1
4
>>S=sumapol(f,g) % f+g
S =
2
3
-1
4

polyder: Calcula la derivada de un polinomio.


Sintaxis:

var = polyder(poly)

Ejemplo: Siendo f, g y R polinomios definidos anteriormente, entonces:


>>df=polyder(f) % derivada del polinomio f
df =
6
0
>>dg=polyder(g) % derivada del polinomio g
dg =
6
0
-1
>>dR=polyder(R) % derivada del polinomio R
dR =
5
-12
-15
30
4

polyint: Calcula la primera integral de un polinomio.


Sintaxis:

106

var = polyint(poly)
var = polyint(poly,k)

Gua Prctica MatLAB

La primera sintaxis nos dar la integral con constante = 0 y la siguiente nos dar la integral con una
constante de valor k.
Ejemplo: Tomando los polinomios f y g ya definidos anteriormente:
>>If=polyint(f) % TrminoIndependiente = 0
If =
1
0
1
0
>>Ifk=polyint(f,2.6) % Trmino Independiente = 2.6
Ifk =
1.0000
0
1.0000
2.6000
>>Igk=polyint(g,-6) % Trmino Independiente = -6
Igk =
0.5000
0
-0.5000
3.0000
-6.0000

polyval: Evala a un polinomio en un valor o un conjunto de datos.


Sintaxis:

var = polyval(poly,x)

Ejemplo: Tomando al polinomio f definido anteriormente, tendremos:


>> x=16;
>> fx=polyval(f,x)
fx =
769
>> x=12:17;
>> fx=polyval(f,x)
fx =
433
508
589
676

769

Si queremos graficar al polinomio


con las siguientes instrucciones:

868

en el dominio

, implementaremos un script

f=[3 0 1];
x=-5:0.1:5;
y=polyval(f,x);
plot(x,y,'-r') % graficando al polinomio
grid on

107

Captulo 5

Guardando el archivo con el nombre poly_ejemplo.m y ejecutndolo, tendremos:

Ejercicios:

a) Sea las races de un polinomio de grado 3:


adems de su grfica para
.

, obtenga dicho polinomio

b) Halle la sumadel cociente y resto de las siguientes divisiones:


i)
ii)
iii)

Ajuste de curvas Bidimensionales

Si deseamos obtener un polinomio que se ajuste a nuestros datos experimentales teniendo la libertad
de elegir el grado de este, aplicaremos la siguiente funcin:
polyfit: Construye un polinomio de ajuste de grado n utilizando el mtodo de los mnimos cuadrados
empleando los datos en el dominio y el rango.
Sintaxis:

108

Pol = polyfit(datoX,datoY,grado)

Gua Prctica MatLAB

Ejemplo: Utilizaremos la funcin rand para obtener datos cualquiera para X e Y.


>> x=7*rand(1,10);
>> y=26*rand(1,10);
>> Pajus=polyfit(x,y,1) % polinomio de orden 1
Pajus =
0.1427
9.5543
>> Pajus=polyfit(x,y,3) % polinomio de orden 3
Pajus =
0.0248
-1.6996
11.1710
-1.6257

Ejercicio:
Implemente un archivo script que grafique los polinomios de ajuste de 1, 2, 3, 4 y adems los
datos X e Y para un dominio
, siendo estos los siguientes:

Solucin: Ejecutando el archivo pol_ajuste.m del CD, tendremos lo siguiente:

Funciones de Interpolacin

spline: Realiza la interpolacin cbica de datos.


Sintaxis:

var = spline(datoX.datoY,x)

Utiliza una interpolacin spline cbico para encontrar var,los valores de la funcin dato Y subyacente
a los valores de la x interpolante. Para la interpolacin, la variable independiente se supone que es la
dimensin final de datoY con los puntos de interrupcin definidos por x

109

Captulo 5

Ejemplo:
Las siguientes lneas guardadas como script de nombre interp_spline.m, generan una curva sinusoidal.A
continuacin, las muestras de la estra sobre una malla ms fina.
x=0:10;
y=sin(x);
xx=0:.25:10;
yy=spline(x,y,xx);
plot(x,y,'o',xx,yy)

El resultado grfico ser la siguiente figura:

interp1: Interpola datos en 1-D.


Sintaxis:

yi=interp1(x,Y,xi,'metodo')

Interpola para encontrar yi, los valores de lafuncin Ysubyacenteen los puntos en la xi vector o
matriz.X debe serun vector. Y puede serun escalar, un vector, o una matriz de cualquier dimensin,
adems metodo es la forma de cmo se desea realizar la interpolacin, siendo estas las siguientes:
nearest
linear
cubic

: Interpolacin del vecino ms cercano


: Interpolacin lineal
: Interpolacin usando polinomio cbico de tipo de Hermite.

Ejemplo: Las siguientes instrucciones guardadas con el nombre interp_INTERP1.m, generan una curva
sinusoidal gruesa e interpola sobre un eje de abscisas ms fino.
x = 0:10;
y = sin(x);
xi = 0:.25:10;
yi = interp1(x,y,xi);
plot(x,y,'o',xi,yi)

110

Gua Prctica MatLAB

El resultado grfico ser la siguiente figura:

Ejercicios:

1. Suponga que tiene el siguiente conjunto de puntos de datos:

Tiempo (s)
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0

Temperatura F
72.5
78.1
86.4
92.3
110.6
111.5
109.3
110.2
110.5
109.9
110.2

a) Genere una grfica que compare la conexin de los puntos de temperatura con lneas rectas
y con una spline cbica.
b) Calcule los valores de temperatura en los siguientes instantes: 0.3, 1.25, 2.36 y 4.48,
usando interpolacin lineal e interpolacin con spline cbica.
c) Compare los valores de tiempo que corresponde a estas temperaturas: 81, 96, 100 y 106,
usando interpolacin lineal e interpolacin con spline cbica.

111

Captulo 5

2. Efecte un ajuste de 1, 2, 3 y 4, mostrando las aproximaciones para x=3.1 y x=3.75


empleando los polinomios involucrados, finalmente muestre sus respectivas grficas. La siguiente
tabla muestra los datos a ajustar:

x
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0

112

18
20
12
0
-10
-12
0
32
90
180
308

Captulo

Interpolacin

En la prctica de la ingeniera se utilizan mucho las tablas de datos, como en el caso de las tablas
de vapor saturado en la termodinmica. En la mayora de los casos el dato necesario no se encuentra
explcito en la tabla sino entre dos valores de sta, para lo cual es necesario estimarlo de entre
los valores que presenta la tabla en un proceso conocido como interpolacin. La idea bsica de
la interpolacin es hallar un polinomio o funcin que cumpla con pasar por todos los puntos de un
conjunto de datos, y poder estimar los valores entre ellos por medio del polinomio.
POLINOMIOS DE LAGRANGE

Para ilustrar la interpolacin por polinomios de Lagrange considrese un conjunto de datos de tres
puntos. El polinomio interpolador en este caso es:

Obsrvese que en el punto slo queda el primer trmino con su numerador y denominador cancelndose
entre s. Lo mismo sucede con los dems puntos, por lo que se ve que el polinomio cumple con la
condicin de pasar por todos los puntos de datos. En general, para n puntos de datos, el polinomio
de Lagrange es:

(1)
Una forma mucho ms sencilla de ver la ecuacin 1 es en forma de cdigo, el cual se muestra escrito
para MATLAB en las siguientes lneas:
p=0;
for k=1:length(x)
den=1;
L=[];
% termino de lagrange
for r=1:length(x)
if r~=k
xp=x;
% hallando el numerador de L
xp(k)=[]; % elimino el termino k-esimo
num=poly(xp);
% numerador: polinomio de x
d1=(x(k)-x(r));% denominador de L
den=den*d1;
end
end
L=num/den;
p=p+y(k)*L
end

% Polinomio de Lagrange

113

Captulo 6

Dicho cdigo est guardado en el CD como un script de nombre polLAGRANGE.m.


A continuacin se muestra un ejemplo para ilustrar la implementacin del cdigo anterior:
Ejemplo:
Se tiene el conjunto de datos {(1,1),(2,3),(3,-1),(4,0),(5.3),(6,2)}. Muestre el polinomio
interpolador de Lagrange y la grfica que se calcula ejecutando el script polLAGRANGE.m
Solucin:
Al ejecutarse el script obtenemos lo siguiente:
*** POLINOMIO DE LAGRANGE ***
Vector X= [1 2 3 4 5 6]
Vector Y= [1 3 -1 0 3 2]
Pl(x)=

5
4
3
2
11 x
47 x
371 x
1321 x
1709 x
----- - ----- + ------ - ------- + ------ - 43
120
24
24
24
20

Deseas Graficar [Y]/[N]? : Y


Fin del Programa

114

Gua Prctica MatLAB

POLINOMIO DE INTERPOLACIN POR DIFERENCIAS DIVIDIDAS DE NEWTON

Para una cantidad mayor de nodos es mucho ms sencillo utilizar el mtodo clsico de las diferencias
divididas de Newton. Recordemos su definicin, para dos nodos se llama diferencia dividida de orden
uno a:

Mientras que la diferencia dividida de orden n se obtiene por recurrencia a partir de las anteriores
como:

El polinomio de Newton en diferencias divididas es entonces:


El programa siguiente calcula las diferencias divididas.
for i=1:n-1
for j=n:-1:i+1
y(j)=(y(j)-y(j-1))/(x(j)-x(j-i));
fprintf(' %10.4f',y(j));
end
fprintf('\n');
end

Para los datos en x e y dados abajo, el resultado al aplicarse el cdigo anterior puede verse en las
lneas siguientes. Los coeficientes del polinomio que hay que poner en la forma de Newton seran los
elementos de la columna vertical izquierda:
x =
y =

-4

-2

0.7568
-0.8330
-0.3219
-0.0537
0.0000

0
-0.9093

0.4546
0.0000
-0.0537

4
0

0.9093

0.4546
0.3219

-0.7568
-0.8330

115

Captulo 6

Ejemplo:
Se tiene el conjunto de datos {(1,1),(2,3),(3,-1),(4,0),(5.3),(6,2)}. Muestre el polinomio
interpolador de Newton por diferencias divididas y la grfica que se calcula ejecutando el script
newtoninterp.m
Solucin:
Ingresando los vectores de datos y aplicando la funcin, tendremos:
>> x=[1 2 3 4 5 6];

>> y=[1 3 -1 0 3 2];


>> t=1:0.1:6;

>> p = newtoninterp(x,y,t);

116

Gua Prctica MatLAB

Comparando las grficas obtenidas por los dos mtodos de interpolacin: Lagrange y Newton,
tendremos que el error entre ambos es mnimo:

117

Captulo

Resolucin de Sistema
de Ecuaciones Lineales

En esta parte veremos cmo usar MATLAB para resolver sistemas de ecuaciones lineales. Al igual que
en la seccin anterior usaremos tanto las rutinas internas de MATLAB como rutinaspropias creadas
por el usuario, asimismo las que se encuentran disponibles en la gua bsica de MATLAB que se
encuentra en la pgina del curso. Pero adems usaremos una combinacin de los dos procedimientos.
Comencemos con las fciles y sencillas rutinas internas de MATLAB: Si queremos resolverun sistema
de ecuaciones lineales, lo primero que debemos hacer es escribirlo en la forma matricial Ax=b.
Definicin

Un sistema de ecuaciones lineales simultneas de la forma:

..
.
Puede representarse mediante una matriz

..
.
.

A partir de la matriz A y el vector b:

Se forma la matriz aumentada:

Esta matriz aumentada representa la ecuacin vectorial

119

Captulo 7

Por ejemplo, consideremos el sistema de ecuaciones:

Este sistema se puede escribir en la forma

con:

Para resolverlo en MATLAB, primero definimos la matriz A y el vector b, as:


>> A=[2 -1 -1; 2 3 -1; 1 2 3];
>>b=[2;6;15];

Sabiendo que

, realizamos en MATLAB lo siguiente:

>>x=inv(A)*b

Con lo cual obtenemos:


x =
3.1429e+000
1.0000e+000
3.2857e+000

Otra manera de llegar a esta solucin es escribiendo


manera ms sencilla de hacerlo en MATLAB es escribiendo:

en lugar de inv(A); sin embargo, la

>> x = Ab

Donde el smbolo \ (divisin a izquierda), se usa en MATLAB para obtener la solucin delproblema
.
De los varios mtodos explicados hasta aqu para la solucin de sistemas lineales usando MATLAB,
el que ms se usa es el ltimo, principalmente porque llega a la solucin sin necesidad de hallar
la inversa de la matriz A (en realidad se usa factorizacin QR), lo que desde el punto de vista
computacional es bastante ventajoso. Se puede observar que el uso de este ltimo mtodo mejora la
velocidad de clculo de MATLAB en cerca de un 50%.
Por ltimo, slo resta decir que en el caso de trabajar con matrices y vectores de componentes
enteras o racionales, es conveniente expresar los resultados de esta misma manera para evitar la
prdida de cifras significativas. En MATLAB esto se puede hacer con la instruccin format rat, con la
que se aproximan todos los resultados a la fraccin irreductible ms cercana.

120

Gua Prctica MatLAB

Para nuestro ejemplo:


>> format rat
>> x = A\b

Produce el resultado:
x =
22/7
1
23/7

Que es la solucin exacta del sistema lineal.


APLICACIN A LOS CIRCUITOS ELCTRICOS

Muchos problemas pueden ser descritos mediante sistemas de ecuaciones lineales. Por ejemplo,
considere el circuito elctrico mostrado en la figura siguiente:

Por la Ley de kirchoff, podemos dividir en mallas adecuadamente, donde las ecuaciones de malla que
describen a este circuito son las siguientes:

A partir de las ecuaciones de malla se pueden obtener todas las corrientes, voltajes y potencial delos
elementos del circuito. Por ejemplo, la corriente de la resistencia R es .
Definiendo R, i y v:
,

Podemos expresar el juego de ecuaciones como:

121

Captulo 7

Que puede representarse mediante la matriz aumentada:

La cual puede resolverse directamente como es en el caso anterior o utilizando los mtodos de
iteracin que a continuacin conoceremos.
OPERACIONES ELEMENTALES DE REnGLN

Como la matriz aumentada representa un sistema de ecuaciones simultneas, es posible realizar las
siguientes operaciones elementales de rengln manteniendo las igualdades de las ecuaciones representadas:
Multiplicar un rengln por una constante.
Multiplicar un rengln por una constante y sumarlo a otro rengln.
Los mtodos de soluciones de sistemas de ecuaciones aplican estas operaciones sobre la
matrizaumentada en forma ordenada y repetida. En las siguientes secciones se explican los siguientes
mtodos:
Eliminacin gaussiana (Gauss)
Gauss-Jordan
Montante
ELIMINACIN GAUSSIANA

Eliminacin Gaussiana aplica operaciones de rengln para resolver un sistema de ecuaciones


simultneas; su pseudocdigo se presenta a continuacin, y en el CD su implementacin en MATLAB
con el nombre Elim_Gauss.m.

122

Gua Prctica MatLAB

Para cada rengln se define el elemento de la matriz aumentada como el pivote. Eliminacin
Gaussiana opera en dos fases. Primero, para cada rengln empezando por el primer rengln, hace
ceros en los elementos debajo del pivote (lneas 3 y 4). Segundo, para cada rengln empezando por
el ltimo rengln, hace el pivote igual a 1, y hace ceros arriba del pivote (lneas 5 a 8). La solucin
al sistema de ecuaciones queda en la ltima columna de la matriz aumentada (lnea 9).
A continuacin, se presenta la solucin del ejemplo del circuito elctrico mediante eliminacin
Gaussiana.

De donde se tiene que las corrientes de malla son:

Demostramos el resultado aplicando la funcin Elim_Gauss, cuya salida se muestra a continuacin:


>> A=[15 -5 0;...
-5 15 -5;...
0 -5 20];
>> b=[20;0;0];
>> x=Elim_Gauss(A,b)
x =
1.5172
0.5517
0.1379

123

Captulo 7
METODO DE GAUSS JORDAN

En las lneas siguientes se muestra el seudocdigo mtodo Gauss-Jordan, cuyo cdigo est
implementado en el CD con nombre Gauss_Jordan.m.


El mtodo de Gauss-Jordan es similar al de la eliminacin Gaussiana, pero primero hace el pivote
igual a 1, y luego hace ceros en toda la columna del pivote. En el mtodo de Gauss-Jordan primero
se hace el pivote igual a 1 (lnea 3), despus se hacen cero los elementos arriba y abajo del
pivote lneas 4 a 6). La solucin al sistema de ecuaciones queda en la ltima columna de la matriz
aumentada en la ltima lnea.
A continuacin se muestra la solucin del ejemplo del circuito elctrico mediante el mtodo de
Gauss-Jordan.

124

Gua Prctica MatLAB

Demostramos el resultado aplicando la funcin Gauss_Jordan, cuya salida se muestra a continuacin:


>> A=[15 -5 0;...
-5 15 -5;...
0 -5 20];
>> b=[20;0;0];
>> x=Gauss_Jordan(A,b)
x =
1.5172
0.5517
0.1379

PIVOTE MXIMO

Los algoritmos presentados pueden encontrar el problema de que el pivote sea cero, causando una
divisin entre cero. Para resolver este problema se pueden intercambiar renglones para colocar un
elemento diferente de cero en la diagonal principal. A continuacin se presenta la implementacin del
seudocdigo de Gauss-Jordan donde se escoge el elemento de mximo valor absoluto como pivote.

125

Captulo 7
Mtodo MONTANTE

El mtodo de Montante resuelve un sistema de ecuaciones simultneas haciendo operaciones que


mantienen el nmero de decimales que tiene los datos originales hasta el ltimo paso, donde se
realiza la divisin entre el determinante.
Ejemplo del mtodo Montante:

A continuacin mostramos el seudocdigo del mtodo montante:


El cdigo fue implementado con el nombre Montante.m y se encuentra en el CD, aplicando tendremos
la siguiente salida:
>> A=[15 -5 0;...
-5 15 -5;...
0 -5 20];
>> b=[20;0;0];
>> x=Montante(A,b)
x =
1.5172
0.5517
0.1379

126

Gua Prctica MatLAB

MATRIZ INVERSA

Los mtodos de eliminacin Gaussiana, Gauss-Jordan, y Montante pueden ser utilizados para encontrar
la inversa de una matriz. En este caso, la matriz aumentada sera la matriz original y la matriz identidad.

La inversa es la ltima n columnas de la matriz aumentada:

Demostrando el clculo de la inversa por el mtodo Montante tendremos:


>> A=[15 -5 0;...
-5 15 -5;...
0 -5 20];
>> I=eye(3);
>> Inversa=Montante(A,I)
Inversa =
0.0759
0.0276
0.0069
0.0276
0.0828
0.0207
0.0069
0.0207
0.0552

MTODOS ITERATIVOS: JACOBI

Dado un sistema de ecuaciones de la forma:

127

Captulo 7

Si se despeja la variable de cada ecuacin se obtiene lo siguiente:

El sistema anterior puede usarse como una frmula recursiva, adems puede usarse para obtener los
valores de xi siguientes en funcin de los valores de xi actuales.
Si definimos la matriz T y el vector c de la siguiente manera:

Se pueden escribir las ecuaciones recursivas en forma matricial:


En las siguientes lneas se muestra el seudocdigo del mtodo de Jacobi.

El cdigo de este mtodo se encuentra en el CD con el nombre

128

Jacob.m

Gua Prctica MatLAB

Mtodos Iterativos: Gauss-Seidel

En las ecuaciones recursivas es posible utilizar inmediatamente los valores obtenidos para calcularlos
siguientes valores, es decir:

El utilizar los valores de xi que se acaban de calcular para calcular los siguientes valores permite que
el mtodo converja ms rpidamente a una solucin.
Las ecuaciones recursivas se pueden escribir en forma matricial de la siguiente manera:
Donde

representa la fila de la matriz , y la regla debe aplicarse en orden para =1,2,,n

A continuacin se muestra el seudocdigo:

129

Captulo 7

Ejemplo de Mtodo de Jacobi y Mtodo de Gauss-Seidel


Para el ejemplo del circuito elctrico se tiene que:

Y aplicando las funciones creadas para ambos mtodos tenemos lo siguiente:


>> A=[15 -5 0;-5 15 -5;0 -5 20];
>> b=[20;0;0];
>> X0=[0;0;0]; % vector de valoresiniciales

Por Mtodo de Jacobi:


>> [X,Iter]=Jacob(A,b,X0)
c =
1.3333
0
0
T =

X =

0
0.3333
0

0.3333
0
0.2500

0
0.3333
0

1.5170
0.5509
0.1377

Iter =
9

Por Mtodo de Gauss-Seidel:


>> [X,Iter]=Gauss_Seidel(A,b,X0)
c =
1.3333
0
0
T =

X =

0
0.3333
0

0.3333
0
0.2500

0
0.3333
0

1.5170
0.5516
0.1379

Iter =
5

En general, Gauss-Seidel es ms rpido que Jacobi, es decir, converge en menos iteraciones a la


solucin correcta.

130

Gua Prctica MatLAB

Ejercicios Propuestos

1. Dado los siguientes circuitos:

Utilizando mallas y Ley de Kirchoff, plantear las ecuaciones de cada circuito que representan a su
solucin y resolverlos utilizando los mtodos de Gauss-Seidel y Jacobi, compare los resultados.
2. Aplicando la funcin Elim_Gauss.m, Gauss_Jordan.m y Gauss_Seidel.m, implementados
anteriormente y que se encuentran en el CD, resolver si es posible el siguiente sistema de
ecuaciones lineales, compruebe sus resultados reemplazando las soluciones en las ecuaciones.

3. Dado el siguiente sistema de ecuaciones:

Y tomando como punto inicial

lleve a cabo 4 iteraciones de Jacobi y de Gauss-Seidel.

4. Resuelva (si es posible) los siguientes sistemas lineales usando los mtodos de Jacobi y GaussSeidel. En todos los casos verifique si los teoremas garantizan convergencia de los mtodos.

131

Captulo 7

5. Use los mtodos de Jacobi y Gauss-Seidel para resolver los sistemas:

6. Dada la siguiente matriz:

Encuentre su inversa mediante Gauss-Jordan y Montante. En ambos casos, utilice la opcin de


pivote mximo. Compruebe sus resultados realizando la multiplicacin AA1.

132

Captulo

Solucin de Ecuaciones
No Lineales

En este captulo usaremos el programa MATLAB con el fin de resolver ecuaciones no lineales de
manera rpida y fcil. Se usarn tanto las herramientaspropias de MATLAB, como rutinas creadas por
el usuario que nos llevarn paso a paso a lasolucin de problemas.
Definicin del Problema

Dada una ecuacin de una variable independiente x:


(1)

Se desea encontrar el valor o valores de x que hacen que se cumpla la igualdad anterior, donde en
general, f es una funcin no lineal de x, es decir, que no puede expresarse como
x
donde y son constantes. A los valores de x que hacen que se cumpla la igualdad se les denomina
races de la ecuacin 1.

Mtodo de la Biseccin

Tambin conocido como el mtodo de las bisecciones sucesivas, comienza con un intervalo
donde se sabe que existe una raz de la ecuacin, y por lo tanto se debe cumplir que:

(2)

Este intervalo se divide a la mitad calculando:

Al encontrar el punto medio del dominio de x, podemos deducir que la raz se encuentra en una de las
dos mitades, entonces debemos descartar una de ellas, entonces es necesario conocer el algoritmo
general del mtodo de la biseccin:

133

Captulo 8

Mtodo de la Biseccin
Ejemplo: Determine valores aproximados de las soluciones positivas de la ecuacin.

Solucin:
Utilizando el archivo met_biseccin.m, que se encuentra en el CD e ingresando los datos solicitados,
obtenemos la siguiente grfica y resultado en pantalla:

134

Gua Prctica MatLAB

***Metodo de la Biseccin
f(x)= 0.5*exp(x/3)-sin(x)
x1= 0.25
x2= 1
Tolerancia= 0.0001
Los resultados son:
k=
X1= X= X2=
1
0.250000 0.625000 1.000000
2
0.625000 0.812500 1.000000
3
0.625000 0.718750 0.812500
4
0.625000 0.671875 0.718750
5
0.671875 0.695313 0.718750
6
0.671875 0.683594 0.695313
7
0.671875 0.677734 0.683594
8
0.671875 0.674805 0.677734
9
0.674805 0.676270 0.677734
10
0.676270 0.677002 0.677734
11
0.677002 0.677368 0.677734
12
0.677002 0.677185 0.677368
13
0.677185 0.677277 0.677368
14
0.677185 0.677231 0.677277
Raiz= 0.677231
Desea ver grfica? [y]/[n]: y
fin de programa

Se observa que para la iteracin nmero 14 la raz aproximada cumple con el margen de tolerancia
requerida, tal como podemos observar en la grfica anterior obtenida.

135

Captulo 8

Ejercicio propuesto:
1. Calcule las 3 races de la siguiente ecuacin no lineal:
Donde se sabe que las races se encuentran en los intervalos siguientes: [1 , 2.25], [2.25 , 4]
y [4 , 5]. La tolerancia es de .

Mtodo de Punto fijo (iteracin simple)

En el mtodo de punto fijo, la ecuacin


como una regla recursiva, es decir,

se transforma a la forma

, y sta se utiliza

O lo que es lo mismo:
En la figura siguiente se muestra un ejemplo de la forma en que trabaja el mtodo de punto fijo. El
mtodo de iteracin simple converge a una raz de la ecuacin
si
y
son continuas
en un intervalo alrededor de r, si:
Para todo ese intervalo, y si se escoge en ese intervalo. Ntese que sta es una condicinsuficiente,
pero no necesaria.

Mtodo de Punto Fijo

136

Gua Prctica MatLAB

A continuacin mostramos el pseudocdigo de este mtodo:


Ejemplo:
El factor de friccin para los fluidos turbulentos en una tubera est dado por:

Llamada correlacin de Colebrook, donde


es el nmero de Reynolds, es la asperezade la
superficie de la tubera y D es el dimetro de la tubera. Resuelva la ecuacin parafutilizando el
mtodo de punto fijo para los siguientes casos:
a)
b)
Solucin:
Si queremos resolver el problema empleando el mtodo de punto fijo debemos llevar la ecuacin a
la forma:
.
Para ello llamamos

, y as:

Luego la funcin:
Puede ser una posible funcin de iteracin de punto fijo para .
Como queremos encontrar un punto fijo graficamos la funcin y la recta y=x para tomar un valor
inicial. Empecemos con el caso (a) donde:

137

Captulo 8

Verifiquemos la representacin de

grficamente.

Para graficar utilizamos las siguientes instrucciones:


>>
>>
>>
>>

fplot('1.14-2*log10*(0.025+3.1167*10^(-4))',[-2 2 -2 2])
grid on
hold on
fplot('1*x',[-2 2 -2 2])

Donde hold on permite graficar varias funciones en un mismo sistema coordenado.

De la grfica anterior podemos ver que la funcin gcumple las condiciones del TeoremaFundamental
de Punto Fijo (dnde y por qu?). Para emplear el mtodo tomaremos lamisma tolerancia para la
distancia entre las aproximaciones y emplearemos una funcinde punto fijo para MATLAB que seha
creadoen el editor por el usuario de nombre met_puntofijo.m, cuyo cdigo se encuentra en el CD.
Si aplicamos esta funcin obtendremos lo siguiente:
>>met_puntofijo('1.14-2*log10*(0.025+3.1167*10^(-4))',1,0.000001)
it.
0
1
2
3
4


x g(x)

1.0000000000 1.0893766600

1.0893766600 1.0848521150

1.0848521150 1.0850811625

1.0850811625 1.0850695674

1.0850695674 1.0850701544

La aproximacin del punto fijo es 1.0850701544

Luego el valor para f lo obtenemos de:

Lo mismo hacemos para resolver el caso b.

138

Gua Prctica MatLAB

Mtodo de Newton-Rapson

El mtodo de Newton-Rapson se debe inicializar en un valor de x cercano a una raz. El mtodo


asume que la funcin es aproximadamente lineal en ese valor y, por lo tanto, toma como una mejor
aproximacin a la raz en la interseccin de la lnea tangente a
y su interseccin con el eje
x,como se muestra en la figura siguiente:

Mtodo de Newton-Rapson
De la figura podemos ver que:

De donde tenemos la regla recursiva:


O lo que es lo mismo:

Tomando la idea de la condicin de convergencia de iteracin simple, la condicin para NewtonRapson es la siguiente:

Que es equivalente a:

139

Captulo 8

De nuevo, esta es una condicin suficiente, pero no necesaria.


Mostramos el pseudocdigo:


Ejemplo:
Calcule las 3 races de la siguiente ecuacin no lineal:
de
y tolerancia de .

, para un valor inicial

Solucin:
Aplicando el script met_newton.m que se encuentra en el CD, obtenemos lo siguiente:
***Metodo de Newtn-Cotes
f(x)= pi*sin(2*x)+exp(-x/2)*cos(x)
x= 3.5
Tolerancia= 0.0001
Los resultados son:
k=
F(X)= X= dF(X)=
1
1.901253
3.500000
4.879230
2
-0.407304
3.110338
6.369840
3
0.000835
3.174280
6.378647
Raiz= 3.174280
Desea ver grfica? [y]/[n]: y
fin de programa

140

Gua Prctica MatLAB

Grfica de la funcin y de la solucin de la ecuacin no lineal.

Mtodo de la secante

El mtodo Newton-Rapson requiere evaluar f_(x). En el mtodo de la secante, la derivadase aproxima


de la siguiente manera:

Sustituyendo en la ecuacin recursiva de Newton-Rapson se obtiene:

O lo que es lo mismo,
Por lo tanto, el seudocdigo ser:

141

Captulo 8

Ejemplo:
Resolviendo el ejemplo anterior, teniendo en cuenta que inicialmente
met_secante.m que se encuentra en el disco, tendremos lo siguiente:
***Metodo de la Secante***
f(x)= pi*sin(2*x)+exp(-x/2)*cos(x)
x= 3.5
xant= 2.5
Tolerancia= 0.0001
Los resultados son:
k=
F(X)= X= Xant=
1
1.901253
3.500000
2.500000
2
-0.279696
3.130346
3.500000
3
0.022980
3.177753
3.130346
4
0.000026
3.174153
3.177753
5
-0.000000
3.174149
3.174153
Raiz= 3.174149
Desea ver grfica? [y]/[n]: y
fin de programa

142

, aplicando el script

Gua Prctica MatLAB

Newton-Rapson para funciones de ms de una variable

El mtodo de Newton-Rapson puede generalizarse para funciones de dos variables de la siguiente


manera. Supngase que se desea encontrar los valores de x e y que hagan que se cumplan las
siguientes dos ecuaciones no lineales:

Dado un punto inicial


, el mtodo Newton-Rapson toma los planos tangentes a
, y su interseccin con el plano
como el siguiente punto para continuar el mtodo en
y
la siguiente iteracin. La ecuacin del plano tangente a
es la siguiente:

Donde:

De la misma manera, la ecuacin del plano tangente a

es la siguiente:


Donde:

(1)

(2)

Sustituyendo z=0 en las ecuaciones 1 y 2 se obtiene el siguiente sistema de ecuaciones:

Donde se ha abreviado
como , y de la misma manera para ,
anteriores pueden expresarse en forma matricial de la siguiente manera:

y . Las ecuaciones

(4)

Donde:

(5)

(6)

143

Captulo 8

De las ecuaciones 4,5 y 6 se obtiene la regla recursiva para el mtodo Newton-Rapson para dos
variables:

Donde

se obtienen de resolver el sistema de ecuaciones:

Ejemplo de dos variables

Encontremos una raz del siguiente sistema de ecuaciones no lineales:

Obtenemos las derivadas parciales:

El sistema de ecuaciones es:

Tomemos

De donde x = 1 y y = 0 por lo tanto:

Iterando tendremos los siguientes valores:


x
y

144

2
1

1
1

0.7500 0.7083 0.7071


0.7500 0.7083 0.7071

Gua Prctica MatLAB

Para demostrar estos resultados, nos ayudaremos del archivo script newtonnl.m, que ejecutando en la
ventana de comandos e ingresando lo requerido por el programa nos mostrar lo siguiente:
>> newtonnl
Ingrese las funciones
f1(x,y)= x^2+y^2-1
f2(x,y)= x-y
Ingrese valores iniciales:
X0= [2;1]
Tolerancia= 0.0001
Max.Iter= 100
n=1 x=2.0000000 y=1.0000000
n=2 x=1.0000000 y=1.0000000
n=3 x=0.7500000 y=0.7500000
n=4 x=0.7083333 y=0.7083333
n=5 x=0.7071078 y=0.7071078

Ejercicios propuestos

1. Encuentre una raz positiva de


significativa.

, que sea exacta hasta la segunda cifra

2. Encuentre una raz de:


en el intervalo [5.5 ,6.5]. Cambie -36 por -36.001 y repita el ejercicio.
3. Escriba un programa que ejecute el mtodo de Newton, resuelva la ecuacin
las races ms cercanas a 4.5 y 7.7.

. Encuentre

4. El polinomio
tiene ceros 1,3 y -98. El punto
debera ser en
este caso un buen punto inicial para calcular cualquiera de los ceros pequeos por medio de la
iteracin de Newton.
5. Use el mtodo de Newton para calcular la nica raz de:
Use una variedad de valores de B=1,5,10,25 y 50. Entre las elecciones del punto de partida
tome
y explique el comportamiento anmalo. Tericamente, el mtodode Newton debe
converger para cualquier valor de y B.

145

Captulo 8

6. Resuelva por el mtodo de Newton para sistemas no lineales el siguiente sistema:

Use valores iniciales

7. Comenzando en (0, 0, 1), resuelva por el mtodo de Newton para sistemas no lineales con el
sistema:

Explique los resultados.


8. Use el mtodo de Newton para encontrar una raz del sistema no lineal:

146

Captulo

Integracin

Los mtodos de integracin numrica nos permiten integrar funciones que estn definidas
analticamente o de las que slo conocemos su tabla en un nmero finito de puntos.
Considerando el siguiente caso:
Dada una funcin

se desea calcular la integral definida:


Para valores dados de y

(1)

Todos los mtodos que veremos se basan en evaluar la funcin


para valores de x y aproximar el
rea bajo la curva mediante estos puntos. El mtodo ms sencillo consiste en aproximar el rea bajo
la curva mediante rectngulos, como se muestra en la figura siguiente:

El rea del i-simo rectngulo es:


Si asumimos que la funcin va ser evaluada en puntos uniformemente espaciados, es decir que
es constante para toda , entonces podemos escribir como:
El rea total es entonces igual a:

147

Captulo 9
Mtodo de los Trapecios

Podemos obtener una mejor aproximacin al valor de la integral definida si aproximamos el rea
mediante trapecios, como se muestraen la figura siguiente:

El rea del i-simo trapecio es:

De nuevo, asumimos que el espaciamiento de los datos es uniforme e igual a h, por lo tanto:

Como ejemplo consideramos la funcin


con 50 nodos.

, se pide calcular la integral para un dominio

Solucin: Implementando un script de nombre I_trap.m, cuyo cdigo mostramos a continuacin y


ejecutando, obtenemos:
x=linspace(0,pi,50);
y=sin(x);
n=length(x)-1;
h=x(2)-x(1);
An=0;

148

Gua Prctica MatLAB

for k=2:n
An=An+2*y(k);
end
A=(h/2)*(y(1)+y(n+1)+An);
fprintf('Area=%7.4f\n\n',A)
>> I_trap % ejecutando
Area= 1.9993

El usuario puede utilizar y resolver diferentes integrales definidas, utilizando la funcin trapz, propia
del programa o de la funcin trap_comp.m que se encuentra en el disco.
Mtodo de Romberg

Suponga que se calcula numricamente la integral de


para un valor h1 = h, llammosle R(1,1)
al valor obtenido. Si despus se calcula la integral para h2 = h1/2, llammosle R(2,1), podemos
obtener una mejor estimacin del valor de la integral asumiendoque el error es proporcional a h2:

Si eliminamos la constante C podemos despejar el valor estimado para obtener lo siguiente:


Donde le hemos llamado R(1,2) al valor estimado. Ahora, supongamos que obtenemos laintegral de
para h3 = h/4, llammosle R(3,1). Podemos calcular un valor estimado dela misma manera,
obteniendo que:
Ahora, podemos obtener una mejor estimacin del valor de la integral utilizando R(1, 2) y R(2, 2)
de la siguiente manera:
De lo anterior, podemos deducir el mtodo de Romberg. Dado un valor inicial de h, se calcula la
integral de f(x) para valores de paso de h, h/2, h/4, h/8, etc., (que es equivalente a que el nmero
de trapecios sea igual a n, 2n, 4n, 8n, etc.). Al valor de estas integral les llamamos R(1,1), R(2,1),
R(3,1), R(4,1), etc. Con cada valor de R podemos obtener una estimacin mejor asumiendo que el
error es proporcional al cuadrado del paso utilizado mediante la frmula:

149

Captulo 9

Los valores de R pueden ordenarse en una tabla al estilo de diferencias divididas como se muestra
a continuacin:
R(1,1) R(1,2) R(1,3) R(1,4) R(1,5)
R(2,1) R(2,2) R(2,3) R(2,4)
R(3,1) R(3,2) R(3,3)
R(4,1) R(4,2)
R(5,1)
El algoritmo contina evaluando valores de R(i,1) hasta que la diferencia del valor absoluto entre
las ltimas dos estimaciones de mayor orden obtenidas sea menor que una tolerancia que escoge
el usuario.
El Mtodo de Romberg se utiliza junto con el mtodo de trapecios para obtener una buena aproximacin.
Ejemplo:
Con el script Metodo_Romberg.m, que se encuentra en el disco, podemos calcular la integral anterior,
cuyo resultado luego de ejecutarlo en la ventana de comandos mostramos:
f(x)=sin(x)
Extremo Inferior
a=0
Extremo Superior
b=pi
Cifras de Aproximacion
n=4
An =
0.0000
0
1.5708
2.0944
1.8961
2.0046
1.9742
2.0003

0
0
1.9986
2.0000

0
0
0
2.0000

Integral:
I= 2.000006

Mtodo de Simpson 1/3

El mtodo de Simpson 1/3 aproxima el rea bajo la curva de f(x) mediante parbolas, como se
muestra en la figura siguiente:

150

Gua Prctica MatLAB

Se hace pasar un polinomio de segundo orden por cada tres puntos. El polinomio definido por los
puntos xi1 , xi , y xi+1 puede obtener mediante el polinomio de interpolacin de Newton:
Donde:

Ntese que los coeficientes a1, a2 y a3 varan de segmento a segmento y, por lo tanto, que el
polinomio P2(x) es diferente para cada intervalo de tres puntos.
Para simplificar el clculo del rea bajo la curva en el intervalo de xi1 a xi+1 , esto es Ai , se traslada
la curva a x=0 como se muestra en la figura siguiente:

Por lo tanto, el rea Aj est dada de la siguiente manera:

Entonces el rea por el mtodo de trapecio es:

151

Captulo 9

Por lo tanto, el rea total es (Mtodo de Trapecio Compuesto):

Ejemplo:
Utilizando el mtodo de simpson 1/3 calcular la siguiente integral:

Solucin: Aplicando la funcin


siguiente:

met_simpson13.m

que se encuentra en el disco, obtendremos lo

>>[I,E]=met_simpson13('x^5',0,1,50)
I =

0.1667
E =
1.0453e-007

Mtodo de Simpson 3/8

El mtodo de Simpson 3/8 aproxima el rea bajo la curva de f(x) mediante polinomioscbicos. Por
cada cuatro puntos se hace pasar un polinomio de tercer orden. Para los puntos xi , xi+1 , xi+2 , xi+3 el
rea bajo la curva es:
Y el rea total es:

Del ejemplo anterior y aplicando el script met-simpson38.m, tenemos:


***Metodo de Simpson 3/8***
f(x)= x^5
a= 0
b= 1
#Cifras Signif Exac.= 4
El valor de la integral aproximada es: 0.1667

152

Gua Prctica MatLAB

Funciones de Cuadratura

MATLAB cuenta con dos funciones de cuadratura para realizar integracin numrica de funciones:
quad y quad8. La primera utiliza una forma adaptativa de la regla de Simpson y la segunda usa la
regla de Newton-Cotes adaptativas de 8 paneles; esta ltima es la mejor para manejar funciones con
cierto tipo de singularidades, pero eso s, ambos exhiben un mensaje de advertencia si detectan una
singularidad, devolviendo de todos modos una estimacin de la integral.
Las formas ms sencillas de estas dos funciones requieren tres argumentos. El primero es el
nombre (entre apstrofos) del m-file funcin que devuelve un vector de valores de f(x) cuando se
le proporciona un vector de valores de entradas. La funcin puede ser una creada por el usuario o la
que est definida en el programa, el segundo y tercer elemento son los lmites de integracin a y b.
A continuacin mostramos la sintaxis de estos:
var = quad('nombre_funcion',a,b)

var = quad8('nombre_funcion',a,b)

Ejemplo:
Calcular la integral de:
Solucin:
Analticamente el resultado es el siguiente:
A fin de comparar qu tanta aproximacin tiene el resultado de las funciones de cuadratura, usamos
el siguiente script de nombre cuadrat.m
a=input('Extremo Inferior: ');
b=input('Extremo Superior: ');
I=(2/3)*(b^1.5-a^1.5);
Iq=quad('sqrt',a,b);
Iq8=quad('sqrt',a,b),
fprintf('Analitico= %f\nNumerico: %f\t%f\n\n',I,Iq,Iq8)

Ejecutando el programa para los valores solicitados, tendremos lo siguiente:


Extremo Inferior: 0
Extremo Superior: 5
Iq8 =
7.4536
Analitico= 7.453560
Numerico: 7.453556

7.453556

153

Captulo 9

Ejercicio:
Un sistema de tubera fluye petrleo, donde la friccin en la tubera origina un perfil de velocidades en
el petrleo al fluir. El petrleo que est en contacto con las paredes no se est moviendo, mientras
que el petrleo que est en el centro del flujo se est moviendo con velocidad mxima:
y cuya ecuacin se describe a continuacin:

Entonces la velocidad media en el tubo es la integral del rea de perfil de velocidad,lo cual se
demuestra que es:

Donde ro es el radio del tubo.


Con n=8 y ro=0.5m escriba un programa que integre el perfil de velocidad para calcular la velocidad
de flujo medio en el tubo.
Grfica del perfil de velocidad de un oleoducto:

154

10
Captulo

Solucin de Ecuaciones
Diferenciales Ordinarias
Una ecuacin diferencial ordinaria lineal de la forma:
con

se puede utilizar como modelo matemtico de una gran variedad de fenmenos, ya sean fsicos o no
fsicos, y en disciplinas cientficas y no cientficas. Ejemplo de dichos fenmenos incluyen problemas de
transferencia de calor (termodinmica), circuitos elctricos simples (ingeniera elctrica), problemas
de fuerza (ingeniera mecnica), razn de crecimiento de bacterias (ciencias biolgicas), razn de
descomposicin radioactiva (fsica atmica), tasa de crecimiento de una poblacin (estadstica),
etc. Existe una serie de mtodos para resolver este tipo de ecuaciones, dentro de los que podemos
mencionar: separacin de variables, solucin exacta y solucin de series finitas. Dentro de estos
ltimos, veremos los mtodos de Euler y Runge-Kutta, segundo y cuarto orden.
Mtodo de Euler

Dada una ecuacin diferencial ordinaria de la forma:

se hace la aproximacin:
Tomando

, de donde se tiene que:

se obtiene la regla recursiva del mtodo de Euler:

Se requiere una condicin inicial:


Entonces el trmino para el clculo de la solucin es:

155

Captulo 10

Diseamos una funcin que nos permita solucionar numricamente una EDO empleando dicha
representacin. Esta funcin tendr la siguiente sintaxis:
% Metodo de Euler
function [t,y]=met_Euler(y0,t0,tf,h)
t=t0;
y(1)=y0;
k=1;
while t(k)<tf
t(k+1)=t0+k*h;
y(k+1)=y(k)+h*fcn(t(k),y(k));
k=k+1;
end

Donde: fcn, es la funcin que representa a la ecuacin diferencial y deber ser definida cada vez
que se desee resolver un problema diferente.
A las instrucciones anteriores le dimos el nombre de met_Euler.m.
Ejemplo:
Sea la siguiente ecuacin diferencial:
Obtener el resultado por el mtodo de Euler para
y compararla grficamente con la
solucin exacta
.
Solucin:
Creamos en el editor la funcin que representar a la ecuacin diferencial:
function dy=fcn(t,y)
dy=y/10;

Luego creamos el siguiente archivo script de nombre sol1_euler.m


t0=0; tf=5; y0=1000;
h=[1 0.5 0.1];
for k=1:length(h)
[t,y]=met_Euler(y0,t0,tf,h(k));
plot(t,y)
grid on
hold on
end
te=t0:0.1:tf;
ye=1000*exp(te/10);
plot(te,ye,'-r')
legend('h=1','h=0.5','h=0.1','Exacta')
hold off

156

Gua Prctica MatLAB

y cuando ejecutamos dicho script obtendremos lo siguiente:

Mtodo de Euler Modificado

La mejora del mtodo de Euler es expresado como:

El cdigo implementado en MATLAB para este mtodo, el cual se encuentra en el CD, tiene por
nombre met_EulerMOD.m y se muestra a continuacin.
% Metodo de Euler Modificado
function [t,y]=met_EulerMOD(y0,t0,tf,h)
t(1)=t0;
y(1)=y0;
k=1;
while t(k)<tf
t(k+1)=t0+k*h;
K1=h*fcn(t(k),y(k));
K2=h*fcn(t(k+1),y(k)+K1);
y(k+1)=y(k)+0.5*(K1+K2);
k=k+1;
end

Al igual que en el mtodo de Euler, debemos definir la funcin fcn que representa a nuestra ecuacin
diferencial.

157

Captulo 10

Ejemplo:
Obtener la solucin aproximada del siguiente problema, para h=0.01:

Y compararla grficamente con la solucin exacta:


Solucin:
Creamos un script de nombre sol2_euler.m, cuyo contenido es:
t0=1.0610329; tf=3; y0=1.0610329;
h=0.01;
[t1,y1]=met_Euler(y0,t0,tf,h);
[t2,y2]=met_EulerMOD(y0,t0,tf,h);
te=t0:0.1:tf;
ye=100*(te.^-2).*sin(10./te);
plot(t1,y1,t2,y2,te,ye)
grid on
title('h=0.001','fontsize',14)
legend('Euler','Euler Modificado','Exacta')

El resultado de ejecucin del script anterior es:

158

Gua Prctica MatLAB

Ejercicio:
Utilizando el mtodo de Euler, solucione numricamente la siguiente ecuacin:
De

, con h=0.25 y

Mtodo de Runge Kutta

Los mtodos de Runge Kutta utilizan indirectamente el algoritmo de Taylor. En general, estos mtodos
evalan
en ms de un punto en la proximidad de
en lugar de evaluar derivadas de
,
las cuales se necesitaran para el uso directo del algoritmo por series de Taylor.
La derivacin de estos mtodos se acompaa de la suposicin de un algoritmo particular con ciertos
coeficientes indeterminados. Los valores de estos trminos constantes se encuentran igualando la
frmula de Runge Kutta de orden p al algoritmo de Taylor de orden . Las ms comunes en aplicacin
son las de orden 2,3 y 4; es decir, aquella que usa la ponderacin de 2, 3 y 4 aproximaciones.
A continuacin mostramos la forma de 4to orden:

Implementando una funcin de nombre


cdigo ser:

sol_RK4.m

en MATLAb que resuelva dicho algoritmo, el

% Metodo de Runge Kutta 4


function [t,y]=sol_RK4(f,y0,t0,tf,h)
% f: es una funcion referencial
fcn=f; t(1)=t0; y(1)=y0;
k=1;
while t(k)<tf
t(k+1)=t0+k*h;
K1=fcn(t(k),y(k));
K2=fcn(t(k)+h/2,y(k)+0.5*h*K1);
K3=fcn(t(k)+h/2,y(k)+0.5*h*K2);
K4=fcn(t(k+1)+h,y(k)+h*K3);
y(k+1)=y(k)+(h/6)*(K1+2*K2+2*K3+K4);
k=k+1;
end

159

Captulo 10

Resolviendo el ltimo ejemplo con este mtodo y realizando las comparaciones con los mtodos
anteriores. El script sol3_EDOS.m, tendr las siguientes instrucciones:
t0=1.0610329; tf=3; y0=1.0610329;
h=0.01;
f=@(t,y) -200*(t^-3)*sin(10/t)-1000*(t^-4)*cos(10/t);
[t1,y1]=met_Euler(y0,t0,tf,h);
[t2,y2]=met_EulerMOD(y0,t0,tf,h);
[t3,y3]=met_RK4(f,y0,t0,tf,h);
te=t0:0.1:tf;
ye=100*(te.^-2).*sin(10./te);
plot(t1,y1,t2,y2,t3,y3,te,ye)
grid on
title('h=0.001','fontsize',14)
legend('Euler','Euler Modificado','RK4','Exacta')

Y la salida grfica ser el siguiente:

Funciones ode

Para resolver ecuaciones diferenciales ordinarias, MATLAB proporciona un conjunto de funciones que
nos permite realizar el clculo de forma ms eficiente, dos de estas funciones son: ode23 y ode45.
A continuacin describimos los argumentos y luego presentaremos algunos ejemplos:
[t,y] = ode23(@funcion,tspam,CI)
[t,y] = ode45(@funcion,tspam,CI)
@funcion : Es la referencia de la funcin creada en el editor y que representa a la ecuacin diferencial
tspam
CI
y
t

160

ordinaria.
: Vector de valores del dominio en que va a ser evaluada la funcin solucin.
: Condicin inicial
: Funcin solucin evaluada en los valores de tspam
: Es un vector de los mismos elementos de tspam

Gua Prctica MatLAB

Ambas funciones permiten obtener la solucin aproximada de la ecuacin diferencial


.
Donde la primera sintaxis realiza el clculo por el mtodo de Runge Kutta de 2do y 3er orden,
mientras que el segundo (utilizado de forma estndar) realiza el clculo por Mtodo de Runge Kutta
de 4to y 5to orden
Ejemplo 1:
Resolver la siguiente ecuacin diferencial:
dentro del intervalo [0,2], suponiendo que la condicin inicial es:
Solucin:
Primeramente creamos la funcin que representar a la ecuacin diferencial, entocnes escribimos en
el editor lo siguiente:
function dy=funci(t,y)
dy=2*t.*(cos(t)).^2

Seguidamente realizamos un script para ejecutar y obtener la solucin:


[t1,y1]=ode23(@funci,0:0.1:2,pi/4);
[t2,y2]=ode45(@funci,0:0.1:2,pi/4);
plot(t1,y1,t2,y2)
grid on
legend('RK23','RK45')

El resultado se muestra en la grfica siguiente.

161

Captulo 10

Ejemplo 2:
Durante un vuelo de prueba de un avin con un cierto motor turbohlice, el piloto de prueba ajust
el nivel de potencia del motor a 40 000 Newtons, lo que hace que el avin de 20 000 Kg. alcance
una velocidad de crucero de 180 m/s. A continuacin, las gargantas del motor se ajustan a un nivel
de potencia de 60 000 Newtons y el avin comienza a acelerar. Al aumentar la velocidad del avin,
el arrastre aerodinmico aumenta en proporcin con el cuadrado de la velocidad respecto al aire.
Despus de cierto tiempo, el avin alcanza una nueva velocidad de crucero en la que el empuje de
los motores es equilibrado por el arrastre. La ecuacin diferencial que determina la aceleracin del
avin es:
Donde:

Escribir un programa en MATLAB para determinar la nueva velocidad de crucero despus del cambio
de nivel de potencia de motores, graficando la solucin de la ecuacin diferencial.
Solucin:
Para este caso usamos la funcin ode23 para evaluar la ecuacin diferencial. La solucin de esta
ecuacin nos dar valores de velocidad, que pueden servir para determinar valores de aceleracin.
Realizando el script siguiente:
V0=180;
ts=240;
[t,V]=ode23(@funci2,0:0.1:ts,V0);
ac=3-0.000062*V.^2;
subplot 211
plot(t,V); title('Velocidad')
ylabel('m/s')
grid on;
subplot 212
plot(t,ac); title('aceleracin')
ylabel('m/s^2')
xlabel('tiempo(s)')
grid on

La funcin funci2.m es:


function dv=funci2(t,v)
dv=3-0.000062*v.^2;

162

Gua Prctica MatLAB

Y la salida grafica es:

Ejemplo 3:
Velocidad en medios con arrastre La ecuacin diferencial que rige la velocidad v de un cuerpo de masa
m y rea proyectada A que cae en un medio de densidad es:

(I)

El cuerpo adquiere su velocidad terminal de cada cuando no acelera ms, es decir a derivada de a
velocidad es cero. De acuerdo a la ecuacin anterior, la velocidad terminal terica es:

(II)

y
, que cae de un edificio, entonces
Supngase una moneda con
. La velocidad terminal segn la expresin II es:
. Resolver la ecuacin
I por el mtodo de Runge-Kutta y compara la velocidad terminal as hallada con la velocidad terminal
terica.
Solucin
Para resolver aplicamos la funcin met_RK4.m, de la siguiente manera
f=@(t,v) 10-v^2*(1*3.1416*10^-4)/(2*0.01);
[t,vel]=met_RK4(f,0,0,20,1)
plot(t,vel)

163

Captulo 10

El resultado y la grfica sern:


0
1.0000
2.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000
9.0000
10.0000
11.0000
12.0000
13.0000
14.0000
15.0000
16.0000
17.0000
18.0000
19.0000
20.0000

0
9.3244
16.3644
20.6352
22.8944
24.0044
24.5302
24.7750
24.8880
24.9400
24.9638
24.9748
24.9798
24.9821
24.9832
24.9837
24.9839
24.9840
24.9840
24.9841
24.9841

Se observa que la velocidad terminal hallada por


el mtodo numrico es de 24.98m/s, la cual es
la misma terica, lo que demuestra el podero del
mtodo de Runge-Kutta para la solucin numrica
de ecuaciones diferenciales

Solucin de Ecuaciones Diferenciales de Orden Superior

Para resolver ecuaciones diferenciales de orden superior (de orden mayor que 1) con condiciones
iniciales, se transforman en un sistema de ecuaciones diferenciales de orden 1 equivalente y se
resuelve ste. El nmero de ecuaciones diferenciales de primer orden del sistema es igual al orden
de la ecuacin diferencial original.
Para el caso general, considere ahora la siguiente ecuacin diferencial de orden :
y haciendo el siguiente cambio de variables:

Donde

164

Gua Prctica MatLAB

Derivando los cambios de variables, tendremos el siguiente arreglo:

Luego utilizamos el solucionador ode45, para obtener el vector solucin.


Ejemplo:
Se tiene la siguiente ecuacin diferencial con condiciones iniciales:
Se desea resolver para

con

Solucin:
Dado que la ecuacin diferencial es de orden 2. Debemos reducirla a un sistema de ecuaciones
diferenciales de primer orden, primero despejamos el trmino de segundo orden y empezamos la
reduccin.

, donde:
Implementando la solucin con el siguiente cdigo para obtener los valores de funcin solucin y
visualizar la grfica.
[t,Xn]=ode45(@fun2,0:0.1:1,[1;1]);
y=Xn(:,1);
plot(t,y,'-b')
grid on
title('Solucin de EDO de 2do Orden')

165

Captulo 10

Donde la funcin de nombre funci.m est definida por el siguiente cdigo.


function dX=fun2(t,X)
A=[0 1;5*t -2];
b=[0 exp(-2*t)];
dX=A*X+b

Ejemplo:
Un circuito tiene en serie una fem
, un resistor de 2 , un inductor de 0.1 h y un
capacitor de 1/260 f. Si la corriente inicial y la carga inicial en el capacitor son ambas cero, calcular
la carga en el capacitor en cualquier instante de tiempo t.

Solucin:
Recordamos que:
',

166

adems:

Gua Prctica MatLAB

Reemplazando las expresiones para la corriente en la ecuacin, tendremos la siguiente expresin:

Cambiando los valores de R, C y L y V:

Haciendo los cambios de variables, tenemos lo siguiente:


, donde:
Y realizando la ejecucin del cdigo siguiente, tendremos la siguiente salida.
[t,Xn]=ode45(@funCir,0:0.001:1,[0;0]);
y=Xn(:,1);
plot(t,y,'-b')
grid on
title('Solucin de Circuito RLC')

Siendo la funcin funCir.m el siguiente cdigo:


function dX=funCir(t,X)
A=[0 1;-2600 -20];
b=[0; 100*sin(60*t)];
dX=A*X+b;

Y la grfica de la funcin resultado evaluada en el tiempo.

167

Impreso en los Talleres Grficos de

Surquillo

719 9700 719 9701


Marzo 2012