Documentos de Académico
Documentos de Profesional
Documentos de Cultura
G UAS P RCTICAS
B
A
L
T
A
M
ventas@editorialmacro.com
www.editorialmacro.com
ndice
ndice
ndice
ndice
ndicendiceIndice
ndice
Captulo 1: Introduccin
El GUI de Matlab..........................................................................................................9
Ingreso de Datos...........................................................................................................10
Tipos de Datos..............................................................................................................13
Datos Numricos.........................................................................................................................13
Nmeros Reales...........................................................................................................................13
Nmeros Complejos....................................................................................................................14
Nmeros Enteros.........................................................................................................................15
Conversin de Tipo de Datos.......................................................................................................16
Valores Especiales.......................................................................................................................16
Funciones de Identificacin de Tipo de Dato..............................................................................17
Cadenas de Caracteres................................................................................................................17
Comparacin de Cadenas............................................................................................................18
Conversin de Valores Numricos a Cadenas y Viceversa...........................................................20
Tipos de Formato de Salida.........................................................................................................22
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
Superficies....................................................................................................................91
Forma z=f(x,y)..............................................................................................................................91
Sombras y Colores.......................................................................................................................92
Rotacin de Grfica.....................................................................................................................93
Superficies Complejas.................................................................................................................93
Estadsticas..................................................................................................................................94
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
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
Ejercicios propuestos....................................................................................................145
Captulo 9: Integracin
Mtodo de Euler...........................................................................................................155
Mtodo de Euler Modificado........................................................................................157
Mtodo de Runge Kutta................................................................................................159
Funciones Ode..............................................................................................................160
Solucin de Ecuaciones Diferenciales de Orden Superior..............................................164
MatLAB
El presente manual: MATLAB Aplicado a los Mtodos Numricos e Ingeniera est
orientado a todos los interesados, estudiantes y profesionales de las diferentes
especialidades, en desarrollar la capacidad de manejo de la herramienta MATLAB.
Tiene un enfoque, principalmente, a la adecuacin y familiarizacin del programa
con el usuario. Y al ser la eficiencia en la resolucin de problemas matemticos
la principal caracterstica de esta herramienta, este manual proporciona los
siguientes temas: una introduccin al ambiente de trabajo del MATLAB, tipos de
datos, entrada y salida de datos, el manejo y visualizacin de variables, creacin
de m-files, estadstica bsica, programacin utilizando la sentencias de control
de flujo, el desarrollo de visualizaciones grficas, la aplicacin a los Mtodos
Numricos, as como ejemplos directos de aplicacin a la ciencia e ingeniera.
Al ser una herramienta de un lenguaje de muy alto nivel, fcil de aprender y
usar, muy potente, flexible, extensible, de gran exactitud, robusto y rpido. No
predispone como requisito necesario el conocimiento de algn otro tipo de lenguaje
de programacin, pero si es de su conocimiento acelerara el estudio del programa.
Dentro de este manual encontraremos un conjunto de herramientas (grupo
de funciones con propsito de aplicacin directa) que nos permitirn resolver
problemas diversos mucho ms rpidos y eficientes, comparados con otro lenguaje
tales como FORTRAN, C/C++ e inclusive JAVA.
Al finalizar el uso de este manual el lector podr ser capaz de interpretar todo
tipo de expresin de clculo al lenguaje MATLAB, adems de poder implementar
estructuras de cdigo para solucionar problemas con una metodologa adecuada
que podemos describir de la siguiente manera: Planteamiento claro del problema,
descripcin de las informacin de entrada y salida, resolucin del problema de
forma manual para ciertos conjuntos de datos sencillos, implementacin de una
solucin en MATLAB, comprobacin de la solucin ingresando datos distintos.
Espero que este manual didctico pueda servir como gua tanto a los programadores
expertos como para principiantes, pero sobretodo que sea un medio de difusin
para lograr el inters de la comunidad acadmica en esta herramienta sofisticada
que actualmente se dispone.
Captulo
Introduccin
En esta parte presentamos al entorno de manejo de Matlab para su mejor adaptacin, como un
entorno interactivo para realizar anlisis de datos, clculo numrico y de visualizacin grfica. Tambin
se explicar cmo pueden representarse los datos y comandos para imprimir informacin. En las
primeras secciones comenzaremos explorando Matlab de la forma ms simple, en modo comando: el
usuario pregunta y Matlab responde.
El GUI de Matlab
Cuando se instala el programa, en este caso se realiz en el sistema operativo Windows 7, este por
defecto crea una carpeta de nombre MATLAB en el directorio Documentos, y es ese lugar donde por
defecto el programa almacenar todo archivo creado.
Captulo 1
Donde:
variable:
10
Ejemplo:
a1, dato, data, f1
variables validas
es diferente a meDia23
45va, _p1, 3w1 variables invalidas
media23
1p,
Es un dato o un conjunto de datos ordenados en filas y columnas. Por defecto los datos
toman el tipo double, y se puede cambiar de tipo definindolo segn la necesidad del usuario (ver
ejemplos).
valor:
Tipo
Bytes
doubl
int
char
logical
8B
4B
2B
1B
11
Captulo 1
Ejemplos:
Ingrese los siguientes datos:
double:
>> x = 7;
int:
>>a = int16(23);
logical: Son los resultados de una comparacin o relacin que en programacin se define como 0
(falso) y 1 (verdadero).
>> m = 6>4;
La funcin who y whos, nos permite ver las variables creadas hasta el momento y a las variables con
sus caractersticas de ingreso, respectivamente que estn almacenados en el workspace.
Nota
>> who
Your variables are:
a
>> whos
Name
a
c
m
x
x
Size
1x1
1x10
1x1
1x1
Bytes
2
20
1
8
Class
int16
char
logical
double
Attributes
Si deseamos ver las caractersticas de una o de slo algunas variables, entonces especificamos ellas
de la siguiente manera:
>> whos a m
Name
Size
a
1x1
m
1x1
12
Bytes
2
1
Class
int16
logical
Attributes
Tipos de Datos
Los tipos de datos definidos son de dos clases: numricos y las cadenas de caracteres.
Datos Numricos
Nmeros Reales
Bytes
8
Class
double
Attributes
La funcin isfloat nos permite verificar si el dato ingresado es de punto flotante (decimal).
>> d1=isfloat(d)
d1 =
1
Las funciones realmax y realmin devuelven el valor mximo y mnimo para el tipo de doble
precisin.
>> realmax
ans =
1.7977e+308
>> realmin
ans =
2.2251e-308
b
Bytes
4
Class
single
Attributes
>> s1=isfloat(s)
s1 =
1
13
Captulo 1
Las funciones realmax y realmin devuelven el valor mximo y mnimo para el tipo de simple
precisin si es que especificamos el argumento single.
>> realmax(single)
ans =
3.4028e+038
>> realmin(single)
ans =
1.1755e-038
Nmeros Complejos
Se conoce que los nmeros complejos se definen como un valor que tiene parte real y parte imaginaria.
Donde la base imaginaria es i=(-1) y que en el programa se define con el carcter i j.
Existen 2 formas de ingresar un dato complejo:
La primera es digitar la expresin a+bi.
>> c = 7-15i
c =
7.0000 -15.0000i
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
Estos datos tendrn un atributo caracterstico de complex, segn se puede observar si visualizamos
a las variables en el workspace.
>> whos z c
Name
Size
c
1x1
z
1x1
Nota
Bytes
16
16
Class
double
double
Attributes
complex
complex
Las funciones real, imag, abs y angle, son aplicables tambin a un arreglo de datos
(matriz de datos).
Nmeros Enteros
Definimos un dato entero como aquel valor exacto dentro del programa. La siguiente tabla muestra
cmo definir los datos enteros:
Tipo
Funcin
Rango de Valores
int8
int16
int32
int64
uint8
uint16
uint32
uint64
-27 a 27 -1
-215 a 215 -1
-232 a 232 -1
-264 a 264 -1
0 a 28 -1
0 a 216 -1
0 a 232 -1
0 a 264 -1
Class
int64
int8
int16
int32
Attributes
x=int8(23);
y=int16(46);
w=int64(-6);
z=int32(157);
whos x y w z
Name
Size
w
1x1
x
1x1
y
1x1
z
1x1
Bytes
8
1
2
4
15
Captulo 1
Conocidos los tipos de datos, es posible cambiar de un tipo a otro tal como mostraremos a continuacin:
>>
>>
>>
>>
a=int16(24);
b=double(a);
c=single(a);
whos a b c
Name
Size
a
1x1
b
1x1
c
1x1
Valores Especiales
Bytes
2
8
4
Class
int16
double
single
Attributes
La herramienta MATLAB considera los siguientes valores especiales inf, -inf y NaN, para
representar a las cantidades infinito positivo, infinito negativo y a todos aquellos que no son un
nmero, respectivamente. Verifique los resultados dados a continuacin:
>> x=45^245
x =
Inf
>> x=log10(0)
x =
-Inf
>> x=0/0
x =
NaN
>> x=inf/inf
x =
NaN
16
Sintaxis MatLab
pi
ij
inf
NaN
Significado
(-1)
No es un nmero
Mostramos a continuacin una tabla de funciones que nos permiten conocer los tipos de datos
ingresados al programa. Sea x un ordenamiento, entonces:
Funcin
Descripcin
whos x
isnumeric(x)
isa(x, arg)
isreal(x)
isnan(x)
isinf(x)
isfinite(x)
Cadenas de Caracteres
Bytes
52
Class
char
Attributes
17
Captulo 1
Para crear una matriz de 2 ms filas de caracteres debemos tener en cuenta que cada cadena debe
tener la misma cantidad de caracteres. Se debe rellenar con espacios en blanco a las cadenas ms
cortas para forzar que sean del mismo tamao.
Ejemplo:
>> nombres=[Jose Carlos;Rosario
nombres =
Jose Carlos
Rosario
Bartolomeo
;Bartolomeo ]
La manera ms simple para crear matriz de cadenas de texto es usando la funcin char. Esta funcin
rellena automticamente a las cadenas de menor longitud para igualar a la cadena de mayor longitud.
Ejemplo:
>> nombres=char(Jose Carlos,Rosario,Bartolomeo)
nombres =
Jose Carlos
Rosario
Bartolomeo
Comparacin de Cadenas
Las cadenas de texto tambin pueden compararse y esta se realiza carcter con carcter. La siguiente
tabla muestra las funciones con las que se pueden realizar dicha comparaciones:
Funcin
strcmp
18
Descripcin
Determina si dos cadenas son idnticas. Diferencia las maysculas y
minsculas.
strncmp
strcmpi
strncmpi
Recordemos que los resultados de una comparacin tiene como resultado los valores de 1 (verdadero)
0 (falso).
>>
>>
>>
c1
cad_1=masa;
cad_2=mazo;
c1=strcmp(cad_1,cad_2)
=
0
Como los primeros 2 caracteres de ambas cadenas anteriores son iguales, entonces podemos realizar
la comparacin siguiente:
>> c2=strncmp(cad_1,cad_2,2)
c2 =
1
c3=strncmp(cad_1,cad_2,3)
c3 =
0
Tambin podemos comparar cadenas utilizando los operadores relacionales, siempre que dichas
cadenas tengan iguales dimensiones, o uno sea escalar.
Ejemplo:
>> A=Rodrigo;
>> B=Roberto;
>> C = A==B
C =
1
1
19
Captulo 1
Conversin de Valores Numricos a Cadenas y Viceversa
En algunos casos es necesario el cambio de tipo de dato para facilitar la salida en pantalla de
combinaciones de nmeros y caracteres. La tabla siguiente muestra las funciones que hacen posible
algunas conversiones:
Comando
char
int2str
num2str y
str2num
mat2str y
str2mat
dec2hex y
hex2dec
dec2bin y
bin2dec
dec2base
Descripcin
Convierte un entero positivo a su equivalente carcter (cdigo ASCII). Trunca
cualquier parte fraccional.
Convierte un valor numrico de tipo int a un dato de tipo char (carcter).
Convierte un valor numrico de tipo double a un dato de tipo char (carcter) de
precisin con formato especfico y viceversa, respectivamente.
Convierte un tipo numrico a una de tipo carcter de una determinada
precisin, retornando una cadena Matlab que puede ser evaluada y viceversa,
respectivamente.
Convierte un entero positivo a un dato de tipo char de base hexadecimal y
viceversa, respectivamente.
Convierte un entero positivo a un dato de tipo char de base binaria y viceversa,
respectivamente.
Convierte un entero positivo a un dato de tipo char de cualquier base de 2 a 36.
Realizando lo contrario:
>> newM=int8(Mc)
newM =
77
65
84
76
65
20
66
50
48
49
49
66
Realizando lo contrario:
>> newnum=str2num(cadena)
newnum =
23
34
11
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
short e
short g
long
long e
long g
Rat
Hex
Bank
Compact
Loose
Por defecto el tipo de formato del Matlab es el short, para cambiar a un diferente tipo de formato
podemos usar la funcin format, estos cambios slo afectan la forma en la que los nmeros son
visualizados y no como el programa los calcula.
El cambio de formato lo realizamos as:
>> format
tipo
Ejemplo:
>> x=[26/14 3 16.567246
>> format short
>> x
x =
1.8571
16.5672
4e-4];
0.0004
22
16.567246000000001
0.000400000000000
x =
13/7
2833/171
1.86
16.57
1/2500
>> x
x =
0.00
Para volver al formato por defecto bastara con sentenciar la funcin format.
Nota
Para representar las potencias del nmero diez, Matlab abrevia la forma de su
definicin utilizando la forma exponencial.
Entonces:
104 1e4 510-7 5e-7
23
Captulo
Operaciones con
Matrices y Vectores
Matrices
Cuando resolvemos problemas de ingeniera, es importante saber visualizar los datos relacionados
con el problema. A veces consiste en un solo nmero, como el peso de un cuerpo, en otras ocasiones
podra ser una coordenada en un plano, la cual podemos representar como un par de nmeros. En
todo caso, podemos representar cualquier ejemplo usando un ordenamiento de datos dispuestos en
filas y columnas llamado matriz.
Ejemplo:
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
Si una matriz tiene al menos un elemento complejo, entonces dicha matriz es compleja.
Sea:
>> C = [7+i -2+5i;4 -9i]
C =
7.0000 + 1.0000i -2.0000 + 5.0000i
4.0000
0 - 9.0000i
25
Captulo 2
Tambin podemos obtener la matriz de los valores de la parte real y de la parte imaginaria de la matriz
C anteriormente definida.
>> Creal = real(C)
Creal =
7
-2
4
0
>> Cimaginario = imag(C)
Cimaginario =
1
5
0
-9
>> Carg = angle(C)
Carg =
0.1419
1.9513
0
-1.5708
>> Carg = angle(C)*180/pi
Carg =
8.1301 111.8014
0 -90.0000
Al igual que para un par de valores, podemos construir una matriz de complejos con la funcin
complex utilizando un par de matrices de igual orden. Tomando los resultados anteriores, tenemos:
>> Cnew = complex(Creal,Cimaginario)
Cnew =
7.0000 + 1.0000i -2.0000 + 5.0000i
4.0000
0 - 9.0000i
Matriz Nula
Se define la matriz nula, como aquella matriz que no tiene elementos, es decir, es la representacin
del vaco. En Matlab se define as:
>> M = []
M=
[ ]
Nota
26
Se define como comentario a toda lnea de texto que el programa no identifica como sintaxis de cdigo,
su ingreso es despus de anteponer el carcter % y que toma el color verde para su identificacin.
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
paso = 1
Ejemplos:
>> V = 9:3:21
V =
9
12
15
18
21
>> V1 = 6:10
V1 =
6
7
10
>> V2=45:-6:18
V2=
45
39
33
27
21
P or sus ndices
Sea A una matriz ingresada:
A = aij
n m
, donde : i = 1, 2, , n y j = 1, 2, , m
Entonces :
El elemento aij se reconoce por A(i, j )
27
Captulo 2
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> a24 = A(2,4)
a24 =
-1
>> a12 = A(1,2)
a12 =
-6
b
P or su posicin en la matriz
Matlab asigna una numeracin de posicin a cada elemento de una matriz, donde:
A = [ ak ]nm , donde k = 1, 2, , n m
Entonces :
El elemento ak se reconoce por A(k )
31
A = 22
113
64
15
7 6
87
78
29
010
111
512
28
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
ones
eye
rand
randn
var = funcion(n)
= funcion(n,m)
var = funcion([n m])
matriz cuadrada
rectangular
rectangular
var
La 1ra forma permite crear matrices cuadradas de orden n, la 2da y 3ra forma crea matrices
rectangulares de orden nxm.
Ejemplos:
Matrices de puros ceros:
>> Z1 = zeros(3)
Z1 =
0
0
0
0
0
0
0
0
0
>> Z2 = zeros(2,7)
Z2 =
0
0
0
0
0
0
0
0
0
0
0
0
0
0
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
99
0
0
0
0
0
>> Z4(3) = 11
Z4 =
0
0
0
0
11
0
99
0
0
0
0
0
30
1
1
1
1
1
1
27
27
27
27
27
27
27
27
27
27
27
27
1
1
1
1
1
1
Matriz Identidad:
>> I = eye(4)
I =
1
0
0
1
0
0
0
0
0
0
1
0
0
0
0
1
>> I1 = eye(3,6)
I1 =
1
0
0
0
1
0
0
0
1
0
0
0
0
0
0
0
0
0
% un valor aleatorio
>> x = rand
x =
0.9058
0.0318
0.2769
5x5
0.9157
0.7922
0.9595
0.6557
0.0357
0.8491
0.9340
0.6787
0.7577
0.7431
0.0462
0.0971
Si se desea cambiar el domino entre 0 y un valor, solo multiplicamos por dicho valor.
>> X2 = 25*rand(3)
X2 =
20.5864
23.7556
17.3707
0.8612
7.9275
10.9686
9.5390
19.1379
19.8800
31
Captulo 2
Si deseamos tener datos entre dos valores consecutivos, slo sumamos dicho valor.
>> X3 = 25+rand(3) % datos entre 25 y 26
X3 =
25.1869
25.6463
25.2760
25.4898
25.7094
25.6797
25.4456
25.7547
25.6551
>> X4 = 12+9*rand(1,5) % datos entre 12 y 21
X4 =
13.4635
13.0710
16.4853
20.6377
15.0635
Es lo mismo al trabajar con la funcin randn, slo que en este caso algunos valores sern negativos.
constante.
Sintaxis: var
= linspace(Val_ini,Val_fin,# datos)
y Val_fin.
Ejemplo:
>> L = linspace(3,19,3)
L =
3
11
19
>> L = linspace(3,19,6)
L =
3.0000
6.2000
9.4000
12.6000
15.8000
19.0000
>> L = linspace(3,19); % crea un vector de 100 datos desde 3 a 19
logspace (a,b,n):
con n elementos.
logspace (a,b):
con 50 elementos.
Existen diferentes funciones de aplicacin directa a una matriz que realizan tareas especficas, las
cuales nos facilitan y agilizan, en muchos casos, soluciones de diversos problemas de clculo. A
continuacin mostramos algunas de estas funciones y su sintaxis de ejecucin para su adecuado uso.
size: Al aplicarse a una matriz obtiene un vector de 2 elementos que indica el orden de dicha matriz.
El 1er elemento indica el nmero de fila y el 2do el nmero de columna.
Sintaxis:
32
var = size(matriz)
var = [#f
#c]
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}
Aplicando a un vector:
>> fila = [14 -6 10 18 43];
>> Lf = length(fila)
Lf =
5
>> q = [19 5 10 -3];
>> Lq = length(q)
Lq =
4
Esta funcin calcula la suma de los elementos de cada columna o fila y los resultados de dicho
clculo los ordena en un vector.
sum:
Sintaxis:
var = sum(matriz)
var = sum(matriz,1)
var = sum(matriz,2)
Las 2 primeras sintaxis realizan por defecto la suma de los elementos de cada columna, ordenando
cada resultado en un vector fila, y la ltima sintaxis suma los elementos de cada fila, ordenando cada
resultado en un vector columna. Y si aplicamos esta funcin a un vector, obtendremos como resultado
el valor de la suma de todos sus elementos.
33
Captulo 2
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> As1 = sum(A,1)
As1 =
16
-12
17
-6
>> As2 = sum(A,2)
As2 =
5
9
1
>> fila = [14 -6 10 18 43]
>> sf = sum(fila)
sf =
79
prod: Esta funcin calcula el producto de los elementos de cada columna o fila y los resultados de
dicho clculo los ordena en un vector.
Sintaxis:
var = prod(matriz)
var = prod(matriz,1)
var = prod(matriz,2)
Anlogamente a la funcin anterior, las 2 primeras sintaxis realizan por defecto el producto de los
elementos de cada columna, ordenando cada resultado en un vector fila y la ltima sintaxis realiza
el producto de los elementos de cada fila, ordenando cada resultado en un vector columna. Y si
aplicamos esta funcin a un vector, obtendremos como resultado el valor del producto de todos sus
elementos.
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> Ap1=prod(A,1)
Ap1 =
66
42
112
0
>> Ap2 = prod(A,2)
Ap2 =
0
-14
770
>> fila = [14 -6 10 18 43];
>> pf = prod(fila)
pf =
34
650160
Obtiene los mximos de cada columna de una matriz y los ordena en un vector fila, tambin
podemos conocer a qu fila pertenece el dato mayor de cada columna. Aplicando la funcin a un
vector nos muestra el mayor valor de todos los datos.
max:
Sintaxis:
mayor = max(matriz)
[mayor,#fila] = max(matriz)
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5]
A =
3
-6
8
0
2
1
7
-1
11
-7
2
-5
>> mayor = max(A)
mayor =
11
1
8
Obtiene los mnimos de cada columna de una matriz y los ordena en un vector fila, tambin
podemos conocer a qu fila pertenece el dato menor de cada columna. Aplicando la funcin a un
vector nos muestra el menor valor de todos los datos.
min:
Sintaxis:
menor = min(matriz)
[menor,#fila] = min(matriz)
35
Captulo 2
Ejemplo:
Teniendo en cuenta la matriz A y el vector vec ingresados anteriormente.
>> menor = min(A)
menor =
2
-7
2
-5
>> Mv = min(vec)
Mv =
-6
diag: Aplicado a una matriz extrae la diagonal principal k-sima y lo ordena en un vector. Si es
aplicado a un vector nos crear una matriz diagonal con los elementos de dicho vector.
Sintaxis:
var
var
var
var
=
=
=
=
diag(matriz)
diag(martiz,k)
diag(vector)
diag(vector,k)
k=..-2,-1,1,2..
k=..-2,-1,1,2..
Ejemplo:
Definiendo una matriz W y obteniendo sus diagonales k-simas.
>> W = [1 6 -2;0 9 3;-5 8 4]
W =
1
6
-2
0
9
3
-5
8
4
>> Do = diag(W) % diagonal principal de W
Do =
1
9
4
36
0
0
1
0
2
0
0
0
0
0
0
0
0
0
1
0
0
Las siguientes funciones son utilizadas para aproximar valores numricos de una matriz.
Funcin
ceil
fix
floor
round
Descripcin
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
Funcin
cond(A)
det(A)
inv(A)
A'
poly(A)
eig(A)
norm(A)
normmest(A,2)
null(A)
orth(A)
pinv(A)
trace(A)
rank(A)
rref(A)
tril(A)
triu(A)
dot(v1,v2)
cross(v1,v2)
Descripcin
Muestra el nmero de condicin
Calcula la determinante
Calcula la inversa
Calcula la transpuesta
Obtiene el polinomio caracterstico
Calcula los valores propios
Halla la norma
Estima la norma-2
Reconoce los espacios nulos
Calcula la ortogonalizacin
Calcula la seudo inversa
Calcula la traza
Calcula el rango
Obtiene la reduccin mediante eliminacin de Gauss
Obtiene la matriz triangular inferior
Obtiene la matriz triangular superior
Calcula el producto escalar de los vectores
Calcula el producto vectorial de los vectores v1 y v2,
donde ambos deben ser de orden 1x3 3x1.
38
Aplicacin:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5;2 -1 6 1]
>> dA = det(A) % determinante
dA =
-786.0000
>> iA = inv(A) % inversa
iA =
-0.1985
-0.1221
0.0992
-0.1845
0.0916
0.0089
0.0611
0.1145
-0.0305
-0.1539
-0.3511
-0.0064
0.3740
0.1361
-0.0382
0.6170
>> At = A % transpuesta
At =
3
2
11
2
-6
1
-7
-1
8
7
2
6
0
-1
-5
1
>> Ap = poly(A) % polinomio caracterstico
Ap =
1.0000
-7.0000
19.0000 377.0000 -786.0000
>> Avp = eig(A) % valores propios
Avp =
-5.6726
5.3413 + 6.4108i
5.3413 - 6.4108i
1.9900
>> Atz = trace(A) % traza
Atz =
7
>> Ar = rank(A) % rango
Ar =
4
>> Ag = rref(A) % eliminacion por Gauss
Ag =
1
0
0
0
0
1
0
0
0
0
1
0
0
0
0
1
39
Captulo 2
Funciones Adicionales
Funcin
find(A)
fliplr(A)
flipud(A)
reshape(A,n,m)
rot90(A)
rot90(A,n)
expm(A)
sqrtm(A)
logm(A)
funm(A,@funcion)
[Vep,Vap]=eig(A)
[L,U]=lu(A)
[Q,R]=qr(A)
[U,S,V]=svd(A)
Descripcin
40
Ejemplos:
>> A = [pi 0; pi/4 pi/3]
A =
3.1416 0
0.7854 1.0472
>>Af = find(A) % devuelve los ndices como un vector columna
Af =
1
2
4
>> Arsh = reshape(A,1,4)
Arsh =
3.14160.7854 0 1.0472
>>A90 = rot90(A) % gira la matriz 90
A90 =
0 1.0472
3.1416 0.7854
>>A270 = rot90(A,3) % gira la matriz 270 ( 90 x 3 = 270 )
A270 =
0.7854 3.1416
1.0472
0
>> funm(A,@sin) % calcula el seno de cada elemento de la matriz
ans =
0.0000 0
-0.3248 0.8660
>> Ae = expm(A)
ans =
23.1407
7.6091 2.8497
41
Captulo 2
Operadores y Funciones Matemticas
En la realizacin de operaciones con las matrices, debemos tener en cuenta si dicha operacin
es matricial o de elemento a elemento (operacin de arreglos), pues ambos son muy diferentes y
pueden realizarse por operadores o funciones, entonces es necesario conocer cmo se aplica las
funciones y adems cmo se realizan las operaciones.
Operadores Aritmticos
Operador
A + B
A - B
A * B
A / B
A ^ n
Descripcin
Adicin de matrices
Sustraccin de matrices
Producto de matrices
Divisin de matrices = A*B-1
Potencia de matriz
4
7
>> A-B
ans =
-1
-1
2
1
>>A*B
ans =
14
22
10
15
>> A/B
ans =
-4.5000
-3.5000
>> A^3
ans =
55
90
42
2.5000
2.5000
90
145
Operador
Descripcin
A .* B
A ./ B
A .^ B
A .^ n
3
12
>> A./B
ans =
0.5000
0.7500
>> A.^B
ans =
1
81
3
64
>> A.^4
ans =
1
81
81
256
3.0000
1.3333
Operadores relacionales
Matlab como lenguaje de programacin dispone de operadores relacionales que permite hacer
comparaciones entre los elementos de dos arreglos de igual dimensin; en cualquiera de los casos
siguientes, el resultado es un arreglo de 0 (ceros) o 1 (unos) cuando la relacin es falsa o verdadera,
respectivamente. Estos operadores son los siguientes:
Tabla de Operadores Relacionales
Operador
>
<
==
<=
>=
~=
Descripcin
Mayor que
Menor que
Igual que
Menor que
Mayor que
Diferente que
43
Captulo 2
Operadores lgicos
Permite hacer comparaciones entre los elementos de dos arreglos de igual dimensin; en cualquiera
de los casos siguientes, el resultado es un arreglo de 0 (ceros) o 1 (unos) como en el tem anterior.
Estos operadores son los siguientes:
Tabla de Operadores Lgicos
Operador
&
|
~
=
Descripcin
y (and)
o (or)
no (not)
identico
Ejemplos:
Teniendo en cuenta a las matrices A y B definidas anteriormente, tendremos:
>> C=A>B
C =
0
0
1
1
>> C=(A==B)
C =
0
0
0
0
Funcin
xor(x,y)
any(x)
all(x)
exist('x')
isnan(x)
isinf(x)
isfinite(x)
Nota
44
Tabla de Funciones
Descripcin
Podemos ver muchos ms casos pero todos seran similares: ischar, isempty, isequal,
Ejemplo:
>> c = [Inf 0 5 -8 NaN 94];
>> exist (c) % pregunta si existe alguna variable llamada c
ans =
1
>> isnan (c) %c es NaN? devuelve 1 si es verdadero y 0 si es falso
ans =
0 0 0 0 1 0
>> isinf (c) %c es Inf? devuelve 1 si es verdadero y 0 si es falso
ans =
1 0 0 0 0 0
Funciones Matemticas
Para la simplicidad de clculo, Matlab tiene una variedad de funciones que afectan solamente a todos
los elementos de cada matriz a la que es aplicada, mas no altera el orden de estas. De ah que al
aplicarse a vectores podemos deducir la forma de operar entre vectores que es al de elemento a
elemento. La siguiente tabla nos indica las funciones matemticas ms conocidas:
Tabla de Funciones Algebraicas
Operador
abs(A)
sqrt(A)
sign(A)
exp(A)
log(A)
log10(A)
log2(A)
power(A,n)
mean(A)
diff(A)
cumprod(A)
Descripcin
Valor absoluto de A
Raz cuadrada de A
Funcin signo de A
Exponencial de A
Logaritmo natural de A
Logaritmo en base 10 de A
Logaritmo en base 2 de A
Potencia n-sima de A
Calcula la mediana de las columnas de la matriz A la
mediana de un vector A
Calcula la diferencias divididas de primer orden a las
columnas de la matriz A y lo mismo para un vector A
Devuelve el producto acumulativo de las columnas de la
matriz A y lo mismo para un vector A.
Observacin: La funcin mean al aplicarse a una matriz slo devuelve un vector fila de una cantidad
de elementos igual al de dicha matriz y un elemento si es que se aplica a un vector. La funcin diff
al aplicarse a una matriz devuelve otra matriz de igual cantidad de columnas, pero de nmero de filas
menor en una unidad de la matriz aplicada.
45
Captulo 2
Ejemplos:
>> A=[-2 4;1 -6];
>> abs(A)
ans =
2
4
1
6
>> exp(A)
ans =
0.1353
2.7183
54.5982
0.0025
>> power(A,3)
ans =
-8
64
1 -216
>> mean(A)
ans =
-0.5000
-1.0000
>> diff(A)
ans =
3
-10
Operador
sin(A)
cos(A)
tan(A)
cot(A)
csc(A)
sec(A)
asin(A)
acos(A)
atan(A)
sinh(A)
cosh(A)
tanh(A)
asinh(A)
acosh(A)
atanh(A)
Descripcin
Seno de A
Coseno de A
Tangente de A
Cotangente de A
Cosecante de A
Secante de A
Arco Seno de A
Arco Coseno de A
Arco Tangente de A
Seno hiperblico de A
Coseno hiperblico de A
Tangente hiperblico de A
Arco Seno hiperblico de A
Arco Coseno hiperblico de A
Arco Tangente hiperblico de A
Observacin: Para las funciones inversas asin y acos tener en cuenta que los datos deben estar
definidos entre el dominio [-1 , 1].
46
-0.7568
0.2794
>> sinh(A)
ans =
-3.6269
27.2899
1.1752 -201.7132
>> csc(A)
ans =
-1.0998
-1.3213
1.1884
3.5789
Tabla Principal
Operador
date
calendar
calendar(ao,mes)
Eomday(ao,mes)
Descripcin
Ejemplo:
>> date
ans =
14-Feb-2012
>> calendar
S
0
5
12
19
26
M
0
6
13
20
27
Tu
0
7
14
21
28
Feb 2012
W
Th
1
2
8
9
15
16
22
23
29
0
F
3
10
17
24
0
S
4
11
18
25
0
47
Captulo 2
Operaciones con Funciones
Debemos tener en cuenta la forma de ejecucin y sobretodo del tipo de resultado que deseamos
obtener cuando realicemos las operaciones utilizando las funciones matemticas de Matlab. A
continuacin, mostramos una forma prctica de realizar los clculos:
Sea:
>> x=[0:2] % vector de 1x3
x =
0
1
2
>> y1=exp(x) % al afectar a x la dimensin no cambia
y1 =
1.0000
2.7183
7.3891
Donde:
Donde:
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
Donde:
y = [y1(1)*y2(1)
6.7188
y1(2)*y2(2)
y1(3)*y2(3)]
Donde:
Y = [y1(1)/y2(1)
48
6.7188
y1(2)/y2(2)
y1(3)/y2(3)]
Ejercicio de aplicacin
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:
49
Captulo 2
50
Indexacin de Matrices
donde:
Ejemplo:
>> P=round(50*rand(6,8)) % creando una matriz aleatoria
P =
41
14
48
40
34
35
35
38
45
27
24
48
38
2
16
40
6
48
40
33
37
14
48
9
46
48
7
2
20
2
2
24
32
8
21
42
33
5
22
22
5
49
46
47
9
41
19
32
>> subP1=P([3 5 6],[2 3 5 7 8])
subP1 =
48
8
49
40
21
46
37
33
9
48
22
19
9
22
32
Un caso particular es cuando deseamos extraer una fila o una columna, pues normalmente tendramos
que hacer lo siguiente:
>>Pf5=P(5,[1:8]) % Obtencin de la 5ta fila
Pf5 =
32
8
21
42
33
5
22
22
51
Captulo 2
En este caso involucra un vector que especifica a todas las cantidades de columnas, si eso ocurre,
podemos abreviar la sintaxis, que realizar accin semejante, de la siguiente manera:
>> Pv5=P(5,:) % obtencin de la 5ta fila
Pv5 =
32
8
21
42
33
5
22
22
>>Pc3=P(:,3) % obtencin de la 3ra columna de P
Pc3 =
48
24
40
7
21
46
Conocido esto, nos resultar fcil eliminar una(s) fila(s) o columna(s) si es que asignamos a estas
el valor del vaco.
>> P
P =
41
45
6
46
32
5
14
27
48
48
8
49
48
24
40
7
21
46
40
48
33
2
42
47
34
38
37
20
33
9
35
2
14
2
5
41
34
38
37
20
33
9
35
2
14
2
5
41
35
16
48
2
22
19
38
40
9
24
22
32
35
14
2
41
35
48
2
19
38
9
24
32
35
16
48
2
22
19
38
40
9
24
22
32
40
48
33
2
42
47
52
Consiste en agrupar 2 o ms matrices para formar una de ordenmayor. Se mantiene las caractersticas
de cada matriz, porque son las variables que representan a estas con las que se realiza la
concatenacin. Por su forma de agrupacin se definen dos tipos:
Concatenacin Horizontal: Para agrupar de esta forma a un conjunto de matrices se debe tener
en cuenta que el nmero de filas de estas deben ser iguales y se agruparn como elementos de
un vector fila.
Concatenacin Vertical: En este caso la agrupacin se realizar con matrices que tienen igual
nmero de columnas y se agruparn como elementos de un vector columna.
Ejemplo:
% Generando las matrices R3x5, T2x5 y W3x1
>>R=round(32*rand(3,5))
R =
18
24
18
17
4
29
24
2
25
18
9
12
2
30
15
>>T=round(16*rand(2,5))
T =
0
3
5
3
5
13
8
10
4
10
>> W=round(56*rand(3,1))
W =
39
42
25
53
Captulo 2
Ejercicios propuestos
a)
b)
c)
d)
e)
a)
b)
c)
d)
e)
3. Con una sola orden de MATLAB cree una matriz aleatoria 4x4 de nmeros reales entre -5 y 5.
Indicacin: Ejecute help rand para saber cmo generar nmeros aleatorios en distribuciones
uniformes (randn se emplea para distribuciones normales).
4. En una sola orden de MATLAB cree una matriz 3x5 cuyo nico elemento sea el 7.
5. Con una sola orden de MATLAB cree una matriz aleatoria 4x4 de nmeros enteros entre -5 y 5.
6. Considere la siguiente orden de MATLAB: A=magic(5). En una sola orden:
a)
b)
c)
d)
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
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:
Ejercicios ms avanzados
1. En una sola instruccin, cambie todos los valores de la diagonal de una matriz cuadrada a cero.
2. En una sola instruccin, sustituya todos los valores de la diagonal de una matriz cuadrada por los
elementos de un vector dado.
3. Ordene los elementos de una matriz del menor a mayor manteniendo su forma (indicacin:
emplee la orden reshape).
4. En una sola instruccin, ponga a cero todos los elementos negativos de una matriz.
5. En una sola instruccin, ponga a cero todos los elementos de una matriz que estn entre -1 y 1.
(La conjuncin lgica es &).
6. De tres formas distintas (cada una en una sola instruccin), averigue el nmero de elementos de
una matriz, de forma que al final tengamos un nmero.
55
Captulo
Programacin
en Matlab
Un lenguaje de programacin es un lenguaje que puede ser utilizado para controlar el comportamiento
de una mquina, particularmente una computadora. Consiste en un conjunto de smbolos y reglas
sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones,
permite especificar de manera precisa sobre qu datos de una computadora debe operar, cmo
deben ser estos almacenados, transmitidos y qu acciones debe tomar bajo una variada gama
de circunstancias. Todo esto, a travs de un lenguaje relativamente prximo al lenguaje humano
(lenguaje de alto nivel).
Todo programa en su edicin debe tener en cuenta las 3 lgicas de programacin, que se definen
como: Lgica Secuencial, Lgica Selectiva y Lgica Repetitiva.
En este captulo conoceremos cmo editar e implementar un programa utilizando la sintaxis del
Matlab, manteniendo los criterios de las lgicas en la cual se gobiernan, y que dependiendo de su
estructura podr ser reconocido como M-File.
M-FILES
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
El archivo fue guardado con el nombre de hipotenusa, note en la parte superior de la ventana el
nombre con el que fue guardado.
Ejecutando el script en la ventana de comandos:
>> hipotenusa
Your variables are:
a
Segn la lnea 8 del script hipotenusa la salida de la ejecucin que debe dar la instruccin who son
las variables creadas en el workspace.
58
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:
Contrario a los scripts, todas las variables que se definan dentro del cuerpo o definicin de la funcin,
si la funcin es invocada desde la ventana de comandos, no pasarn a formar parte de nuestro
workspace.
Nota
Es muy importante que guardemos el archivo con el mismo nombre de la funcin definida en la cabecera.
De no hacer esto ser un error
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
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:
Ejercicio:
Usando un archivo de funcin en MATLAB para la siguiente funcin:
La entrada de la funcin ser x, y la salida ser y. Escriba la funcin de forma que xpueda ser un
vector, y utilcela para calcular el valor de la expresin evaluada en x e [-2,2] siendo x entero.
Solucin:
Usando funciones en lnea, escribiremos en el editor lo siguiente:
1
2
3
60
-16.1000
-43.6000
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:
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
61
Captulo 3
Ejemplo:
>> n=input('Nombre: ','s');
Nombre: Rosario Taipe
>> disp(n) % muestra lo representado por la variable n
Rosario Taipe
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
fprintf
El smbolo % marca
del lugar donde se
insertar el nmero
dentro del texto
62
Elementos de formato
(definen el formato del
nmero)
Nombre de la variable
cuyo valor ser
visualizado
debeutilizarse
-5.2f
Flag o bandera
(opcional)
Caracter de conversin
(obligatorio)
El flag o bandera, cuyo carcter es opcional, puede ser uno de los siguientes:
Caracter
+ (signo mas)
- (signo menos)
0 (cero)
Descripcin
La especificacin del ancho y precisin del campo (5.2 en el ejemplo anterior) es opcional. El primer
nmero (5 en nuestro ejemplo) es el ancho del campo, el cual nos indica el menor nmero de dgitos
en la visualizacin. Si el nmero que se visualiza esmenor que el ancho del campo, se aadirn ceros
o espacios delante del nmero encuestin. La precisin se corresponde con el segundo nmero en el
ejemplo anterior, y especifica el nmero de dgitos que se mostrarn a la derecha del punto decimal.
El ltimo elemento es el correspondiente al formato de conversin (f en el ejemplo anterior). ste es
obligatorio.
A continuacin se muestran los caracteres de conversinms utilizados:
e Notacin exponencial en minsculas (ej. 1.709098e+001).
E Notacin exponencial en maysculas (ej. 1.709098E+001).
f Notacin de punto fijo (ej. 17.090980).
g Representacin en formato corto de las notaciones e o f.
G Representacin en formato corto de las notaciones E o f.
i Entero.
Se puede obtener informacin adicional sobre estos y otros formatos utilizando la ayudade MATLAB,
el men Help (Ayuda).
Ejemplo:
Pedir al usuario por pantalla tres nmeros y responde con el mensaje: Promedio de los nmeros
ingresados es...
Solucin:
Realizando un script, en el editor escribiremos las siguientes lneas:
63
Captulo 3
1 n1=input('Ingrese el
2 n2=input('Ingrese el
3 n3=input('Ingrese el
4 prom=(n1+n2+n3)/3;
5 fprintf('Promedio de
Hoy en da las aplicaciones informticas son mucho ms ambiciosas que las necesidades de
programacin existentes antao, principalmente debido a las aplicaciones grficas, por lo que las
tcnicas de programacin estructurada no son suficientes. Ello ha llevado al desarrollo de nuevas
tcnicas, tales como la programacin orientada a objetos y el desarrollo de entornos de programacin
que facilitan la programacin de grandes aplicaciones.La programacin estructurada es una tcnica
para escribir programas (programacin de computadora) de manera clara, teniendo en cuenta el
Teorema del Programa Estructurado, propuesto por Bhm-Jacopini, el cual demuestra que todo
programa puede escribirse en base nicamente a tres estructuras de control:
Secuencial
Selectica (Instruccin condicional)
Repetitiva (Iteracin, bucle de instrucciones, con condicin al principio)
Solamente con estas tres estructuras se pueden escribir todos los programas y aplicaciones posibles.
Si bien los lenguajes de programacin tienen un mayor repertorio de estructuras de control, stas
pueden ser construidas mediante las tres bsicas citadas.
Estructura secuencial: Una estructura de programa es secuencial si las instrucciones se ejecutan una
tras otra, a modo de secuencia lineal, es decir que una instruccin no se ejecuta hasta que finaliza
la anterior, ni se bifurca el flujo del programa.
Ejemplo:
1
2
3
x = 12;
y = 15;
z = x+y;
64
if else end
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
condicin
% sentencia nula
else
<Sentencias>;
end
condicin
<Sentencias1>;
elseif
<Sentencias2>;
elseif
<Sentencias3>;
.
.
.
elseif
<SentenciasN>;
else
end
66
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
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
67
Captulo 3
switch case otherwise end (Multibifurcacin)
Ejemplo ilustrativo:
Implementar un archivo script que calcule y muestre el valor respectivo de la funcin f para un valor
de x ingresado por el usuario, siendo la funcin de la siguiente forma:
Solucin:
Implementamos en el editor las siguientes lneas de instruccin:
x=input('x= ');
switch x
case pi/5;
case 5;
case 6.1;
otherwise;
f=sin(3*x)*exp(-x/2);
f=sqrt(x+5)*(x^2+5);
f=x^2.6;
f=0;
end
fprintf('f(%4.3f)=%f\n',x,f)
68
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
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)
for end
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
Sentencias especiales
71
Captulo 3
Ejercicios de Aplicacin
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.
72
a=input('a= ');
b=input('b= ');
c=input('c= ');
d=b^2-4*a*c;
if d>0
disp('Raices Reales')
elseif d==0
disp('Raices Reales Iguales')
else
disp('Raices Complejas')
end
x1=(-b+sqrt(d))/2;
x2=(-b-sqrt(d))/2;
fprintf('x1=%8.6f\nx2=%8.6f\n\n',x1,x2)
6. Implemente un script que muestre en pantalla la siguiente lista de artculos de una tienda:
[1] ZapatosS.200.00
[2] Pantalones.S.100.00
[3] Camisas..S. 80.00
Y que el programa permita al usuario elegir el tipo de artculo a comprar, adems que pueda
ingresar la cantidad que desea comprar. Finalmente el programa deber mostrar el valor total a
pagar.
Ejercicios Propuestos
1. Escriba un programa que permita determinar si un nmero entero dado es par o impar. (Utilizar
el operador mod).
2. Utilizando el operador relacional > (mayor que), escriba un archivo.m que permita definir si un
nmero a es mayor que un nmero b. El programa debe admitir ingresar los nmeros a y b, e
imprimir el resultado a es mayor que b, o a es menor que b, o a es igual a b.
3. Implemente un programa que permita ingresar un vector con N nmeros y, posteriormente, permita
evaluar la media aritmtica.
4. Implemente un programa que d como resultado los nmeros primos menores que un nmero
dado n (positivo y entero).
73
Captulo 3
5. Imprima los mltiplos de 7 existentes entre dos valores m y n pedido al usuario. Modifique el
algoritmo para que calcule cuntos nmeros hay y su suma.
6. Solicite al usuario dos nmeros n y k y calcule (combinaciones de n elementos tomados de k en k).
7. Disee un algoritmo que permita calcular la posicin (fila y columna) de la mayor componente de
una matriz pedida al usuario.
8. Realice un programa en Matlab que calcule el centro de masas de un sistema de partculas en
3D. Inters: Sumatorios y medias.
9. Cree un archivo.m que permita evaluar las series. Los argumentos de entrada son x y n, donde n
es el nmero de trminos que se evalan en la serie y x es un nmero real:
a)
b)
c)
74
Captulo
Grficos
MATLAB ofrece numerosas oportunidades para emplear rutinas que realicen grficas en dos y tres
dimensiones, estas grficas son alojadas en una ventana para su visualizacin donde existe una
paleta de comandos que permiten:
Aadir texto en posiciones deseadas.
Aadir flechas o lneas.
Seleccionar alguna de las componentes del grfico.
Rotar el grafico a criterio deseado.
Las grficas de MATLAB se pueden exportar a multitud de formatos grficos puntuales y vectoriales
(jpg, bmp, tiff, eps, png). Adems est la posibilidad de guardarlos con la extensin fig. En ese caso,
cuando se abre la figura se inicia la ejecucin de MATLAB y se ofrece al usuario lafigura tal y como
estaba cuando la guard, incluyendo modificaciones realizadas directamente sobre la ventana grfica.
En lugar de dar instrucciones que se puedan ejecutar en la ventana de comandos, en este captulo
principalmente implementaremos scripts que generen uno o varios grficos al ejecutarse.
Ventana de Figura
Todas las grficas realizadas en MATLAB deben alojarse en una ventana de figura que se identifica por
un nombre seguido de un valor de identificacin, para invocarlo debemos escribir la siguiente sintaxis:
Ejemplo:
>> figure(8) % invocando a la ventana figura 8
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.
Funcin
plot
bar,barh
hist
stem
stairs
polar
pie
rose
compass
feather
loglog
semilogx
semilogy
fill
Descripcin
76
La primera sintaxis realiza solamente una grfica y la segunda es la forma para realizar hasta N
grficas en un mismo eje cartesiano.
El argumento 'caractersticas' est conformado por 3 caracteres que especifican algunas
propiedades para la grfica a realizarse con la funcin plot. El primer carcter nos especifica el tipo
de trazo a mostrar, el segundo especifica el color de lnea y el tercer carcter especifica la marca del
punto.
Caractersticas de la Grfica
Tipo de lnea
-:
-.
x
o
+
Continua
Discontinua
Punteada
Guin y Punto
Equis
Circunferencias
Cruces
Color de Lnea
b
r
g
c
m
y
k
Tipo de Marca
Azul
Rojo
Verde
Cian
Magenta
Amarillo
Negro
.
+
o
x
s
d
p
Punto
Cruz
Circunferencia
Equis
Cuadrado
Diamante
Pentagrama
Existen mucho ms atributos que podemos asignar a las grficas realizadas, como por ejemplo el
tamao de la marca de punto, el color de fondo y del borde del mismo, as como el ancho de lnea del
trazado. En el transcurso de las aplicaciones se irn mostrando algunos de estos para su futuro uso.
Graficas en 2D
Puntos: Para ubicar puntos en el plano cartesiano es necesario ubicar los valores de las abscisas de
cada par ordenado en un vector y sus respectivas ordenadas en otro vector teniendo en cuenta que
estas deben estar en la misma ubicacin que ocupan sus abscisas.
Ejemplo:
Sean los siguientes puntos:
dichos puntos en el plano cartesiano.
77
Captulo 4
78
MATLAB contiene funciones que nos permiten agregar algunas caractersticas para especificar la
grfica saliente:
Funcin
grid on, grid off
xlabel('cadenax')
ylabel('cadenay')
title('cadena')
legend('cad_Leg')
axis([xo xf yo yf])
hold on, hold off
text(x,y,'cadena')
gtext(x,y,'cadena')
ginput(n)
Descripcin
Por ltimo, al archivo grafo1.m le damos sus atributos para mostrar una mejor salida de nuestra
grfica, el usuario puede visualizar el cdigo del archivo que se encuentra en el disco, teniendo como
resultado la siguiente grfica:
79
Captulo 4
Cartesianas:
Para hacer grficas de funciones de una variable con MatLab, primero tenemos que crear una tabla
de valores de la variable para despus dibujar la funcin. Debemos tener en cuenta que una curva es
la unin de infinitos puntos, debido a eso es necesario contar con una cantidad de datos necesarios
para realizar la simulacin.
Ejemplo:
Realizar la grfica de la siguiente expresin:
x=linspace(-1,5,30);
y=sin(x.^2);
plot(x,y)
% vector dominio
% vector rango
% grafica por defecto
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
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
stem: stairs:
>>x=-3:0.1:2*pi;
>>y=exp(-x/2).*sin(2*x);
>>stem(x,y)
bar: loglog:
>> x=0:0.1:pi;
>> y=sin(x);
>> bar(x,abs(y))
Paramtricas:
>>x=0:0.1:2*pi;
>>y=sin(x);
>>stairs(x,y)
>> x=0:0.1:pi;
>> y=sin(x);
>> bar(x,abs(y))
82
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);
83
Captulo 4
quiver: Permite crear los vectores velocidad en los puntos de una grfica.
Sintaxis:
quiver(x,y,z,dx,dy,dz)
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
hist:
>> x = -4:0.1:4;
>> y = randn(length(x),1);
>> hist(y,x)
pie:
>> x = [1 3 0.5 2.5 2];
>> explode = [0 1 0 0 0];
>> pie(x,explode)
Grficos Mltiples
La funcin plot puede realizar varias grficas superpuestas en una misma ventana figura, las
propiedades las adopta el MATLAB si es que no son especificadas.
Ejemplo:
>>
>>
>>
>>
x=0:0.1:4;
y1=4*exp(-x).*sin(2*x);
y2=2*cos(x);
plot(x,y1,x,y2)
85
Captulo 4
Utilizando la funcin hold antes de un nuevo comando que grfica podemos superponer ms grficas
en una sola ventana figura.
>>
>>
>>
>>
>>
>>
>>
>>
x=0:0.1:5;
y1=3*sin(x);
y2=cos(x);
plot(x,y1)
hold on
% congela la ventana
plot(x,y2)
grid on
hold off
% descongela la ventana
subplot: Permite que una ventana figura pueda dividirse en varios ejes, dividindose en filas y columnas,
asignando a cada divisin un nmero identificador, permitiendo as alojar ms de una grfica.
Sintaxis:
subplot(#filas,#columnas,posicin)
Ejemplo:
Realizar la grfica de las siguientes expresiones en una sola ventana figura.
a)
b)
c)
d)
86
Solucin:
x=linspace(0,4,300);
y1=8*sqrt(x);
y2=6*sin(4*x);
y3=x.^2;
y4=10*exp(-x).*cos(4*x);
subplot(2,2,1)
plot(x,y1,'linewidth',2)
title('Curva 1')
subplot(2,2,2)
plot(x,y2,'linewidth',2);title('Curva 2')
subplot(2,2,3)
plot(x,y3,'linewidth',2);title('Curva 3')
subplot(2,2,4)
plot(x,y4,'linewidth',2);title('Curva 4')
Tenga en cuenta que cada grfica est sujeta independientemente al manejo de sus diferentes
caractersticas, es decir: color, trazo, marca, etiqueta de ejes, ttulo, leyenda, etc. Pueden ser
diferentes para cada grfica.
87
Captulo 4
Funciones de Grficas en 3 Dimensiones
Funcin
plot3
fill3
stem3
comet3
bar3
pie3
mesh
meshc
meshz
surf
surfc
surfl
waterfall
contour
contour3
sphere
cylinder
ribbony
quiver3
Descripcin
Puntos: En tres dimensiones debemos tener en cuenta que ahora cada punto tendr tres coordenadas,
por lo tanto tendramos tres vectores que alojan al conjunto de abscisas, ordenadas y altura.
Ejemplo:
Sean los siguientes puntos:
representar dichos puntos en el plano cartesiano.
Solucin: Generando el script grafo3D1.m, ubicarlo en el CD, podemos visualizar las siguientes
salidas:
88
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
89
Captulo 4
Paramtricas:
Ejemplo:
Realizar la grfica de la siguiente expresin:
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
Superficies
MATLAB es mucho ms prctico y funcional al momento de representar las superficies 3D, dispone de
una gran variedad de formatos para dibujar grficas de funciones de dosvariables y una componente,
ya sea por mallado, lneas de contorno y cuadrculas de colores que son las usadas. Para visualizar
correctamente las superficies es adecuado y preciso que estn representados como funciones
definidas sobre un domino rectangular en cualquiera de los planos de referencia.
Para trabajar con regiones rectangulares, definiremos los vectores de abscisas
y de
ordenadas
, que representarn a los ejes, entonces la regin de dominio rectangular
estar definida por el conjunto de coordenadas siguientes:
,
generando una matriz de orden nm.
Para facilitar la creacin del enrejado
la siguiente sintaxis:
[xmatriz,ymatriz]=meshgrid(xvector,yvector)
Forma z=f(x,y)
Y finalmente expresaremos la funcin z con las variables enrejadas:
>> zm=exp(-xm.^2-ym.^2).*sin(-xm.^2-ym.^2);
mesh(xm,ym,zm)
>> surf(xm,ym,zm)
surf(xm,ym,zm)
91
Captulo 4
waterfall(xm,ym,zm) ribbon(xm,ym,zm)
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
92
>>z=cplxgrid(12);
>>cplxmap(z,z.^2)
Obtenindose lo siguiente:
93
Captulo 4
Estadsticas
bar3: pie3:
>> x=[10 2 3 5 18 20 15 ];
>> bar3(x);
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
94
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); %
CILINDRO
95
Captulo 4
Geometra diferencial de curvas
), en
y dado su vector de
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
96
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
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:
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
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
g)
h)
i)
2. Dibujar las siguientes curvas en paramtricas; en los apartados a) y b), dibujar adems los
vectores velocidad utilizando el comando quiver:
a)
b)
c)
d)
e)
f)
g)
h)
3. Dibujar las siguientes curvas polares:
a)
b)
c)
d)
e)
101
Captulo 4
f)
g)
h)
4. Graficar las siguientes curvas:
a)
b)
c)
d)
5. Representar las grficas de las siguientes funciones de 2 variables, utilizando alguno de los
comandos descritos anteriormente. Dibujar tambin algunas curvas de nivel. Tome las extensiones
adecuadas para x e y.
a)
b)
c)
d)
6. Dibujar las superficies generadas por >>cylinder(R(t),30), en cada uno de los siguientes
casos:
102
a)
b)
c)
d)
Captulo
Polinomios
En la actualidad los polinomios son utilizados en la mayora de los cursos relacionados con la
programacin de los mtodos numricos, justificando as la facilidad de manipulacin y de
implementacin en cualquiera de los lenguajes existentes. Es muy conocido tambin que en el rea
de control existe la manipulacin de polinomios de estados para representar el comportamiento a
travs del tiempo de un sistema, y es ah donde apuntamos el estudio de este captulo.
Definicin
Con MATLAB se puede trabajar con polinomios de forma sencilla.Es suficiente tener en cuenta que
un polinomio en el programa no es nada ms que un vector que contiene los coeficientes de dicho
polinomio completo y ordenado descendentemente en su grado. Es decir, si tenemos la expresin:
Podemos representarlo en MATLAB de la siguiente manera:
Por ejemplo, si deseamos escribir los polinomios:
y
Slo realizaramos lo siguiente:
>> f=[3 0 1] % polinomio f de grado 2
f =
3
0
1
>>g=[2 0 -1 3] % polinomio g de grado 3
g =
2
0
-1
3
103
Captulo 5
Toda matriz est asociada a un polinomio, la cual recibe el nombre de polinomio caracterstico de la
matriz, y este se obtiene de la siguiente forma:
>>A=round(46*randn(4)); % matriz cualquiera
A =
25
84
-104
40
15
-60
-20
16
165
127
-62
140
33
-3
33
-9
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
var = conv(poly1,poly2)
cociente = deconv(poly1,poly2)
[cociente,resto] = deconv(poly1,poly2)
-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;
var = polyder(poly)
106
var = polyint(poly)
var = polyint(poly,k)
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
var = polyval(poly,x)
769
868
en el dominio
, implementaremos un script
f=[3 0 1];
x=-5:0.1:5;
y=polyval(f,x);
plot(x,y,'-r') % graficando al polinomio
grid on
107
Captulo 5
Ejercicios:
Si deseamos obtener un polinomio que se ajuste a nuestros datos experimentales teniendo la libertad
de elegir el grado de este, aplicaremos la siguiente funcin:
polyfit: Construye un polinomio de ajuste de grado n utilizando el mtodo de los mnimos cuadrados
empleando los datos en el dominio y el rango.
Sintaxis:
108
Pol = polyfit(datoX,datoY,grado)
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:
Funciones de Interpolacin
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)
yi=interp1(x,Y,xi,'metodo')
Interpola para encontrar yi, los valores de lafuncin Ysubyacenteen los puntos en la xi vector o
matriz.X debe serun vector. Y puede serun escalar, un vector, o una matriz de cualquier dimensin,
adems metodo es la forma de cmo se desea realizar la interpolacin, siendo estas las siguientes:
nearest
linear
cubic
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
Ejercicios:
Tiempo (s)
0.0
0.5
1.0
1.5
2.0
2.5
3.0
3.5
4.0
4.5
5.0
Temperatura F
72.5
78.1
86.4
92.3
110.6
111.5
109.3
110.2
110.5
109.9
110.2
a) Genere una grfica que compare la conexin de los puntos de temperatura con lneas rectas
y con una spline cbica.
b) Calcule los valores de temperatura en los siguientes instantes: 0.3, 1.25, 2.36 y 4.48,
usando interpolacin lineal e interpolacin con spline cbica.
c) Compare los valores de tiempo que corresponde a estas temperaturas: 81, 96, 100 y 106,
usando interpolacin lineal e interpolacin con spline cbica.
111
Captulo 5
x
0.0
1.0
2.0
3.0
4.0
5.0
6.0
7.0
8.0
9.0
10.0
112
18
20
12
0
-10
-12
0
32
90
180
308
Captulo
Interpolacin
En la prctica de la ingeniera se utilizan mucho las tablas de datos, como en el caso de las tablas
de vapor saturado en la termodinmica. En la mayora de los casos el dato necesario no se encuentra
explcito en la tabla sino entre dos valores de sta, para lo cual es necesario estimarlo de entre
los valores que presenta la tabla en un proceso conocido como interpolacin. La idea bsica de
la interpolacin es hallar un polinomio o funcin que cumpla con pasar por todos los puntos de un
conjunto de datos, y poder estimar los valores entre ellos por medio del polinomio.
POLINOMIOS DE LAGRANGE
Para ilustrar la interpolacin por polinomios de Lagrange considrese un conjunto de datos de tres
puntos. El polinomio interpolador en este caso es:
Obsrvese que en el punto slo queda el primer trmino con su numerador y denominador cancelndose
entre s. Lo mismo sucede con los dems puntos, por lo que se ve que el polinomio cumple con la
condicin de pasar por todos los puntos de datos. En general, para n puntos de datos, el polinomio
de Lagrange es:
(1)
Una forma mucho ms sencilla de ver la ecuacin 1 es en forma de cdigo, el cual se muestra escrito
para MATLAB en las siguientes lneas:
p=0;
for k=1:length(x)
den=1;
L=[];
% termino de lagrange
for r=1:length(x)
if r~=k
xp=x;
% hallando el numerador de L
xp(k)=[]; % elimino el termino k-esimo
num=poly(xp);
% numerador: polinomio de x
d1=(x(k)-x(r));% denominador de L
den=den*d1;
end
end
L=num/den;
p=p+y(k)*L
end
% Polinomio de Lagrange
113
Captulo 6
5
4
3
2
11 x
47 x
371 x
1321 x
1709 x
----- - ----- + ------ - ------- + ------ - 43
120
24
24
24
20
114
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:
Para los datos en x e y dados abajo, el resultado al aplicarse el cdigo anterior puede verse en las
lneas siguientes. Los coeficientes del polinomio que hay que poner en la forma de Newton seran los
elementos de la columna vertical izquierda:
x =
y =
-4
-2
0.7568
-0.8330
-0.3219
-0.0537
0.0000
0
-0.9093
0.4546
0.0000
-0.0537
4
0
0.9093
0.4546
0.3219
-0.7568
-0.8330
115
Captulo 6
Ejemplo:
Se tiene el conjunto de datos {(1,1),(2,3),(3,-1),(4,0),(5.3),(6,2)}. Muestre el polinomio
interpolador de Newton por diferencias divididas y la grfica que se calcula ejecutando el script
newtoninterp.m
Solucin:
Ingresando los vectores de datos y aplicando la funcin, tendremos:
>> x=[1 2 3 4 5 6];
>> p = newtoninterp(x,y,t);
116
Comparando las grficas obtenidas por los dos mtodos de interpolacin: Lagrange y Newton,
tendremos que el error entre ambos es mnimo:
117
Captulo
Resolucin de Sistema
de Ecuaciones Lineales
En esta parte veremos cmo usar MATLAB para resolver sistemas de ecuaciones lineales. Al igual que
en la seccin anterior usaremos tanto las rutinas internas de MATLAB como rutinaspropias creadas
por el usuario, asimismo las que se encuentran disponibles en la gua bsica de MATLAB que se
encuentra en la pgina del curso. Pero adems usaremos una combinacin de los dos procedimientos.
Comencemos con las fciles y sencillas rutinas internas de MATLAB: Si queremos resolverun sistema
de ecuaciones lineales, lo primero que debemos hacer es escribirlo en la forma matricial Ax=b.
Definicin
..
.
Puede representarse mediante una matriz
..
.
.
119
Captulo 7
con:
Sabiendo que
>>x=inv(A)*b
>> 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
Produce el resultado:
x =
22/7
1
23/7
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:
,
121
Captulo 7
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
122
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.
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
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 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
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.
127
Captulo 7
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:
128
Jacob.m
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
129
Captulo 7
X =
0
0.3333
0
0.3333
0
0.2500
0
0.3333
0
1.5170
0.5509
0.1377
Iter =
9
X =
0
0.3333
0
0.3333
0
0.2500
0
0.3333
0
1.5170
0.5516
0.1379
Iter =
5
130
Ejercicios Propuestos
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.
4. Resuelva (si es posible) los siguientes sistemas lineales usando los mtodos de Jacobi y GaussSeidel. En todos los casos verifique si los teoremas garantizan convergencia de los mtodos.
131
Captulo 7
132
Captulo
Solucin de Ecuaciones
No Lineales
En este captulo usaremos el programa MATLAB con el fin de resolver ecuaciones no lineales de
manera rpida y fcil. Se usarn tanto las herramientaspropias de MATLAB, como rutinas creadas por
el usuario que nos llevarn paso a paso a lasolucin de problemas.
Definicin del Problema
(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)
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
***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 .
se transforma a la forma
, y sta se utiliza
O lo que es lo mismo:
En la figura siguiente se muestra un ejemplo de la forma en que trabaja el mtodo de punto fijo. El
mtodo de iteracin simple converge a una raz de la ecuacin
si
y
son continuas
en un intervalo alrededor de r, si:
Para todo ese intervalo, y si se escoge en ese intervalo. Ntese que sta es una condicinsuficiente,
pero no necesaria.
136
Ejemplo:
El factor de friccin para los fluidos turbulentos en una tubera est dado por:
, 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.
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])
De la grfica anterior podemos ver que la funcin gcumple las condiciones del TeoremaFundamental
de Punto Fijo (dnde y por qu?). Para emplear el mtodo tomaremos lamisma tolerancia para la
distancia entre las aproximaciones y emplearemos una funcinde punto fijo para MATLAB que seha
creadoen el editor por el usuario de nombre met_puntofijo.m, cuyo cdigo se encuentra en el CD.
Si aplicamos esta funcin obtendremos lo siguiente:
>>met_puntofijo('1.14-2*log10*(0.025+3.1167*10^(-4))',1,0.000001)
it.
0
1
2
3
4
x g(x)
1.0000000000 1.0893766600
1.0893766600 1.0848521150
1.0848521150 1.0850811625
1.0850811625 1.0850695674
1.0850695674 1.0850701544
138
Mtodo de Newton-Rapson
Mtodo de Newton-Rapson
De la figura podemos ver que:
Tomando la idea de la condicin de convergencia de iteracin simple, la condicin para NewtonRapson es la siguiente:
Que es equivalente a:
139
Captulo 8
Ejemplo:
Calcule las 3 races de la siguiente ecuacin no lineal:
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
Mtodo de la secante
O lo que es lo mismo,
Por lo tanto, el seudocdigo ser:
141
Captulo 8
Ejemplo:
Resolviendo el ejemplo anterior, teniendo en cuenta que inicialmente
met_secante.m que se encuentra en el disco, tendremos lo siguiente:
***Metodo de la Secante***
f(x)= pi*sin(2*x)+exp(-x/2)*cos(x)
x= 3.5
xant= 2.5
Tolerancia= 0.0001
Los resultados son:
k=
F(X)= X= Xant=
1
1.901253
3.500000
2.500000
2
-0.279696
3.130346
3.500000
3
0.022980
3.177753
3.130346
4
0.000026
3.174153
3.177753
5
-0.000000
3.174149
3.174153
Raiz= 3.174149
Desea ver grfica? [y]/[n]: y
fin de programa
142
, aplicando el script
es la siguiente:
Donde:
(1)
(2)
Donde se ha abreviado
como , y de la misma manera para ,
anteriores pueden expresarse en forma matricial de la siguiente manera:
y . Las ecuaciones
(4)
Donde:
(5)
(6)
143
Captulo 8
De las ecuaciones 4,5 y 6 se obtiene la regla recursiva para el mtodo Newton-Rapson para dos
variables:
Donde
Tomemos
144
2
1
1
1
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
. Encuentre
4. El polinomio
tiene ceros 1,3 y -98. El punto
debera ser en
este caso un buen punto inicial para calcular cualquiera de los ceros pequeos por medio de la
iteracin de Newton.
5. Use el mtodo de Newton para calcular la nica raz de:
Use una variedad de valores de B=1,5,10,25 y 50. Entre las elecciones del punto de partida
tome
y explique el comportamiento anmalo. Tericamente, el mtodode Newton debe
converger para cualquier valor de y B.
145
Captulo 8
7. Comenzando en (0, 0, 1), resuelva por el mtodo de Newton para sistemas no lineales con el
sistema:
146
Captulo
Integracin
Los mtodos de integracin numrica nos permiten integrar funciones que estn definidas
analticamente o de las que slo conocemos su tabla en un nmero finito de puntos.
Considerando el siguiente caso:
Dada una funcin
Para valores dados de y
(1)
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:
De nuevo, asumimos que el espaciamiento de los datos es uniforme e igual a h, por lo tanto:
148
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
149
Captulo 9
Los valores de R pueden ordenarse en una tabla al estilo de diferencias divididas como se muestra
a continuacin:
R(1,1) R(1,2) R(1,3) R(1,4) R(1,5)
R(2,1) R(2,2) R(2,3) R(2,4)
R(3,1) R(3,2) R(3,3)
R(4,1) R(4,2)
R(5,1)
El algoritmo contina evaluando valores de R(i,1) hasta que la diferencia del valor absoluto entre
las ltimas dos estimaciones de mayor orden obtenidas sea menor que una tolerancia que escoge
el usuario.
El Mtodo de Romberg se utiliza junto con el mtodo de trapecios para obtener una buena aproximacin.
Ejemplo:
Con el script Metodo_Romberg.m, que se encuentra en el disco, podemos calcular la integral anterior,
cuyo resultado luego de ejecutarlo en la ventana de comandos mostramos:
f(x)=sin(x)
Extremo Inferior
a=0
Extremo Superior
b=pi
Cifras de Aproximacion
n=4
An =
0.0000
0
1.5708
2.0944
1.8961
2.0046
1.9742
2.0003
0
0
1.9986
2.0000
0
0
0
2.0000
Integral:
I= 2.000006
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
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:
151
Captulo 9
Ejemplo:
Utilizando el mtodo de simpson 1/3 calcular la siguiente integral:
met_simpson13.m
>>[I,E]=met_simpson13('x^5',0,1,50)
I =
0.1667
E =
1.0453e-007
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:
152
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)
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:
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
se hace la aproximacin:
Tomando
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;
156
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:
158
Ejercicio:
Utilizando el mtodo de Euler, solucione numricamente la siguiente ecuacin:
De
, con h=0.25 y
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:
sol_RK4.m
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')
Funciones ode
Para resolver ecuaciones diferenciales ordinarias, MATLAB proporciona un conjunto de funciones que
nos permite realizar el clculo de forma ms eficiente, dos de estas funciones son: ode23 y ode45.
A continuacin describimos los argumentos y luego presentaremos algunos ejemplos:
[t,y] = ode23(@funcion,tspam,CI)
[t,y] = ode45(@funcion,tspam,CI)
@funcion : Es la referencia de la funcin creada en el editor y que representa a la ecuacin diferencial
tspam
CI
y
t
160
ordinaria.
: Vector de valores del dominio en que va a ser evaluada la funcin solucin.
: Condicin inicial
: Funcin solucin evaluada en los valores de tspam
: Es un vector de los mismos elementos de tspam
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
162
Ejemplo 3:
Velocidad en medios con arrastre La ecuacin diferencial que rige la velocidad v de un cuerpo de masa
m y rea proyectada A que cae en un medio de densidad es:
(I)
El cuerpo adquiere su velocidad terminal de cada cuando no acelera ms, es decir a derivada de a
velocidad es cero. De acuerdo a la ecuacin anterior, la velocidad terminal terica es:
(II)
y
, que cae de un edificio, entonces
Supngase una moneda con
. La velocidad terminal segn la expresin II es:
. Resolver la ecuacin
I por el mtodo de Runge-Kutta y compara la velocidad terminal as hallada con la velocidad terminal
terica.
Solucin
Para resolver aplicamos la funcin met_RK4.m, de la siguiente manera
f=@(t,v) 10-v^2*(1*3.1416*10^-4)/(2*0.01);
[t,vel]=met_RK4(f,0,0,20,1)
plot(t,vel)
163
Captulo 10
0
1.0000
2.0000
3.0000
4.0000
5.0000
6.0000
7.0000
8.0000
9.0000
10.0000
11.0000
12.0000
13.0000
14.0000
15.0000
16.0000
17.0000
18.0000
19.0000
20.0000
0
9.3244
16.3644
20.6352
22.8944
24.0044
24.5302
24.7750
24.8880
24.9400
24.9638
24.9748
24.9798
24.9821
24.9832
24.9837
24.9839
24.9840
24.9840
24.9841
24.9841
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
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
Ejemplo:
Un circuito tiene en serie una fem
, un resistor de 2 , un inductor de 0.1 h y un
capacitor de 1/260 f. Si la corriente inicial y la carga inicial en el capacitor son ambas cero, calcular
la carga en el capacitor en cualquier instante de tiempo t.
Solucin:
Recordamos que:
',
166
adems:
167
Surquillo