You are on page 1of 168

Coleccin G UAS P RCTICAS

MAT L A B
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
ndicendiceIndice ndice
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.
1
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.
9
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
media23 es diferente a meDia23
1p, 45va, _p1, 3w1 variables invalidas

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

valor: 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).
;: 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 Tipo Bytes
ser de los siguientes tipos (se detallar en el siguiente
tem): doubl 8B
int 4B
char 2B
logical 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;

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

>> who

Your variables are:

a c m x

>> whos
Name Size Bytes Class Attributes
a 1x1 2 int16
c 1x10 20 char
m 1x1 1 logical
x 1x1 8 double

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

12
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 Bytes Class Attributes
d 1x1 8 double

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 Bytes Class Attributes
s 1x1 4 single

>> 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 Bytes Class Attributes
c 1x1 16 double complex
z 1x1 16 double complex

Nota
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 int8 -27 a 27 -1
Entero con signo de 16 bits int16 -215 a 215 -1
Entero con signo de 32 bits int32 -232 a 232 -1
Entero con signo de 64 bits int64 -264 a 264 -1
Entero sin signo de 8 bits uint8 0 a 28 -1
Entero sin signo de 16 bits uint16 0 a 216 -1
Entero sin signo de 32 bits uint32 0 a 232 -1
Entero sin signo de 64 bits uint64 0 a 264 -1

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 Bytes Class Attributes
w 1x1 8 int64
x 1x1 1 int8
y 1x1 2 int16
z 1x1 4 int32

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 Bytes Class Attributes
a 1x1 2 int16
b 1x1 8 double
c 1x1 4 single

Valores Especiales
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 Significado
pi
ij (-1)
inf
NaN 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 Muestra la caracterstica del dato x.
isnumeric(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
isa(x, arg) tomar los siguientes textos: integer (entero), uintxx (no entero de xx: 8,
16, 32 64), float, doubl o single.
isreal(x) Determina si el tipo de dato x es un nmero real.
isnan(x) Determina si el tipo de dato x no es un nmero.
isinf(x) Determina si el valor de x es infinito.
isfinite(x) Determina si el valor de x es finito.

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 Bytes Class Attributes
cadena 1x26 52 char

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 ;Bartolomeo ]
nombres =
Jose Carlos
Rosario
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 Descripcin
strcmp Determina si dos cadenas son idnticas. Diferencia las maysculas y
minsculas.

18
Gua Prctica MatLAB

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


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

Recordemos que los resultados de una comparacin tiene como resultado los valores de 1 (verdadero)
0 (falso).
>> cad_1=masa;
>> cad_2=mazo;
>> c1=strcmp(cad_1,cad_2)
c1 =
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 0 0 0 0 1

La funcin isletter determina si un carcter es una letra.


>> dia = MatLab 2011b;
>> str = isletter(dia)
str =
1 1 1 1 1 1 0 0 0 0 0 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 Descripcin
char Convierte un entero positivo a su equivalente carcter (cdigo ASCII). Trunca
cualquier parte fraccional.
int2str Convierte un valor numrico de tipo int a un dato de tipo char (carcter).
num2str y Convierte un valor numrico de tipo double a un dato de tipo char (carcter) de
str2num precisin con formato especfico y viceversa, respectivamente.
mat2str y Convierte un tipo numrico a una de tipo carcter de una determinada
str2mat precisin, retornando una cadena Matlab que puede ser evaluada y viceversa,
respectivamente.
dec2hex y Convierte un entero positivo a un dato de tipo char de base hexadecimal y
hex2dec viceversa, respectivamente.
dec2bin y Convierte un entero positivo a un dato de tipo char de base binaria y viceversa,
bin2dec respectivamente.
dec2base 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 66 50 48 49 49 66

>> 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
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
short Formato con 4 cifras significativas exactas.
short e Formato de 5 dgitos. Incluye potencia de 10.
short g Formato de 5 dgitos.
long Formato de 15 cifras significativas exactas.
long e Formato de 15 dgitos. Incluye potencia de 10.
long g Formato de 15 dgitos.
Rat Formato en fraccin irreductible.
Hex Formato en base 16 (hexadecimal).
Bank Formato de 2 cifras significativas exactas.
Compact Formato que suprime el exceso de lneas.
Loose Formato que aade ms lneas para que sea ms legible.

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 4e-4];


>> format short
>> x

x =
1.8571 16.5672 0.0004

>> format long


>> x

x =
1.857142857142857 16.567246000000001 0.000400000000000

>> format rat


>> x

22
Gua Prctica MatLAB

x =
13/7 2833/171 1/2500

>> x

x =
1.86 16.57 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
2
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
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.

26
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 8 9 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 , donde : i = 1, 2, , n y j = 1, 2, , m
n 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 64 87 010
A = 22 15 78 111
113 7 6 29 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
zeros Crea matriz de elementos igual a cero.
ones Crea matriz de elementos igual a la unidad.
eye Crea matriz identidad.
rand Crea matriz de elementos aleatorios entre 0 y 1.
randn Crea matriz de elementos aleatorios con media 0.

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


Sintaxis: var = funcion(n) matriz cuadrada
var= funcion(n,m) rectangular
var = funcion([n m]) rectangular

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

>> Z4(3) = 11
Z4 =
0 0 99 0
0 0 0 0
11 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 1 1 1
1 1 1 1 1 1 1 1 1

>> U2 = 27*ones(4,6)
U2 =
27 27 27 27 27 27
27 27 27 27 27 27
27 27 27 27 27 27
27 27 27 27 27 27

30
Gua Prctica MatLAB

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

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

Matriz de valores aleatorios entre 0 y 1:


>> x = rand % un valor aleatorio
x =
0.8147

>> x = rand % nuevamente un valor aleatorio


x =
0.9058

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


X =
0.1270 0.5469 0.9572 0.9157 0.8491
0.9134 0.9575 0.4854 0.7922 0.9340
0.6324 0.9649 0.8003 0.9595 0.6787
0.0975 0.1576 0.1419 0.6557 0.7577
0.2785 0.9706 0.4218 0.0357 0.7431

>> X1 = rand(2,4)
X1 =
0.3922 0.1712 0.0318 0.0462
0.6555 0.7060 0.2769 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 9.5390
17.3707 0.8612 19.1379
7.9275 10.9686 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: Crear un vector fila de una cierta cantidad de elementos distribuidos en un dominio
constante.
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): Genera un vector logartmicamente espaciado entre los valores 10^a y 10^b
con n elementos.
logspace (a,b): Genera un vector logartmicamente espaciado entre los valores 10^a y 10^b
con 50 elementos.

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: var = size(matriz) var = [#f #c]

32
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

sum: Esta funcin calcula la suma de los elementos de cada columna o fila y los resultados de dicho
clculo los ordena en un vector.
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 =
650160

34
Gua Prctica MatLAB

max: 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.
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 0

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


mayor =
11 1 8 0

filas =
3 2 1 1

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

min: 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.
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 3 3 3

>> 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 = diag(matriz)
var = diag(martiz,k) k=..-2,-1,1,2..
var = diag(vector)
var = diag(vector,k) 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
0 2 0
0 0 1

>> Dvk = diag(v,2)


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

>> Dvk = diag(v,-1)


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

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

Funcin Descripcin
ceil Redondea el valor hacia el infinito.
fix Redondea el valor hacia cero.
floor Redondea el valor hacia el menos infinito.
round 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 Descripcin
cond(A) Muestra el nmero de condicin
det(A) Calcula la determinante
inv(A) Calcula la inversa
A' Calcula la transpuesta
poly(A) Obtiene el polinomio caracterstico
eig(A) Calcula los valores propios
norm(A) Halla la norma
normmest(A,2) Estima la norma-2
null(A) Reconoce los espacios nulos
orth(A) Calcula la ortogonalizacin
pinv(A) Calcula la seudo inversa
trace(A) Calcula la traza
rank(A) Calcula el rango
rref(A) Obtiene la reduccin mediante eliminacin de Gauss
tril(A) Obtiene la matriz triangular inferior
triu(A) Obtiene la matriz triangular superior
dot(v1,v2) Calcula el producto escalar de los vectores
cross(v1,v2) 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.3740
-0.1845 0.0916 0.0089 0.1361
0.0611 0.1145 -0.0305 -0.0382
-0.1539 -0.3511 -0.0064 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 Descripcin
find(A) Devuelve los ndices donde las entradas de A son distinto de cero
fliplr(A) Intercambia la matriz de izquierda a derecha
flipud(A) Intercambia la matriz de arriba abajo
reshape(A,n,m) 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
rot90(A) Gira la matriz 90 en sentido contrario a las agujas del reloj
rot90(A,n) Gira la matriz nx90
expm(A) Matriz exponencial de A
sqrtm(A) Matriz raz cuadrada
logm(A) Matriz logartmica
funm(A,@funcion) Evala la funcin que indiquemos en la matriz A
[Vep,Vap]=eig(A) Vep son los vectores propios y Vap son los valores propios de A
[L,U]=lu(A) Factorizacin LU
[Q,R]=qr(A) Factorizacin QR
[U,S,V]=svd(A) 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 0
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 Descripcin
A + B Adicin de matrices
A - B Sustraccin de matrices
A * B Producto de matrices
A / B Divisin de matrices = A*B-1
A ^ n 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 4
7 7

>> A-B
ans =
-1 2
-1 1

>>A*B
ans =
14 10
22 15

>> A/B
ans =
-4.5000 2.5000
-3.5000 2.5000

>> A^3
ans =
55 90
90 145

42
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 3
12 12
>> A./B
ans =
0.5000 3.0000
0.7500 1.3333
>> A.^B
ans =
1 3
81 64
>> A.^4
ans =
1 81
81 256

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

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

Funciones Relacionales y Lgicas Adicionales

Tabla de Funciones
Funcin Descripcin
xor(x,y) Operacin o exclusiva, devuelve 0 si ambas son falsas o ambas verdaderas
y devuelve 1 si una es falsa y la otra verdadera.
any(x) 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
all(x) 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
exist('x') Devuelve uno si existe y cero si no existe
isnan(x) Devuelve unos en magnitudes no numricas (NaN) en x
isinf(x) Devuelve unos en magnitudes infinitas (Inf) en x
isfinite(x) Devuelve unos en valores finitos en x
Podemos ver muchos ms casos pero todos seran similares: ischar, isempty, isequal,
Nota
isfloat, isinteger, islogical, isnumeric, isprime, isreal, isscalar, isspace

44
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 Descripcin
abs(A) Valor absoluto de A
sqrt(A) Raz cuadrada de A
sign(A) Funcin signo de A
exp(A) Exponencial de A
log(A) Logaritmo natural de A
log10(A) Logaritmo en base 10 de A
log2(A) Logaritmo en base 2 de A
power(A,n) Potencia n-sima de A
mean(A) Calcula la mediana de las columnas de la matriz A la
mediana de un vector A
diff(A) Calcula la diferencias divididas de primer orden a las
columnas de la matriz A y lo mismo para un vector A
cumprod(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 54.5982
2.7183 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 Descripcin
sin(A) Seno de A
cos(A) Coseno de A
tan(A) Tangente de A
cot(A) Cotangente de A
csc(A) Cosecante de A
sec(A) Secante de A
asin(A) Arco Seno de A
acos(A) Arco Coseno de A
atan(A) Arco Tangente de A
sinh(A) Seno hiperblico de A
cosh(A) Coseno hiperblico de A
tanh(A) Tangente hiperblico de A
asinh(A) Arco Seno hiperblico de A
acosh(A) Arco Coseno hiperblico de A
atanh(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.7568
0.8415 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 Descripcin
date Devuelve la fecha actual del sistema
calendar Muestra el calendario del mes actual
calendar(ao,mes) Calendario del mes y ao especfico
Eomday(ao,mes) ltimo da de mes y ao especfico

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

>> calendar
Feb 2012
S M Tu W Th F S
0 0 0 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 0 0 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 6.7188

Donde:
y = [y1(1)*y2(1) 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 6.7188

Donde:
Y = [y1(1)/y2(1) y1(2)/y2(2) y1(3)/y2(3)]

48
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 40 37 48 9
8 21 33 22 22
49 46 9 19 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 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

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


P =

14 40 34 35 35 38
27 48 38 2 16 40
48 33 37 14 48 9
48 2 20 2 2 24
8 42 33 5 22 22
49 47 9 41 19 32

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


P =
14 40 34 35 35 38
48 33 37 14 48 9
48 2 20 2 2 24
49 47 9 41 19 32

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 4
5 13 8 10 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) Construya una matriz aadiendo la matriz identidad de rango 3 a la derecha de la matriz A.


b) Sume a la tercera fila, la primera fila multiplicada por -3.
c) Cambie la primera columna de A por la tercera.
d) Construya una nueva matriz cuyas columnas sean las columnas 1ra y 3ra de A.
e) Construya una nueva matriz cuyas filas sean las columnas 1ra y 3ra de A.
2. Sea la matriz cuadrada:

a) Halle el valor mnimo dentro de cada fila de A.


b) Ordene los elementos de A en orden descendente dentro de cada columna.
c) Ordene los elementos de A en orden ascendente dentro de cada fila.
d) Forme una lista con los elementos de A ordenada de forma ascendente.
e) 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) Defina una matriz B formado por las filas pares de la matriz A.
b) Defina una matriz C formado por las columnas impares de la matriz A.
c) Defina una vector d formado por la tercera columna de la matriz A
d) 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
3
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 b c

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:
nombre: 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.
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.
Es muy importante que guardemos el archivo con el mismo nombre de la funcin definida en la cabecera.
Nota
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 x=[-2:2]; % extension de x como vector
2 f=inline('0.9*x.^4-12*x.^2-5*x'); % funcion f(x)
3 y=g(x) % evaluando la funcion f en los valores de x

60
Gua Prctica MatLAB

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


>> sol_inline
y =
-23.6000 -6.1000 0 -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 fprintf debeutilizarse
siguiendo la sintaxis:
>>fprintf('Texto %-5.2f texto adicional', nombre_variable)

El smbolo % marca Elementos de formato Nombre de la variable


del lugar donde se (definen el formato del cuyo valor ser
insertar el nmero nmero) visualizado
dentro del texto

62
Gua Prctica MatLAB

Los elementos del formato son:


-5.2f

Flag o bandera Ancho del campo y Caracter de conversin


(opcional) precisin (opcional) (obligatorio)

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

Caracter Descripcin
+ (signo mas) Justificacin izquierda del nmero dentro del campo
- (signo menos) Visualiza el carcter de signo ( + o -) delante del nmero
0 (cero) 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 primer numero: ');


2 n2=input('Ingrese el segundo numero: ');
3 n3=input('Ingrese el tercer numero: ');
4 prom=(n1+n2+n3)/3;
5 fprintf('Promedio de 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 x = 12;
2 y = 15;
3 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
<Sentencias por Defecto>;
end

66
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; f=sin(3*x)*exp(-x/2);


case 5; f=sqrt(x+5)*(x^2+5);
case 6.1; f=x^2.6;
otherwise; 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) El cuerpo del bucle for contiene una sentencia condicional
sentencias1; if que evala una condicin.
if condicin
sentencias2;
La sentencia de salto continue se ejecutar siempre que la
continue
evaluacin de la condicin resulte verdadera.
end Al ejecutarse continue se iniciar una nueva iteracin,
sentencias3; salteando las instrucciones que preceden a continue, es
end 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
La sentencia de ruptura break al ejecutarse finalizar el
sentencias2;
ciclo del bucle for obviando la ejecucin de las sentencias
break
posteriores, es decir las sentencias3.
end
sentencias3;
end

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
4
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 Descripcin
plot Grafico de lneas en el plano cartesiano, ubicando y uniendo los puntos con
segmentos de recta.
bar,barh Grafica parcela de barras verticales y horizontales
hist Grafica el histograma
stem Grfico de bastones verticales, encierra a los puntos y los proyecta al eje x.
stairs Grfica con trazos tipo escalonado.
polar Grafica las expresiones en coordenadas polares
pie Realiza grficos de sectores.
rose Grafica el histograma angular, diagrama polar que muestra la distribucin de
valores agrupados de acuerdo con su rango numrico
compass Grafica un conjunto de flechas con origen en (0,0), cuya magnitud y
direccin estn determinadas por el mdulo de z=x+iy
feather Dibuja un conjunto de flechas con origen en el eje "x", cuya magnitud y
direccin estn determinada por el mdulo de y.
loglog Realiza una grfica cartesiana con escala logartmica en los ejes
coordenados.
semilogx Realiza una grfica cartesiana con escala logartmica en el eje "x" y escala
normal en el eje y.
semilogy Realiza una grfica cartesiana con escala logartmica en el eje "y" y escala
normal en el eje "x".
fill 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 Color de Lnea Tipo de Marca
- Continua b Azul . Punto
-- Discontinua r Rojo + Cruz
: Punteada g Verde o Circunferencia
-. Guin y Punto c Cian x Equis
x Equis m Magenta s Cuadrado
o Circunferencias y Amarillo d Diamante
+ Cruces k Negro p 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: , implemente un script para representar
dichos puntos en el plano cartesiano.
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 Descripcin
grid on, grid off Activa o desactiva el enrejado de los ejes.
xlabel('cadenax') Coloca la etiqueta cadenax al eje x.
ylabel('cadenay') Coloca la etiqueta cadenay al eje y.
title('cadena') Coloca el titulo cadena a la grfica.
legend('cad_Leg') Coloca la leyenda cad_leg a la grfica
axis([xo xf yo yf]) Sita los valores mnimos y mximos para los ejes
hold on, hold off Congela y descongela a la ventana figura para poder superponer
otra grafica en los mismos ejes.
text(x,y,'cadena') Ingresa automticamente el texto cadena en el plano
cartesiano iniciando la escritura en (x,y)
gtext(x,y,'cadena') Ingresa manualmente (con mouse) el texto cadena en el plano
cartesiano iniciando la escritura en (x,y)
ginput(n) 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); % vector dominio
y=sin(x.^2); % vector rango
plot(x,y) % 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; >>x=0:0.1:2*pi;
>>y=exp(-x/2).*sin(2*x); >>y=sin(x);
>>stem(x,y) >>stairs(x,y)

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

Paramtricas:
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: pie:
>> x = -4:0.1:4; >> x = [1 3 0.5 2.5 2];
>> y = randn(length(x),1); >> explode = [0 1 0 0 0];
>> hist(y,x) >> 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 Descripcin
plot3 Grafica un conjunto de puntos en los ejes tridimensional.
fill3 Dibuja una regin poligonal cuyos vrtices son los elementos de
los vectores que representan a los datos en los ejes XYZ.
stem3 Grafica bastones verticales, iniciando desde el plano XY
comet3 Realiza el trazado de la curva en forma dinmica
bar3 Grafica de barras tridimensionales
pie3 Grafica sectores cilndricos tridimensionales
mesh Grafica una superficie z=f(x,y)
meshc Grafica una superficie z=f(x,y) y proyecta las curvas de nivel en
el plano XY.
meshz Grafica una superficie z=f(x,y) cerrando la grafica con las
fronteras del dominio.
surf Grafica una superficie z=f(x,y) dando relleno de color a cada una
de las celdas.
surfc Grafica una superficie z=f(x,y) , proyectando las curvas de nivel
al plano XY
surfl Grafica una superficie z=f(x,y) considerando una iluminacin en
formato bsico.
waterfall Grafica una superficie z=f(x,y) en forma de cascada.
contour
contour3 Grafica las curvas de nivel en 2D y 3D
sphere Grafica una esfera unitaria.
cylinder Grafica una superficie de revolucin para f(t) en el dominio t
ribbony Grafica una superficie z=f(x,y) como cintas tridimensionales
quiver3 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: , implemente un script para
representar dichos puntos en el plano cartesiano.
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 en MATLAB, utilizaremos la funcin meshgridque tiene
la siguiente sintaxis:
[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) >> surf(xm,ym,zm)

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


imagen es nica. Esto no es as para
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 ]; >> x = [1 3 0.5 2.5 2];
>> bar3(x); >> 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 ), en y dado su vector de


posicin expresado mediante el parmetro ;

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:
a) ,
b) ,
c) ,
d) ,

102
5
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 15 165 33
84 -60 127 -3
-104 -20 -62 33
40 16 140 -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 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: var = polyint(poly)
var = polyint(poly,k)

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

Si queremos graficar al polinomio en el dominio , implementaremos un script


con las siguientes instrucciones:
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: , obtenga dicho polinomio


adems de su grfica para .
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: Pol = polyfit(datoX,datoY,grado)

108
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 : Interpolacin del vecino ms cercano
linear : Interpolacin lineal
cubic : 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) Temperatura F


0.0 72.5
0.5 78.1
1.0 86.4
1.5 92.3
2.0 110.6
2.5 111.5
3.0 109.3
3.5 110.2
4.0 110.5
4.5 109.9
5.0 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 y
0.0 18
1.0 20
2.0 12
3.0 0
4.0 -10
5.0 -12
6.0 0
7.0 32
8.0 90
9.0 180
10.0 308

112
6
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 % Polinomio de Lagrange
end

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 =
-4 -2 0 2 4

y =
0.7568 -0.9093 0 0.9093 -0.7568

-0.8330 0.4546 0.4546 -0.8330


-0.3219 0.0000 0.3219
-0.0537 -0.0537
0.0000

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
7
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 en lugar de inv(A); sin embargo, la
manera ms sencilla de hacerlo en MATLAB es escribiendo:
>> 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:
, y

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

128
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 =
0 0.3333 0
0.3333 0 0.3333
0 0.2500 0

X =
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 =
0 0.3333 0
0.3333 0 0.3333
0 0.2500 0

X =
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 Gauss-
Seidel. 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
8
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 se transforma a la forma , y sta se utiliza


como una regla recursiva, es decir,

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.
x g(x)
0
1.0000000000 1.0893766600
1
1.0893766600 1.0848521150
2
1.0848521150 1.0850811625
3
1.0850811625 1.0850695674
4
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 Newton-


Rapson 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: , para un valor inicial
de y tolerancia de .
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 , aplicando el script
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
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 , y su interseccin con el plano como el siguiente punto para continuar el mtodo en
la siguiente iteracin. La ecuacin del plano tangente a es la siguiente:
(1)
Donde:
y

De la misma manera, la ecuacin del plano tangente a es la siguiente:


(2)
Donde:
y

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 , y . Las ecuaciones


anteriores pueden expresarse en forma matricial de la siguiente manera:

(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 y 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 2 1 0.7500 0.7083 0.7071
y 1 1 0.7500 0.7083 0.7071

144
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 , que sea exacta hasta la segunda cifra
significativa.
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 . Encuentre
las races ms cercanas a 4.5 y 7.7.
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 y .


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
9
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:
(1)
Para valores dados de y .
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 , se pide calcular la integral para un dominio


con 50 nodos.
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 0 0
1.5708 2.0944 0 0
1.8961 2.0046 1.9986 0
1.9742 2.0003 2.0000 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 met_simpson13.m que se encuentra en el disco, obtendremos lo


siguiente:
>>[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: , de donde se tiene que:

Tomando 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 a , 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 sol_RK4.m en MATLAb que resuelva dicho algoritmo, el
cdigo ser:
% 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


ordinaria.
tspam : Vector de valores del dominio en que va a ser evaluada la funcin solucin.
CI : Condicin inicial
y : Funcin solucin evaluada en los valores de tspam
t : Es un vector de los mismos elementos de tspam
160
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)

Supngase una moneda con y , que cae de un edificio, entonces


. 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 0
1.0000 9.3244
2.0000 16.3644
3.0000 20.6352
4.0000 22.8944
5.0000 24.0044
6.0000 24.5302
7.0000 24.7750
8.0000 24.8880
9.0000 24.9400
10.0000 24.9638
11.0000 24.9748
12.0000 24.9798
13.0000 24.9821
14.0000 24.9832 Se observa que la velocidad terminal hallada por
15.0000 24.9837
16.0000 24.9839
el mtodo numrico es de 24.98m/s, la cual es
17.0000 24.9840
la misma terica, lo que demuestra el podero del
18.0000 24.9840 mtodo de Runge-Kutta para la solucin numrica
19.0000 24.9841 de ecuaciones diferenciales
20.0000 24.9841

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:

', adems:

166
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

You might also like