Professional Documents
Culture Documents
MAT L A B
Aplicado a Mtodos Numricos e Ingeniera
MatLAB: Aplicado a los Mtodos Numricos e Ingeniera
Autor: Hider Pimentel Dextre
ventas@editorialmacro.com
www.editorialmacro.com
Impresin
Talleres Grficos de la Empresa Editora Macro E.I.R.L.
Lima - Per
ISBN N
Hecho el Depsito Legal en la Biblioteca Nacional del Per N
Captulo 4: Grficos
Ventana de Figura.........................................................................................................75
Funciones de Grficas en 2 Dimensiones.......................................................................76
Graficas en 2D..............................................................................................................77
Puntos.........................................................................................................................................77
Cartesianas..................................................................................................................................80
Paramtricas................................................................................................................................82
Polares.........................................................................................................................................83
Quiver..........................................................................................................................................84
Grficos Mltiples........................................................................................................85
Subplot........................................................................................................................................86
Funciones de Grficas en 3 Dimensiones.......................................................................88
Puntos.........................................................................................................................................88
Cartesianas..................................................................................................................................89
Paramtricas................................................................................................................................90
Superficies....................................................................................................................91
Forma z=f(x,y)..............................................................................................................................91
Sombras y Colores.......................................................................................................................92
Rotacin de Grfica.....................................................................................................................93
Superficies Complejas.................................................................................................................93
Estadsticas..................................................................................................................................94
Superficies: Generados por Funciones..........................................................................94
Esfera...........................................................................................................................................94
Vectores Normales a una superficie............................................................................................95
Cilindro........................................................................................................................................95
Geometra diferencial de curvas...................................................................................96
Longitud de arco..........................................................................................................................96
Vectores tangente, normal y binormal: Triedro de Frnet-Serret...............................................96
Curvatura y torsin......................................................................................................................97
Plano osculador...........................................................................................................................98
Centro de curvatura....................................................................................................................99
Teorema fundamental de curvas.................................................................................................99
Ejercicios Propuestos....................................................................................................100
Captulo 5: Polinomios
Definicin.....................................................................................................................103
Operaciones con Polinomios.........................................................................................105
Ejercicios......................................................................................................................108
Ajuste de Curvas Bidimensionales ................................................................................108
Funciones de Interpolacin...........................................................................................109
Ejercicios......................................................................................................................111
Captulo 6: Interpolacin
Polinomios de Lagrange ...............................................................................................113
Polinomio de Interpolacin por Diferencias Divididas de Newton.................................115
Captulo 9: Integracin
Mtodo de los Trapecios...............................................................................................148
Mtodo de Romberg.....................................................................................................149
Mtodo de Simpson 1/3...............................................................................................150
Mtodo de Simpson 3/8...............................................................................................152
Funciones de Cuadratura..............................................................................................153
Introduccin
En esta parte presentamos al entorno de manejo de Matlab para su mejor adaptacin, como un
entorno interactivo para realizar anlisis de datos, clculo numrico y de visualizacin grfica. Tambin
se explicar cmo pueden representarse los datos y comandos para imprimir informacin. En las
primeras secciones comenzaremos explorando Matlab de la forma ms simple, en modo comando: el
usuario pregunta y Matlab responde.
El GUI de Matlab
El software se desarroll originalmente como un Laboratorio de Matrices, de ah su nombre, y
actualmente cuenta con una capacidad superior debido a su lenguaje de programacin para cmputo
cientfico y tcnico en general.
La siguiente figura define la interfaz grfica para la versin r20011b:
Cuando se instala el programa, en este caso se realiz en el sistema operativo Windows 7, este por
defecto crea una carpeta de nombre MATLAB en el directorio Documentos, y es ese lugar donde por
defecto el programa almacenar todo archivo creado.
9
Captulo 1
Ingreso de Datos
Todo dato ingresado al programa es un ordenamiento en filas y columnas, matemticamente conocido
como matriz y que se define como arreglo en la programacin. Y mantiene la siguiente estructura de
sentencia:
>> variable = valor;
Donde:
variable: Es la combinacin de caracteres alfabticos, numricos y el carcter especial (_), siendo
la cantidad de 63 caracteres como agrupamiento mximo para nombrarla teniendo en cuenta que
los caracteres minsculos y maysculos se diferencian. Las nicas restricciones para nombrar a una
variable son que esta no debe iniciar con un carcter numrico ni el especial (_) y tampoco ser igual
a una palabra reservada.
10
Gua Prctica MatLAB
Ejemplo:
a1, dato, data, f1 variables validas
media23 es diferente a meDia23
1p, 45va, _p1, 3w1 variables invalidas
valor: Es un dato o un conjunto de datos ordenados en filas y columnas. Por defecto los datos
toman el tipo double, y se puede cambiar de tipo definindolo segn la necesidad del usuario (ver
ejemplos).
;: Es la sentencia de la instruccin. Si una expresin termina en este signo su resultado se calcula,
pero no se muestra en pantalla, y si se omite, entonces el programa ejecutar la tarea y adems
mostrar el resultado.
Se define que los valores ingresados al programa pueden Tipo Bytes
ser de los siguientes tipos (se detallar en el siguiente
tem): doubl 8B
int 4B
char 2B
logical 1B
11
Captulo 1
Ejemplos:
Ingrese los siguientes datos:
double:
>> x = 7;
int:
>>a = int16(23);
logical: Son los resultados de una comparacin o relacin que en programacin se define como 0
(falso) y 1 (verdadero).
>> m = 6>4;
Nota
La funcin who y whos, nos permite ver las variables creadas hasta el momento y a las variables con
sus caractersticas de ingreso, respectivamente que estn almacenados en el workspace.
>> who
a c m x
>> whos
Name Size Bytes Class Attributes
a 1x1 2 int16
c 1x10 20 char
m 1x1 1 logical
x 1x1 8 double
Si deseamos ver las caractersticas de una o de slo algunas variables, entonces especificamos ellas
de la siguiente manera:
>> whos a m
Name Size Bytes Class Attributes
a 1x1 2 int16
m 1x1 1 logical
12
Gua Prctica MatLAB
Tipos de Datos
Los tipos de datos definidos son de dos clases: numricos y las cadenas de caracteres.
Datos Numricos
Nmeros Reales
Matlab representa los nmeros reales en doble precisin y en simple precisin.
a D oble Precisin: double
Es el tipo por defecto de un dato ingresado al programa. A continuacin se muestra la creacin,
conversin y los valores mximos y mnimos de un dato de doble precisin:
>> d = 45.78;
>> whos d
Name Size Bytes Class Attributes
d 1x1 8 double
La funcin isfloat nos permite verificar si el dato ingresado es de punto flotante (decimal).
>> d1=isfloat(d)
d1 =
1
Las funciones realmax y realmin devuelven el valor mximo y mnimo para el tipo de doble
precisin.
>> realmax
ans =
1.7977e+308
>> realmin
ans =
2.2251e-308
>> 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
Gua Prctica MatLAB
Estos datos tendrn un atributo caracterstico de complex, segn se puede observar si visualizamos
a las variables en el workspace.
>> whos z c
Name Size Bytes Class Attributes
c 1x1 16 double complex
z 1x1 16 double complex
Nota
Las funciones real, imag, abs y angle, son aplicables tambin a un arreglo de datos
(matriz de datos).
Nmeros Enteros
Definimos un dato entero como aquel valor exacto dentro del programa. La siguiente tabla muestra
cmo definir los datos enteros:
15
Captulo 1
>> isinteger(y)
ans =
1
Valores Especiales
La herramienta MATLAB considera los siguientes valores especiales inf, -inf y NaN, para
representar a las cantidades infinito positivo, infinito negativo y a todos aquellos que no son un
nmero, respectivamente. Verifique los resultados dados a continuacin:
>> x=45^245
x =
Inf
>> x=log10(0)
x =
-Inf
>> x=0/0
x =
NaN
>> x=inf/inf
x =
NaN
16
Gua Prctica MatLAB
Funcin Descripcin
whos x Muestra la caracterstica del dato x.
isnumeric(x) Determina si el dato x es un tipo de dato numrico.
Determina si x es un tipo de dato numrico especfico, donde arg puede
isa(x, arg) tomar los siguientes textos: integer (entero), uintxx (no entero de xx: 8,
16, 32 64), float, doubl o single.
isreal(x) Determina si el tipo de dato x es un nmero real.
isnan(x) Determina si el tipo de dato x no es un nmero.
isinf(x) Determina si el valor de x es infinito.
isfinite(x) Determina si el valor de x es finito.
Cadenas de Caracteres
17
Captulo 1
>> n = ischar(cadena)
n =
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 ;Bartolomeo ]
nombres =
Jose Carlos
Rosario
Bartolomeo
La manera ms simple para crear matriz de cadenas de texto es usando la funcin char. Esta funcin
rellena automticamente a las cadenas de menor longitud para igualar a la cadena de mayor longitud.
Ejemplo:
>> nombres=char(Jose Carlos,Rosario,Bartolomeo)
nombres =
Jose Carlos
Rosario
Bartolomeo
Comparacin de Cadenas
Las cadenas de texto tambin pueden compararse y esta se realiza carcter con carcter. La siguiente
tabla muestra las funciones con las que se pueden realizar dicha comparaciones:
Funcin Descripcin
strcmp Determina si dos cadenas son idnticas. Diferencia las maysculas y
minsculas.
18
Gua Prctica MatLAB
Recordemos que los resultados de una comparacin tiene como resultado los valores de 1 (verdadero)
0 (falso).
>> cad_1=masa;
>> cad_2=mazo;
>> c1=strcmp(cad_1,cad_2)
c1 =
0
Como los primeros 2 caracteres de ambas cadenas anteriores son iguales, entonces podemos realizar
la comparacin siguiente:
>> c2=strncmp(cad_1,cad_2,2)
c2 =
1
c3=strncmp(cad_1,cad_2,3)
c3 =
0
Tambin podemos comparar cadenas utilizando los operadores relacionales, siempre que dichas
cadenas tengan iguales dimensiones, o uno sea escalar.
Ejemplo:
>> A=Rodrigo;
>> B=Roberto;
>> C = A==B
C =
1 1 0 0 0 0 1
19
Captulo 1
En algunos casos es necesario el cambio de tipo de dato para facilitar la salida en pantalla de
combinaciones de nmeros y caracteres. La tabla siguiente muestra las funciones que hacen posible
algunas conversiones:
Comando Descripcin
char Convierte un entero positivo a su equivalente carcter (cdigo ASCII). Trunca
cualquier parte fraccional.
int2str Convierte un valor numrico de tipo int a un dato de tipo char (carcter).
num2str y Convierte un valor numrico de tipo double a un dato de tipo char (carcter) de
str2num precisin con formato especfico y viceversa, respectivamente.
mat2str y Convierte un tipo numrico a una de tipo carcter de una determinada
str2mat precisin, retornando una cadena Matlab que puede ser evaluada y viceversa,
respectivamente.
dec2hex y Convierte un entero positivo a un dato de tipo char de base hexadecimal y
hex2dec viceversa, respectivamente.
dec2bin y Convierte un entero positivo a un dato de tipo char de base binaria y viceversa,
bin2dec respectivamente.
dec2base Convierte un entero positivo a un dato de tipo char de cualquier base de 2 a 36.
Realizando lo contrario:
>> newM=int8(Mc)
newM =
77 65 84 76 65 66 50 48 49 49 66
20
Gua Prctica MatLAB
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
Matlab tiene forma especfica y diferente de visualizar sus datos en el command window. La siguiente
tabla nos muestra estos tipos:
Tipo Descripcin
short Formato con 4 cifras significativas exactas.
short e Formato de 5 dgitos. Incluye potencia de 10.
short g Formato de 5 dgitos.
long Formato de 15 cifras significativas exactas.
long e Formato de 15 dgitos. Incluye potencia de 10.
long g Formato de 15 dgitos.
Rat Formato en fraccin irreductible.
Hex Formato en base 16 (hexadecimal).
Bank Formato de 2 cifras significativas exactas.
Compact Formato que suprime el exceso de lneas.
Loose Formato que aade ms lneas para que sea ms legible.
Por defecto el tipo de formato del Matlab es el short, para cambiar a un diferente tipo de formato
podemos usar la funcin format, estos cambios slo afectan la forma en la que los nmeros son
visualizados y no como el programa los calcula.
El cambio de formato lo realizamos as:
>> format tipo
Ejemplo:
x =
1.8571 16.5672 0.0004
x =
1.857142857142857 16.567246000000001 0.000400000000000
22
Gua Prctica MatLAB
x =
13/7 2833/171 1/2500
>> x
x =
1.86 16.57 0.00
Para volver al formato por defecto bastara con sentenciar la funcin format.
Nota
Para representar las potencias del nmero diez, Matlab abrevia la forma de su
definicin utilizando la forma exponencial.
Entonces:
104 1e4 510-7 5e-7
23
2
Captulo
Operaciones con
Matrices y Vectores
Matrices
Cuando resolvemos problemas de ingeniera, es importante saber visualizar los datos relacionados
con el problema. A veces consiste en un solo nmero, como el peso de un cuerpo, en otras ocasiones
podra ser una coordenada en un plano, la cual podemos representar como un par de nmeros. En
todo caso, podemos representar cualquier ejemplo usando un ordenamiento de datos dispuestos en
filas y columnas llamado matriz.
Ejemplo:
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
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
Al igual que para un par de valores, podemos construir una matriz de complejos con la funcin
complex utilizando un par de matrices de igual orden. Tomando los resultados anteriores, tenemos:
>> Cnew = complex(Creal,Cimaginario)
Cnew =
7.0000 + 1.0000i -2.0000 + 5.0000i
4.0000 0 - 9.0000i
Matriz Nula
Se define la matriz nula, como aquella matriz que no tiene elementos, es decir, es la representacin
del vaco. En Matlab se define as:
>> M = []
M=
[ ]
Nota
Se define como comentario a toda lnea de texto que el programa no identifica como sintaxis de cdigo,
su ingreso es despus de anteponer el carcter % y que toma el color verde para su identificacin.
26
Gua Prctica MatLAB
Definicin de Vector
Una matriz de orden nx1 o 1xm, se le conoce como vector fila o vector columna, respectivamente.
Ejemplo:
>> col = [2;-7;12;0]
col =
2
-7
12
0
Ejemplos:
>> V = 9:3:21
V =
9 12 15 18 21
>> V1 = 6:10
V1 =
6 7 8 9 10
>> V2=45:-6:18
V2=
45 39 33 27 21
a P or sus ndices
Sea A una matriz ingresada:
A = aij , donde : i = 1, 2, , n y j = 1, 2, , m
n m
Entonces :
El elemento aij se reconoce por A(i, j )
27
Captulo 2
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> a24 = A(2,4)
a24 =
-1
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 )
>>a6 = A(6)
a6 =
-7
>>a3 = A(3)
a3 =
11
28
Gua Prctica MatLAB
Matrices Especiales
Existen en Matlab varias funciones orientadas a definir, con gran facilidad y muy rpidamente, algunas
matrices de tipo particular. La siguiente tabla especifica las funciones para crear estas matrices
especiales:
Funcin Descripcin
zeros Crea matriz de elementos igual a cero.
ones Crea matriz de elementos igual a la unidad.
eye Crea matriz identidad.
rand Crea matriz de elementos aleatorios entre 0 y 1.
randn Crea matriz de elementos aleatorios con media 0.
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
>> Z4(3) = 11
Z4 =
0 0 99 0
0 0 0 0
11 0 0 0
>> U1 = ones(2,9)
U1 =
1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1
>> U2 = 27*ones(4,6)
U2 =
27 27 27 27 27 27
27 27 27 27 27 27
27 27 27 27 27 27
27 27 27 27 27 27
30
Gua Prctica MatLAB
Matriz Identidad:
>> I = eye(4)
I =
1 0 0 0
0 1 0 0
0 0 1 0
0 0 0 1
>> I1 = eye(3,6)
I1 =
1 0 0 0 0 0
0 1 0 0 0 0
0 0 1 0 0 0
>> X1 = rand(2,4)
X1 =
0.3922 0.1712 0.0318 0.0462
0.6555 0.7060 0.2769 0.0971
Si se desea cambiar el domino entre 0 y un valor, solo multiplicamos por dicho valor.
>> X2 = 25*rand(3)
X2 =
20.5864 23.7556 9.5390
17.3707 0.8612 19.1379
7.9275 10.9686 19.8800
31
Captulo 2
Si deseamos tener datos entre dos valores consecutivos, slo sumamos dicho valor.
>> X3 = 25+rand(3) % datos entre 25 y 26
X3 =
25.1869 25.6463 25.2760
25.4898 25.7094 25.6797
25.4456 25.7547 25.6551
Es lo mismo al trabajar con la funcin randn, slo que en este caso algunos valores sern negativos.
Funcin Generador de Vectores
linspace: Crear un vector fila de una cierta cantidad de elementos distribuidos en un dominio
constante.
Sintaxis: var = linspace(Val_ini,Val_fin,# datos)
Ejemplo:
>> L = linspace(3,19,3)
L =
3 11 19
>> L = linspace(3,19,6)
L =
3.0000 6.2000 9.4000 12.6000 15.8000 19.0000
>> L = linspace(3,19); % crea un vector de 100 datos desde 3 a 19
logspace (a,b,n): Genera un vector logartmicamente espaciado entre los valores 10^a y 10^b
con n elementos.
logspace (a,b): Genera un vector logartmicamente espaciado entre los valores 10^a y 10^b
con 50 elementos.
Existen diferentes funciones de aplicacin directa a una matriz que realizan tareas especficas, las
cuales nos facilitan y agilizan, en muchos casos, soluciones de diversos problemas de clculo. A
continuacin mostramos algunas de estas funciones y su sintaxis de ejecucin para su adecuado uso.
size: Al aplicarse a una matriz obtiene un vector de 2 elementos que indica el orden de dicha matriz.
El 1er elemento indica el nmero de fila y el 2do el nmero de columna.
Sintaxis: var = size(matriz) var = [#f #c]
32
Gua Prctica MatLAB
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> ordenA = size(A)
ordenA =
3 4
length: Obtiene la longitud mxima, en nmero de datos, de los lados de la matriz. Esto es similar
a obtener el max{# f , # c}
Sintaxis: var = length(matriz) var = max{#f,#c}
Aplicando a un vector:
>> fila = [14 -6 10 18 43];
>> Lf = length(fila)
Lf =
5
sum: Esta funcin calcula la suma de los elementos de cada columna o fila y los resultados de dicho
clculo los ordena en un vector.
Sintaxis: var = sum(matriz)
var = sum(matriz,1)
var = sum(matriz,2)
Las 2 primeras sintaxis realizan por defecto la suma de los elementos de cada columna, ordenando
cada resultado en un vector fila, y la ltima sintaxis suma los elementos de cada fila, ordenando cada
resultado en un vector columna. Y si aplicamos esta funcin a un vector, obtendremos como resultado
el valor de la suma de todos sus elementos.
33
Captulo 2
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5];
>> As1 = sum(A,1)
As1 =
16 -12 17 -6
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
pf =
650160
34
Gua Prctica MatLAB
max: Obtiene los mximos de cada columna de una matriz y los ordena en un vector fila, tambin
podemos conocer a qu fila pertenece el dato mayor de cada columna. Aplicando la funcin a un
vector nos muestra el mayor valor de todos los datos.
Sintaxis: mayor = max(matriz)
[mayor,#fila] = max(matriz)
Ejemplo:
>> A = [3 -6 8 0;2 1 7 -1;11 -7 2 -5]
A =
3 -6 8 0
2 1 7 -1
11 -7 2 -5
filas =
3 2 1 1
min: Obtiene los mnimos de cada columna de una matriz y los ordena en un vector fila, tambin
podemos conocer a qu fila pertenece el dato menor de cada columna. Aplicando la funcin a un
vector nos muestra el menor valor de todos los datos.
Sintaxis: menor = min(matriz)
[menor,#fila] = min(matriz)
35
Captulo 2
Ejemplo:
Teniendo en cuenta la matriz A y el vector vec ingresados anteriormente.
>> menor = min(A)
menor =
2 -7 2 -5
filas =
2 3 3 3
>> 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 = diag(matriz)
var = diag(martiz,k) k=..-2,-1,1,2..
var = diag(vector)
var = diag(vector,k) k=..-2,-1,1,2..
Ejemplo:
Definiendo una matriz W y obteniendo sus diagonales k-simas.
>> W = [1 6 -2;0 9 3;-5 8 4]
W =
1 6 -2
0 9 3
-5 8 4
36
Gua Prctica MatLAB
Las siguientes funciones son utilizadas para aproximar valores numricos de una matriz.
Funcin Descripcin
ceil Redondea el valor hacia el infinito.
fix Redondea el valor hacia cero.
floor Redondea el valor hacia el menos infinito.
round Redondea el valor hacia el entero prximo.
37
Captulo 2
Aplicacin:
>> P = [12.5624 4.2351 56.9870]
P =
12.5624 4.2351 56.9870
>> Pc = ceil(P)
Pc =
13 5 57
>> Pr = round(P)
Pr =
13 4 57
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
>> At = A % transpuesta
At =
3 2 11 2
-6 1 -7 -1
8 7 2 6
0 -1 -5 1
39
Captulo 2
>> Pc=cross(v1,v2)
Pc =
-3 6 -3
Funciones Adicionales
Funcin Descripcin
find(A) Devuelve los ndices donde las entradas de A son distinto de cero
fliplr(A) Intercambia la matriz de izquierda a derecha
flipud(A) Intercambia la matriz de arriba abajo
reshape(A,n,m) Devuelve una matriz m x n cuyos elementos se toman por
columnas de A, si A no contiene m x n elementos dara un error
rot90(A) Gira la matriz 90 en sentido contrario a las agujas del reloj
rot90(A,n) Gira la matriz nx90
expm(A) Matriz exponencial de A
sqrtm(A) Matriz raz cuadrada
logm(A) Matriz logartmica
funm(A,@funcion) Evala la funcin que indiquemos en la matriz A
[Vep,Vap]=eig(A) Vep son los vectores propios y Vap son los valores propios de A
[L,U]=lu(A) Factorizacin LU
[Q,R]=qr(A) Factorizacin QR
[U,S,V]=svd(A) Calcula la descomposicin en valores singulares de A. Donde U y
V son matrices unitarias
(Con A matriz, m y n naturales).
40
Gua Prctica MatLAB
Ejemplos:
>> A = [pi 0; pi/4 pi/3]
A =
3.1416 0
0.7854 1.0472
>> Ae = expm(A)
ans =
23.1407 0
7.6091 2.8497
41
Captulo 2
En la realizacin de operaciones con las matrices, debemos tener en cuenta si dicha operacin
es matricial o de elemento a elemento (operacin de arreglos), pues ambos son muy diferentes y
pueden realizarse por operadores o funciones, entonces es necesario conocer cmo se aplica las
funciones y adems cmo se realizan las operaciones.
Operadores Aritmticos
Tabla de Operadores Aritmticos I
Operador Descripcin
A + B Adicin de matrices
A - B Sustraccin de matrices
A * B Producto de matrices
A / B Divisin de matrices = A*B-1
A ^ n Potencia de matriz
(Siendo A y B matrices del mismo orden, n escalar).
>> A=[1 3;3 4];
>> B=[2 1;4 3],
B =
2 1
4 3
>> A+B
ans =
3 4
7 7
>> A-B
ans =
-1 2
-1 1
>>A*B
ans =
14 10
22 15
>> A/B
ans =
-4.5000 2.5000
-3.5000 2.5000
>> A^3
ans =
55 90
90 145
42
Gua Prctica MatLAB
Operadores relacionales
Matlab como lenguaje de programacin dispone de operadores relacionales que permite hacer
comparaciones entre los elementos de dos arreglos de igual dimensin; en cualquiera de los casos
siguientes, el resultado es un arreglo de 0 (ceros) o 1 (unos) cuando la relacin es falsa o verdadera,
respectivamente. Estos operadores son los siguientes:
Tabla de Operadores Relacionales
Operador Descripcin
> Mayor que
< Menor que
== Igual que
<= Menor que
>= Mayor que
~= Diferente que
43
Captulo 2
Operadores lgicos
Permite hacer comparaciones entre los elementos de dos arreglos de igual dimensin; en cualquiera
de los casos siguientes, el resultado es un arreglo de 0 (ceros) o 1 (unos) como en el tem anterior.
Estos operadores son los siguientes:
Tabla de Operadores Lgicos
Operador Descripcin
& y (and)
| o (or)
~ no (not)
= identico
Ejemplos:
Teniendo en cuenta a las matrices A y B definidas anteriormente, tendremos:
>> C=A>B
C =
0 1
0 1
>> C=(A==B)
C =
0 0
0 0
Tabla de Funciones
Funcin Descripcin
xor(x,y) Operacin o exclusiva, devuelve 0 si ambas son falsas o ambas verdaderas
y devuelve 1 si una es falsa y la otra verdadera.
any(x) Devuelve 1 si algn elemento en un vector x es no nulo y devuelve 0 si son
todos nulos, si se trata de una matriz da una respuesta por cada columna
all(x) Devuelve 1 si todos los elementos en un vector x son no nulos y 0 si existe
alguno nulo y si se trata de una matriz da una respuesta por cada columna
exist('x') Devuelve uno si existe y cero si no existe
isnan(x) Devuelve unos en magnitudes no numricas (NaN) en x
isinf(x) Devuelve unos en magnitudes infinitas (Inf) en x
isfinite(x) Devuelve unos en valores finitos en x
Podemos ver muchos ms casos pero todos seran similares: ischar, isempty, isequal,
Nota
isfloat, isinteger, islogical, isnumeric, isprime, isreal, isscalar, isspace
44
Gua Prctica MatLAB
Ejemplo:
>> c = [Inf 0 5 -8 NaN 94];
>> exist (c) % pregunta si existe alguna variable llamada c
ans =
1
Funciones Matemticas
Para la simplicidad de clculo, Matlab tiene una variedad de funciones que afectan solamente a todos
los elementos de cada matriz a la que es aplicada, mas no altera el orden de estas. De ah que al
aplicarse a vectores podemos deducir la forma de operar entre vectores que es al de elemento a
elemento. La siguiente tabla nos indica las funciones matemticas ms conocidas:
Tabla de Funciones Algebraicas
Operador Descripcin
abs(A) Valor absoluto de A
sqrt(A) Raz cuadrada de A
sign(A) Funcin signo de A
exp(A) Exponencial de A
log(A) Logaritmo natural de A
log10(A) Logaritmo en base 10 de A
log2(A) Logaritmo en base 2 de A
power(A,n) Potencia n-sima de A
mean(A) Calcula la mediana de las columnas de la matriz A la
mediana de un vector A
diff(A) Calcula la diferencias divididas de primer orden a las
columnas de la matriz A y lo mismo para un vector A
cumprod(A) Devuelve el producto acumulativo de las columnas de la
matriz A y lo mismo para un vector A.
Observacin: La funcin mean al aplicarse a una matriz slo devuelve un vector fila de una cantidad
de elementos igual al de dicha matriz y un elemento si es que se aplica a un vector. La funcin diff
al aplicarse a una matriz devuelve otra matriz de igual cantidad de columnas, pero de nmero de filas
menor en una unidad de la matriz aplicada.
45
Captulo 2
Ejemplos:
>> A=[-2 4;1 -6];
>> abs(A)
ans =
2 4
1 6
>> exp(A)
ans =
0.1353 54.5982
2.7183 0.0025
>> power(A,3)
ans =
-8 64
1 -216
>> mean(A)
ans =
-0.5000 -1.0000
>> diff(A)
ans =
3 -10
>> 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 Descripcin
date Devuelve la fecha actual del sistema
calendar Muestra el calendario del mes actual
calendar(ao,mes) Calendario del mes y ao especfico
Eomday(ao,mes) ltimo da de mes y ao especfico
Ejemplo:
>> date
ans =
14-Feb-2012
>> calendar
Feb 2012
S M Tu W Th F S
0 0 0 1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 0 0 0
47
Captulo 2
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
Donde:
y1 = [y1(1) y1(2) y1(3)]
Donde:
y2 = [y2(1) y2(2) y2(3)]
Pero si necesitamos calcular una expresin algebraica que depende de dos o ms funciones
matemticas, debemos recordar que cada funcin es una matriz o vector de igual dimensin que el
argumento a la cual se aplica, por lo tanto se tendra que realizar la operacin elemento a elemento.
Entonces, si queremos representar la siguiente expresin en el Matlab:
para , el resultado debera ser:
Para lo cual realizamos en el programa lo siguiente:
>>y=exp(x).*sin(x) %
y =
0 2.2874 6.7188
Donde:
y = [y1(1)*y2(1) y1(2)*y2(2) y1(3)*y2(3)]
Donde:
Y = [y1(1)/y2(1) y1(2)/y2(2) y1(3)/y2(3)]
48
Gua Prctica MatLAB
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
Gua Prctica MatLAB
Indexacin de Matrices
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
48 40 37 48 9
8 21 33 22 22
49 46 9 19 32
Un caso particular es cuando deseamos extraer una fila o una columna, pues normalmente tendramos
que hacer lo siguiente:
>>Pf5=P(5,[1:8]) % Obtencin de la 5ta fila
Pf5 =
32 8 21 42 33 5 22 22
51
Captulo 2
En este caso involucra un vector que especifica a todas las cantidades de columnas, si eso ocurre,
podemos abreviar la sintaxis, que realizar accin semejante, de la siguiente manera:
>> Pv5=P(5,:) % obtencin de la 5ta fila
Pv5 =
32 8 21 42 33 5 22 22
>>Pc3=P(:,3) % obtencin de la 3ra columna de P
Pc3 =
48
24
40
7
21
46
Conocido esto, nos resultar fcil eliminar una(s) fila(s) o columna(s) si es que asignamos a estas
el valor del vaco.
>> P
P =
41 14 48 40 34 35 35 38
45 27 24 48 38 2 16 40
6 48 40 33 37 14 48 9
46 48 7 2 20 2 2 24
32 8 21 42 33 5 22 22
5 49 46 47 9 41 19 32
14 40 34 35 35 38
27 48 38 2 16 40
48 33 37 14 48 9
48 2 20 2 2 24
8 42 33 5 22 22
49 47 9 41 19 32
52
Gua Prctica MatLAB
Consiste en agrupar 2 o ms matrices para formar una de ordenmayor. Se mantiene las caractersticas
de cada matriz, porque son las variables que representan a estas con las que se realiza la
concatenacin. Por su forma de agrupacin se definen dos tipos:
Concatenacin Horizontal: Para agrupar de esta forma a un conjunto de matrices se debe tener
en cuenta que el nmero de filas de estas deben ser iguales y se agruparn como elementos de
un vector fila.
Concatenacin Vertical: En este caso la agrupacin se realizar con matrices que tienen igual
nmero de columnas y se agruparn como elementos de un vector columna.
Ejemplo:
% Generando las matrices R3x5, T2x5 y W3x1
>>R=round(32*rand(3,5))
R =
18 24 18 17 4
29 24 2 25 18
9 12 2 30 15
>>T=round(16*rand(2,5))
T =
0 3 5 3 4
5 13 8 10 10
>> W=round(56*rand(3,1))
W =
39
42
25
53
Captulo 2
Ejercicios propuestos
1. Sea la matriz cuadrada:
54
Gua Prctica MatLAB
8. Defina un vector aformado por los cuatro primeros nmeros impares y otro bformado por los
cuatro primeros nmeros pares de varias formas distintas. Emplelos para construir la matriz:
Ejercicios ms avanzados
1. En una sola instruccin, cambie todos los valores de la diagonal de una matriz cuadrada a cero.
2. En una sola instruccin, sustituya todos los valores de la diagonal de una matriz cuadrada por los
elementos de un vector dado.
3. Ordene los elementos de una matriz del menor a mayor manteniendo su forma (indicacin:
emplee la orden reshape).
4. En una sola instruccin, ponga a cero todos los elementos negativos de una matriz.
5. En una sola instruccin, ponga a cero todos los elementos de una matriz que estn entre -1 y 1.
(La conjuncin lgica es &).
6. De tres formas distintas (cada una en una sola instruccin), averigue el nmero de elementos de
una matriz, de forma que al final tengamos un nmero.
55
3
Captulo
Programacin
en Matlab
Un lenguaje de programacin es un lenguaje que puede ser utilizado para controlar el comportamiento
de una mquina, particularmente una computadora. Consiste en un conjunto de smbolos y reglas
sintcticas y semnticas que definen su estructura y el significado de sus elementos y expresiones,
permite especificar de manera precisa sobre qu datos de una computadora debe operar, cmo
deben ser estos almacenados, transmitidos y qu acciones debe tomar bajo una variada gama
de circunstancias. Todo esto, a travs de un lenguaje relativamente prximo al lenguaje humano
(lenguaje de alto nivel).
Todo programa en su edicin debe tener en cuenta las 3 lgicas de programacin, que se definen
como: Lgica Secuencial, Lgica Selectiva y Lgica Repetitiva.
En este captulo conoceremos cmo editar e implementar un programa utilizando la sintaxis del
Matlab, manteniendo los criterios de las lgicas en la cual se gobiernan, y que dependiendo de su
estructura podr ser reconocido como M-File.
M-FILES
La programacin en Matlab se realiza bsicamente sobre archivos M o M-files. Se los denomina de
esta forma debido a su extensin ".m". Pueden ser creados y editados desde cualquier editor de texto
comn; por ejemplo, el Bloc de Notas. Pero el Matlab incluye un lugar propio llamado editor debuggerel
cual se invoca con la instruccin edit. Si se opta por un editor externo se debe tener en cuenta que
los archivos deban ser guardados con esta extensin.
De acuerdo a su edicin, estos archivos pueden separarse en dos tipos:
Script o Archivo de Comandos
Funciones
Script: Son archivos que contiene lneas de instrucciones del Matlab, manteniendo mnimamente una
lgica secuencial en su edicin. Este archivo ya editado se guarda con un nombre especfico dando a
lugar que dichas instrucciones sean desde ese instante representadas por tal nombre, entonces, si
queremos ejecutar las instrucciones bastar con escribir dicho nombre en la ventana de comandos.
Aqu se debe notar algo importante: Todas las variables que se hayan definido o creado dentro de este
archivo, luego de su ejecucin pasarn a formar parte del workspace. Se debe tratar de que la variable
del workspace no coincida con las que aparecen en el script que se ha de ejecutar.
57
Captulo 3
Ejemplo:
Implementar un script que calcule el valor de la hipotenusa de un tringulo rectngulo cuyos catetos
tienen los valores de 12 y 17.
Solucin:
Invocamos al editor debugger.
>> edit
El archivo fue guardado con el nombre de hipotenusa, note en la parte superior de la ventana el
nombre con el que fue guardado.
Ejecutando el script en la ventana de comandos:
>> hipotenusa
Your variables are:
a b c
Segn la lnea 8 del script hipotenusa la salida de la ejecucin que debe dar la instruccin who son
las variables creadas en el workspace.
58
Gua Prctica MatLAB
Funcin: En principio existen dos tipos de funciones: las funciones inline, que se insertan enla lnea
de comandos y las que se escriben en un documento de texto externo (M-File). Esta ltimaforma,
que es la evolucin natural de los ficheros script, es ms flexible y es en la que noscentraremos a
continuacin. La funcin es un M-file con cabecera de ejecucin definida, es decir tiene por primera
lnea una sintaxis definida por:
function [argumentos_salidas]=nombre(argumentos_entradas)
Donde:
nombre: Corresponde al nombre de la funcin.
argumentos_salidas:Representa a un vector de elementos o variables de retorno de la
funcin. El valor de cada uno de los elementos vara a medida que se ejecuta el algoritmo. Los
valores devueltos por la funcin convocada sern los valores que se encuentran en argumentos_
salidas en el momento en que termina la ejecucin de la funcin. La definicin de esta salida es
opcional; de no aparecer la funcin se convertir en un procedimiento, puesto que no devuelve
nada; slo acepta parmetros y ejecuta el algoritmo dado.
argumentos_entradas:Son los parmetros que recibe la funcin para realizar su
procesamiento. Estos argumentos, durante la ejecucin, son parmetros recibidos por valor (by
value); es decir, se hacen duplicados de los parmetros y en estos sobre los cuales se realizan
todas las modificaciones.
Contrario a los scripts, todas las variables que se definan dentro del cuerpo o definicin de la funcin,
si la funcin es invocada desde la ventana de comandos, no pasarn a formar parte de nuestro
workspace.
Es muy importante que guardemos el archivo con el mismo nombre de la funcin definida en la cabecera.
Nota
De no hacer esto ser un error
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:
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:
var = inline('Expresin matemtica en forma de cadena')
Ejercicio:
Usando un archivo de funcin en MATLAB para la siguiente funcin:
La entrada de la funcin ser x, y la salida ser y. Escriba la funcin de forma que xpueda ser un
vector, y utilcela para calcular el valor de la expresin evaluada en x e [-2,2] siendo x entero.
Solucin:
Usando funciones en lnea, escribiremos en el editor lo siguiente:
1 x=[-2:2]; % extension de x como vector
2 f=inline('0.9*x.^4-12*x.^2-5*x'); % funcion f(x)
3 y=g(x) % evaluando la funcion f en los valores de x
60
Gua Prctica MatLAB
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
fprintf: Se utiliza para visualizar salidas de programas (texto y datos) en la pantalla, o bien
almacenarlas en un fichero. Con este comando, y a diferencia de disp, la salida puede tener un
formato preestablecido. En este caso se puedencombinar texto y resultados numricos provenientes
de clculos o variablespredefinidas en la misma lnea. Adems, el formato de los nmeros se
puedecontrolar directamente.
Uso del comando fprintf para visualizar mensajes de texto:
>>fprintf('Mensaje en forma de cadena\n')
Nota Para cambiar de lnea en un mensaje de texto se debe insertar el cdigo \n.
62
Gua Prctica MatLAB
El flag o bandera, cuyo carcter es opcional, puede ser uno de los siguientes:
Caracter Descripcin
+ (signo mas) Justificacin izquierda del nmero dentro del campo
- (signo menos) Visualiza el carcter de signo ( + o -) delante del nmero
0 (cero) Aade ceros si el nmero es ms pequeo que el campo
La especificacin del ancho y precisin del campo (5.2 en el ejemplo anterior) es opcional. El primer
nmero (5 en nuestro ejemplo) es el ancho del campo, el cual nos indica el menor nmero de dgitos
en la visualizacin. Si el nmero que se visualiza esmenor que el ancho del campo, se aadirn ceros
o espacios delante del nmero encuestin. La precisin se corresponde con el segundo nmero en el
ejemplo anterior, y especifica el nmero de dgitos que se mostrarn a la derecha del punto decimal.
El ltimo elemento es el correspondiente al formato de conversin (f en el ejemplo anterior). ste es
obligatorio.
A continuacin se muestran los caracteres de conversinms utilizados:
e Notacin exponencial en minsculas (ej. 1.709098e+001).
E Notacin exponencial en maysculas (ej. 1.709098E+001).
f Notacin de punto fijo (ej. 17.090980).
g Representacin en formato corto de las notaciones e o f.
G Representacin en formato corto de las notaciones E o f.
i Entero.
Se puede obtener informacin adicional sobre estos y otros formatos utilizando la ayudade MATLAB,
el men Help (Ayuda).
Ejemplo:
Pedir al usuario por pantalla tres nmeros y responde con el mensaje: Promedio de los nmeros
ingresados es...
Solucin:
Realizando un script, en el editor escribiremos las siguientes lneas:
63
Captulo 3
64
Gua Prctica MatLAB
if else end
if condicin
<Sentencias1>;
else
<Sentencias2>;
end
condicin: Es una expresin lgica o relacional cuyo resultado es de tipo lgico, valor de 1 (uno) si
el resultado es verdadero 0 (cero) si el resultado es falso.
Sentencias1: Es un conjunto de sentencias a ejecutarse siempre que la respuesta de condicin sea
verdadera.
Sentencias2: Es un conjunto de sentencias a ejecutarse siempre que la respuesta de condicin sea
falsa.
Casos Especiales:
Ausencia de clusula else
Diagrama de Flujo: Sintaxis:
if condicin
<Sentencias>;
end
65
Captulo 3
if condicin
; % sentencia nula
else
<Sentencias>;
end
if condicin
<Sentencias1>;
elseif
<Sentencias2>;
elseif
<Sentencias3>;
.
.
.
elseif
<SentenciasN>;
else
<Sentencias por Defecto>;
end
66
Gua Prctica MatLAB
Ejemplo ilustrativo:
Implementar un archivo script que solicite el ingreso de dos nmeros cualesquiera y muestre en
pantalla el mayor de ambos.
Solucin: Abrimos el editor y escribimos lo siguiente:
a=input('Ingrese valor de a= ');
b=input('Ingrese valor de b= ');
if a>b
fprintf('\nEl mayor es a=%i\n',a);
else
fprintf('\nEl mayor es b=%i\n',b);
end
El mayor es b=18
Pero si los valores ingresados por el usuario son iguales nos damos cuenta que el resultado debe ser
diferente, por lo tanto debemos modificar el script para considerar la condicin de igualdad, entonces
tendremos lo siguiente:
a=input('Ingrese valor de a= ');
b=input('Ingrese valor de b= ');
if a>b
fprintf('\nEl mayor es a=%i\n',a);
elseif b>a
fprintf('\nEl mayor es b=%i\n',b);
else
fprintf('\na=%i y b=%i son iguales\n',a,b);
end
67
Captulo 3
otherwise
<Sentencias por Defecto>;
end
Ejemplo ilustrativo:
Implementar un archivo script que calcule y muestre el valor respectivo de la funcin f para un valor
de x ingresado por el usuario, siendo la funcin de la siguiente forma:
Solucin:
Implementamos en el editor las siguientes lneas de instruccin:
x=input('x= ');
switch x
end
fprintf('f(%4.3f)=%f\n',x,f)
68
Gua Prctica MatLAB
>> valorf
x= 6.1
f(6.100)=110.117811
>> valorf
x= 25
f(25.000)=0.000000
Estructura iterativa: Un bucle iterativo o iteracin de una secuencia de instrucciones hace que se
repita su ejecucin mientras se cumpla una condicin. El nmero de iteraciones normalmente est
determinado por el cambio en la condicin dentro del mismo bucle, aunque puede ser forzado o
explcito por otra condicin. Por la forma de ejecucin del bucle tenemos a la sentencia while, la cual
trabaja segn la evaluacin de condicin, y a la sentencia for, que trabaja segn el recorrido de un
contador.
while end
while condicin
<Sentencias>;
end
condicin: Es una expresin lgica o relacional cuyo resultado es de tipo lgico, valor de 1 (uno) si
el resultado es verdadero 0 (cero) si el resultado es falso.
Sentencias: Son las sentencias a ejecutarse siempre y cuando la respuesta de la condicin sea
verdadera.
69
Captulo 3
Ejemplo:
Implementar un script que calcule la suma de los 10 primeros nmeros naturales.
Solucin: Escribimos en el editor las siguientes lneas de instruccin:
k=1;
suma=0;
while k<=10
suma=suma+k;
k=k+1;
end
fprintf('Suma10=%i\n',suma)
for end
for rango(k)
<Sentencias>;
end
rango(k): Es el valor k-simo de rango que toma la variable contadora. Donde rango es un vector de
n elementos y debido a esto tendremos n iteraciones.
Sentencias: Son las sentencias a ejecutarse para cada uno de los valores del contador.
Si consideramos rango=[4 11 13], entonces tendremos 3 iteraciones y rango tomar el valor del
dato que se encuentra en la posicin numricamente igual al nmero de iteracin. La primera para
k=1 tomar el valor de rango(1)=4, para la segunda iteracin, es decir k=2, tomar el valor de
rango(2)=11 y para la tercera, k=3, tomar el valor de rango(3)=13.
70
Gua Prctica MatLAB
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.
5. Dada la ecuacin de 2do grado: , implemente un script que calcule y muestre las
races de dicha ecuacin y de qu tipo son dependiendo de su discriminante, donde a, b y c son
ingresados por el usuario.
Solucin:
72
Gua Prctica MatLAB
a=input('a= ');
b=input('b= ');
c=input('c= ');
d=b^2-4*a*c;
if d>0
disp('Raices Reales')
elseif d==0
disp('Raices Reales Iguales')
else
disp('Raices Complejas')
end
x1=(-b+sqrt(d))/2;
x2=(-b-sqrt(d))/2;
fprintf('x1=%8.6f\nx2=%8.6f\n\n',x1,x2)
6. Implemente un script que muestre en pantalla la siguiente lista de artculos de una tienda:
[1] ZapatosS.200.00
[2] Pantalones.S.100.00
[3] Camisas..S. 80.00
Y que el programa permita al usuario elegir el tipo de artculo a comprar, adems que pueda
ingresar la cantidad que desea comprar. Finalmente el programa deber mostrar el valor total a
pagar.
Ejercicios Propuestos
1. Escriba un programa que permita determinar si un nmero entero dado es par o impar. (Utilizar
el operador mod).
2. Utilizando el operador relacional > (mayor que), escriba un archivo.m que permita definir si un
nmero a es mayor que un nmero b. El programa debe admitir ingresar los nmeros a y b, e
imprimir el resultado a es mayor que b, o a es menor que b, o a es igual a b.
3. Implemente un programa que permita ingresar un vector con N nmeros y, posteriormente, permita
evaluar la media aritmtica.
4. Implemente un programa que d como resultado los nmeros primos menores que un nmero
dado n (positivo y entero).
73
Captulo 3
5. Imprima los mltiplos de 7 existentes entre dos valores m y n pedido al usuario. Modifique el
algoritmo para que calcule cuntos nmeros hay y su suma.
6. Solicite al usuario dos nmeros n y k y calcule (combinaciones de n elementos tomados de k en k).
7. Disee un algoritmo que permita calcular la posicin (fila y columna) de la mayor componente de
una matriz pedida al usuario.
8. Realice un programa en Matlab que calcule el centro de masas de un sistema de partculas en
3D. Inters: Sumatorios y medias.
9. Cree un archivo.m que permita evaluar las series. Los argumentos de entrada son x y n, donde n
es el nmero de trminos que se evalan en la serie y x es un nmero real:
a)
b)
c)
74
4
Captulo
Grficos
MATLAB ofrece numerosas oportunidades para emplear rutinas que realicen grficas en dos y tres
dimensiones, estas grficas son alojadas en una ventana para su visualizacin donde existe una
paleta de comandos que permiten:
Aadir texto en posiciones deseadas.
Aadir flechas o lneas.
Seleccionar alguna de las componentes del grfico.
Rotar el grafico a criterio deseado.
Las grficas de MATLAB se pueden exportar a multitud de formatos grficos puntuales y vectoriales
(jpg, bmp, tiff, eps, png). Adems est la posibilidad de guardarlos con la extensin fig. En ese caso,
cuando se abre la figura se inicia la ejecucin de MATLAB y se ofrece al usuario lafigura tal y como
estaba cuando la guard, incluyendo modificaciones realizadas directamente sobre la ventana grfica.
En lugar de dar instrucciones que se puedan ejecutar en la ventana de comandos, en este captulo
principalmente implementaremos scripts que generen uno o varios grficos al ejecutarse.
Ventana de Figura
Todas las grficas realizadas en MATLAB deben alojarse en una ventana de figura que se identifica por
un nombre seguido de un valor de identificacin, para invocarlo debemos escribir la siguiente sintaxis:
Ejemplo:
>> figure(8) % invocando a la ventana figura 8
75
Captulo 4
Si al realizar una grfica no precisamos una ventana figura en la cual alojarla, al ejecutar el programa
esta se alojar por defecto en la ventana figura 1.
Para cerrar una ventana figura n por comandos lo podremos hacer usando la funcin close(n);
el orden de cerrar las ventanas existentes no interesa, en caso no exista la ventana la funcin
closeretornar un mensaje de error.
>> close(8) % cerrando la ventana figura 8
76
Gua Prctica MatLAB
La primera sintaxis realiza solamente una grfica y la segunda es la forma para realizar hasta N
grficas en un mismo eje cartesiano.
El argumento 'caractersticas' est conformado por 3 caracteres que especifican algunas
propiedades para la grfica a realizarse con la funcin plot. El primer carcter nos especifica el tipo
de trazo a mostrar, el segundo especifica el color de lnea y el tercer carcter especifica la marca del
punto.
Caractersticas de la Grfica
Tipo de lnea Color de Lnea Tipo de Marca
- Continua b Azul . Punto
-- Discontinua r Rojo + Cruz
: Punteada g Verde o Circunferencia
-. Guin y Punto c Cian x Equis
x Equis m Magenta s Cuadrado
o Circunferencias y Amarillo d Diamante
+ Cruces k Negro p Pentagrama
Existen mucho ms atributos que podemos asignar a las grficas realizadas, como por ejemplo el
tamao de la marca de punto, el color de fondo y del borde del mismo, as como el ancho de lnea del
trazado. En el transcurso de las aplicaciones se irn mostrando algunos de estos para su futuro uso.
Graficas en 2D
Puntos: Para ubicar puntos en el plano cartesiano es necesario ubicar los valores de las abscisas de
cada par ordenado en un vector y sus respectivas ordenadas en otro vector teniendo en cuenta que
estas deben estar en la misma ubicacin que ocupan sus abscisas.
Ejemplo:
Sean los siguientes puntos: , implemente un script para representar
dichos puntos en el plano cartesiano.
Solucin: Siguiendo la definicin dada escribimos las siguientes instrucciones:
x=[-2 1 3 6];
y=[-1 1 -2 3];
plot(x,y,'ro') % note que obviamos el 1er caracter
77
Captulo 4
78
Gua Prctica MatLAB
MATLAB contiene funciones que nos permiten agregar algunas caractersticas para especificar la
grfica saliente:
Funcin Descripcin
grid on, grid off Activa o desactiva el enrejado de los ejes.
xlabel('cadenax') Coloca la etiqueta cadenax al eje x.
ylabel('cadenay') Coloca la etiqueta cadenay al eje y.
title('cadena') Coloca el titulo cadena a la grfica.
legend('cad_Leg') Coloca la leyenda cad_leg a la grfica
axis([xo xf yo yf]) Sita los valores mnimos y mximos para los ejes
hold on, hold off Congela y descongela a la ventana figura para poder superponer
otra grafica en los mismos ejes.
text(x,y,'cadena') Ingresa automticamente el texto cadena en el plano
cartesiano iniciando la escritura en (x,y)
gtext(x,y,'cadena') Ingresa manualmente (con mouse) el texto cadena en el plano
cartesiano iniciando la escritura en (x,y)
ginput(n) Importar n puntos de una grfica con el mouse, dichos puntos
son almacenados en una variable asignada.
Por ltimo, al archivo grafo1.m le damos sus atributos para mostrar una mejor salida de nuestra
grfica, el usuario puede visualizar el cdigo del archivo que se encuentra en el disco, teniendo como
resultado la siguiente grfica:
79
Captulo 4
Cartesianas:
Para hacer grficas de funciones de una variable con MatLab, primero tenemos que crear una tabla
de valores de la variable para despus dibujar la funcin. Debemos tener en cuenta que una curva es
la unin de infinitos puntos, debido a eso es necesario contar con una cantidad de datos necesarios
para realizar la simulacin.
Ejemplo:
Realizar la grfica de la siguiente expresin:
x=linspace(-1,5,30); % vector dominio
y=sin(x.^2); % vector rango
plot(x,y) % grafica por defecto
Notamos las imperfecciones de la curva debido a la poca cantidad de informacin, pero si aumentamos
la cantidad de puntos al vector x, ver cdigo en el disco, tendremos una curva bastante suave con
respecto a la primera:
80
Gua Prctica MatLAB
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
bar: loglog:
>> x=0:0.1:pi; >> x=0:0.1:pi;
>> y=sin(x); >> y=sin(x);
>> bar(x,abs(y)) >> bar(x,abs(y))
Paramtricas:
Se observa que tanto el domino como el rango dependen de una variable.
Ejemplo:
Graficar la siguiente curva paramtrica:
82
Gua Prctica MatLAB
Guardamos el archivo con nombre grafo4.m y lo ejecutamos, entonces tendremos la siguiente curva
paramtrica:
Polares:
Ejemplo:
Graficar la siguiente curva polar: para
Solucin:
Editando un archivo las instrucciones siguientes:
u=linspace(0,2*pi,360);
r=3-2*cos(3*u);
polar(u,r);
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
Gua Prctica MatLAB
hist: pie:
>> x = -4:0.1:4; >> x = [1 3 0.5 2.5 2];
>> y = randn(length(x),1); >> explode = [0 1 0 0 0];
>> hist(y,x) >> pie(x,explode)
Grficos Mltiples
La funcin plot puede realizar varias grficas superpuestas en una misma ventana figura, las
propiedades las adopta el MATLAB si es que no son especificadas.
Ejemplo:
>> x=0:0.1:4;
>> y1=4*exp(-x).*sin(2*x);
>> y2=2*cos(x);
>> plot(x,y1,x,y2)
85
Captulo 4
Utilizando la funcin hold antes de un nuevo comando que grfica podemos superponer ms grficas
en una sola ventana figura.
>> x=0:0.1:5;
>> y1=3*sin(x);
>> y2=cos(x);
>> plot(x,y1)
>> hold on % congela la ventana
>> plot(x,y2)
>> grid on
>> hold off % descongela la ventana
subplot: Permite que una ventana figura pueda dividirse en varios ejes, dividindose en filas y columnas,
asignando a cada divisin un nmero identificador, permitiendo as alojar ms de una grfica.
Sintaxis: subplot(#filas,#columnas,posicin)
Ejemplo:
Realizar la grfica de las siguientes expresiones en una sola ventana figura.
a)
b)
c)
d)
86
Gua Prctica MatLAB
Solucin:
x=linspace(0,4,300);
y1=8*sqrt(x);
y2=6*sin(4*x);
y3=x.^2;
y4=10*exp(-x).*cos(4*x);
subplot(2,2,1)
plot(x,y1,'linewidth',2)
title('Curva 1')
subplot(2,2,2)
plot(x,y2,'linewidth',2);title('Curva 2')
subplot(2,2,3)
plot(x,y3,'linewidth',2);title('Curva 3')
subplot(2,2,4)
plot(x,y4,'linewidth',2);title('Curva 4')
Tenga en cuenta que cada grfica est sujeta independientemente al manejo de sus diferentes
caractersticas, es decir: color, trazo, marca, etiqueta de ejes, ttulo, leyenda, etc. Pueden ser
diferentes para cada grfica.
87
Captulo 4
Funcin Descripcin
plot3 Grafica un conjunto de puntos en los ejes tridimensional.
fill3 Dibuja una regin poligonal cuyos vrtices son los elementos de
los vectores que representan a los datos en los ejes XYZ.
stem3 Grafica bastones verticales, iniciando desde el plano XY
comet3 Realiza el trazado de la curva en forma dinmica
bar3 Grafica de barras tridimensionales
pie3 Grafica sectores cilndricos tridimensionales
mesh Grafica una superficie z=f(x,y)
meshc Grafica una superficie z=f(x,y) y proyecta las curvas de nivel en
el plano XY.
meshz Grafica una superficie z=f(x,y) cerrando la grafica con las
fronteras del dominio.
surf Grafica una superficie z=f(x,y) dando relleno de color a cada una
de las celdas.
surfc Grafica una superficie z=f(x,y) , proyectando las curvas de nivel
al plano XY
surfl Grafica una superficie z=f(x,y) considerando una iluminacin en
formato bsico.
waterfall Grafica una superficie z=f(x,y) en forma de cascada.
contour
contour3 Grafica las curvas de nivel en 2D y 3D
sphere Grafica una esfera unitaria.
cylinder Grafica una superficie de revolucin para f(t) en el dominio t
ribbony Grafica una superficie z=f(x,y) como cintas tridimensionales
quiver3 Grafica los vectores velocidad en los puntos de las coordenadas
tridimensionales.
Puntos: En tres dimensiones debemos tener en cuenta que ahora cada punto tendr tres coordenadas,
por lo tanto tendramos tres vectores que alojan al conjunto de abscisas, ordenadas y altura.
Ejemplo:
Sean los siguientes puntos: , implemente un script para
representar dichos puntos en el plano cartesiano.
Solucin: Generando el script grafo3D1.m, ubicarlo en el CD, podemos visualizar las siguientes
salidas:
88
Gua Prctica MatLAB
plot3(x,y,z,'ro'): stem3(x,y,z,'r')
Cartesianas:
Cada valor para los ejes estar representado por 3 vectores del mismo orden.
Ejemplo:
Graficar la curva cartesiana representada por:
Solucin:
Editando en un script de nombre grafo3D2.m las siguientes instrucciones:
x=linspace(0,10,300);
y=2*sqrt(x+1);
z=7*exp(-y/4).*cos(4*x);
plot3(x,y,z)
grid on
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
Gua Prctica MatLAB
Superficies
MATLAB es mucho ms prctico y funcional al momento de representar las superficies 3D, dispone de
una gran variedad de formatos para dibujar grficas de funciones de dosvariables y una componente,
ya sea por mallado, lneas de contorno y cuadrculas de colores que son las usadas. Para visualizar
correctamente las superficies es adecuado y preciso que estn representados como funciones
definidas sobre un domino rectangular en cualquiera de los planos de referencia.
Para trabajar con regiones rectangulares, definiremos los vectores de abscisas y de
ordenadas , que representarn a los ejes, entonces la regin de dominio rectangular
estar definida por el conjunto de coordenadas siguientes: ,
generando una matriz de orden nm.
Para facilitar la creacin del enrejado en MATLAB, utilizaremos la funcin meshgridque tiene
la siguiente sintaxis:
[xmatriz,ymatriz]=meshgrid(xvector,yvector)
Forma z=f(x,y)
Para graficar funciones de dos variables , al igual que para funciones de una variable,
primero hay que disponer de datos en una extensin del eje x y tambin otro conjunto de datosen
una extensin del eje y. Seguidamente tenemos que generar un mallado interceptando los datos en el
plano XY. Para ello utilizaremos la funcin meshgrid. A continuacin mostramos un ejemplo:
>> x=-1:0.1:1; % orden: 1x21
>> y=-2:0.1:2; % orden: 1x41
>> [xm,ym]=meshgrid(x,y); % enrejado matriz de 21x41
Y finalmente expresaremos la funcin z con las variables enrejadas:
>> zm=exp(-xm.^2-ym.^2).*sin(-xm.^2-ym.^2);
mesh(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
Gua Prctica MatLAB
Superficies Complejas
Obtenindose lo siguiente:
93
Captulo 4
Estadsticas
bar3: pie3:
>> x=[10 2 3 5 18 20 15 ]; >> x = [1 3 0.5 2.5 2];
>> bar3(x); >> explode = [0 1 0 0 0];
>> pie3(x,explode)
ESFERA
94
Gua Prctica MatLAB
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
Longitud de arco
La cual se puede expresar tambin de la siguiente forma en la cual resulta ms fcil de recordar
donde:
Dada una curva parametrizada segn un parmetro cualquiera se define el llamado vector
tangente, normal y binormal como:
96
Gua Prctica MatLAB
Curvatura y torsin
La curvatura es una medida del cambio de direccin del vector tangente a una curva, cuanto ms
rpido cambia ste a medida que nos desplazamos a lo largo de la curva, se dice, que ms grande
es la curvatura. Para una curva parametrizada cualquiera la curvatura es igual a:
Si la curva est parametrizada por el parmetro de longitud de arco, la anterior ecuacin se reduce
simplemente a:
Adems de la curvatura se suele definir el llamado radio de curvatura, como el inverso de la curvatura.
97
Captulo 4
La torsin es una medida del cambio de direccin del vector binormal: cuanto ms rpido cambia,
ms rpido gira el vector binormal alrededor del vector tangente y ms retorcida aparece la curva.
Por lo tanto, para una curva totalmente contenida en el plano la torsin es nula ya que el vector
binormal es constantemente perpendicular al plano que la contiene. Para el caso general la torsin
viene dada por:
Si la curva est parametrizada por el parmetro de longitud de arco, la anterior ecuacin se reduce a:
Plano osculador
En cada punto de una curva, el plano osculador es el plano que contiene al su vector tangente y al
vector normal a la curva. Para una partcula desplazndose en el espacio tridimiensional, el plano
osculador coincide con el plano que en cada instante contiene a la aceleracin y la velocidad. La
ecuacin de este plano viene dada por:
Donde:
, el punto de la trayectoria.
, el vector velocidad en el punto considerado.
, las coordenadas de un punto genrico del plano osculador.
Si se tiene una partcula en la posicin , movindose con velocidad y sometida a una aceleracin
, el plano osculador viene dado por el conjunto de puntos:
98
Gua Prctica MatLAB
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
Gua Prctica MatLAB
g)
h)
i)
2. Dibujar las siguientes curvas en paramtricas; en los apartados a) y b), dibujar adems los
vectores velocidad utilizando el comando quiver:
a)
b)
c)
d)
e)
f)
g)
h)
d)
e)
101
Captulo 4
f)
g)
h)
b)
c)
d)
5. Representar las grficas de las siguientes funciones de 2 variables, utilizando alguno de los
comandos descritos anteriormente. Dibujar tambin algunas curvas de nivel. Tome las extensiones
adecuadas para x e y.
a)
b)
c)
d)
6. Dibujar las superficies generadas por >>cylinder(R(t),30), en cada uno de los siguientes
casos:
a) ,
b) ,
c) ,
d) ,
102
5
Captulo
Polinomios
En la actualidad los polinomios son utilizados en la mayora de los cursos relacionados con la
programacin de los mtodos numricos, justificando as la facilidad de manipulacin y de
implementacin en cualquiera de los lenguajes existentes. Es muy conocido tambin que en el rea
de control existe la manipulacin de polinomios de estados para representar el comportamiento a
travs del tiempo de un sistema, y es ah donde apuntamos el estudio de este captulo.
Definicin
Con MATLAB se puede trabajar con polinomios de forma sencilla.Es suficiente tener en cuenta que
un polinomio en el programa no es nada ms que un vector que contiene los coeficientes de dicho
polinomio completo y ordenado descendentemente en su grado. Es decir, si tenemos la expresin:
103
Captulo 5
Toda matriz est asociada a un polinomio, la cual recibe el nombre de polinomio caracterstico de la
matriz, y este se obtiene de la siguiente forma:
>>A=round(46*randn(4)); % matriz cualquiera
A =
25 15 165 33
84 -60 127 -3
-104 -20 -62 33
40 16 140 -9
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
104
Gua Prctica MatLAB
>>[cocienteGF,residuo]=deconv(g,f)
cocienteGF =
0.6667 0
>>residuo =
0 0 -1.6667 3.0000
Ahora, si deseamos sumar dos polinomios de diferentes grados, debemos tener en cuenta que
dichos polinomios sern representados en MATLAB como dos vectores de diferentes cantidades
de elementos, por lo tanto es imposible realizar la operacin con el operador "+" de forma directa,
debido a esto, debemos aumentar una cantidad de ceros a la izquierda del vector de menor nmero
de elementos para tener la misma cantidad para ambos vectores, slo as se verificar que la suma
es realizable. Las siguientes lneas de instrucciones posibilitan realizar la suma de dos polinomios de
diferentes grados.
105
Captulo 5
function s=sumapol(p,q)
n=length(p)-1;
m=length(q)-1;
if n>m
q=[zeros(1,n-m) q];
else
p=[zeros(1,m-n) p];
end
s=p+q;
>>S=sumapol(f,g) % f+g
S =
2 3 -1 4
106
Gua Prctica MatLAB
La primera sintaxis nos dar la integral con constante = 0 y la siguiente nos dar la integral con una
constante de valor k.
Ejemplo: Tomando los polinomios f y g ya definidos anteriormente:
>>If=polyint(f) % TrminoIndependiente = 0
If =
1 0 1 0
107
Captulo 5
Ejercicios:
ii)
iii)
Si deseamos obtener un polinomio que se ajuste a nuestros datos experimentales teniendo la libertad
de elegir el grado de este, aplicaremos la siguiente funcin:
polyfit: Construye un polinomio de ajuste de grado n utilizando el mtodo de los mnimos cuadrados
empleando los datos en el dominio y el rango.
Sintaxis: Pol = polyfit(datoX,datoY,grado)
108
Gua Prctica MatLAB
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
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)
Interpola para encontrar yi, los valores de lafuncin Ysubyacenteen los puntos en la xi vector o
matriz.X debe serun vector. Y puede serun escalar, un vector, o una matriz de cualquier dimensin,
adems metodo es la forma de cmo se desea realizar la interpolacin, siendo estas las siguientes:
nearest : Interpolacin del vecino ms cercano
linear : Interpolacin lineal
cubic : Interpolacin usando polinomio cbico de tipo de Hermite.
Ejemplo: Las siguientes instrucciones guardadas con el nombre interp_INTERP1.m, generan una curva
sinusoidal gruesa e interpola sobre un eje de abscisas ms fino.
x = 0:10;
y = sin(x);
xi = 0:.25:10;
yi = interp1(x,y,xi);
plot(x,y,'o',xi,yi)
110
Gua Prctica MatLAB
Ejercicios:
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
112
6
Captulo
Interpolacin
En la prctica de la ingeniera se utilizan mucho las tablas de datos, como en el caso de las tablas
de vapor saturado en la termodinmica. En la mayora de los casos el dato necesario no se encuentra
explcito en la tabla sino entre dos valores de sta, para lo cual es necesario estimarlo de entre
los valores que presenta la tabla en un proceso conocido como interpolacin. La idea bsica de
la interpolacin es hallar un polinomio o funcin que cumpla con pasar por todos los puntos de un
conjunto de datos, y poder estimar los valores entre ellos por medio del polinomio.
POLINOMIOS DE LAGRANGE
Para ilustrar la interpolacin por polinomios de Lagrange considrese un conjunto de datos de tres
puntos. El polinomio interpolador en este caso es:
Obsrvese que en el punto slo queda el primer trmino con su numerador y denominador cancelndose
entre s. Lo mismo sucede con los dems puntos, por lo que se ve que el polinomio cumple con la
condicin de pasar por todos los puntos de datos. En general, para n puntos de datos, el polinomio
de Lagrange es:
(1)
Una forma mucho ms sencilla de ver la ecuacin 1 es en forma de cdigo, el cual se muestra escrito
para MATLAB en las siguientes lneas:
p=0;
for k=1:length(x)
den=1;
L=[]; % termino de lagrange
for r=1:length(x)
if r~=k
xp=x; % hallando el numerador de L
xp(k)=[]; % elimino el termino k-esimo
num=poly(xp); % numerador: polinomio de x
d1=(x(k)-x(r));% denominador de L
den=den*d1;
end
end
L=num/den;
p=p+y(k)*L % Polinomio de Lagrange
end
113
Captulo 6
Vector X= [1 2 3 4 5 6]
Vector Y= [1 3 -1 0 3 2]
Pl(x)=
5 4 3 2
11 x 47 x 371 x 1321 x 1709 x
----- - ----- + ------ - ------- + ------ - 43
120 24 24 24 20
114
Gua Prctica MatLAB
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 =
-4 -2 0 2 4
y =
0.7568 -0.9093 0 0.9093 -0.7568
115
Captulo 6
Ejemplo:
Se tiene el conjunto de datos {(1,1),(2,3),(3,-1),(4,0),(5.3),(6,2)}. Muestre el polinomio
interpolador de Newton por diferencias divididas y la grfica que se calcula ejecutando el script
newtoninterp.m
Solucin:
Ingresando los vectores de datos y aplicando la funcin, tendremos:
>> x=[1 2 3 4 5 6];
>> y=[1 3 -1 0 3 2];
>> t=1:0.1:6;
>> p = newtoninterp(x,y,t);
116
Gua Prctica MatLAB
Comparando las grficas obtenidas por los dos mtodos de interpolacin: Lagrange y Newton,
tendremos que el error entre ambos es mnimo:
117
7
Captulo
Resolucin de Sistema
de Ecuaciones Lineales
En esta parte veremos cmo usar MATLAB para resolver sistemas de ecuaciones lineales. Al igual que
en la seccin anterior usaremos tanto las rutinas internas de MATLAB como rutinaspropias creadas
por el usuario, asimismo las que se encuentran disponibles en la gua bsica de MATLAB que se
encuentra en la pgina del curso. Pero adems usaremos una combinacin de los dos procedimientos.
Comencemos con las fciles y sencillas rutinas internas de MATLAB: Si queremos resolverun sistema
de ecuaciones lineales, lo primero que debemos hacer es escribirlo en la forma matricial Ax=b.
Definicin
Un sistema de ecuaciones lineales simultneas de la forma:
.. ..
. .
Otra manera de llegar a esta solucin es escribiendo en lugar de inv(A); sin embargo, la
manera ms sencilla de hacerlo en MATLAB es escribiendo:
>> x = Ab
Donde el smbolo \ (divisin a izquierda), se usa en MATLAB para obtener la solucin delproblema
.
De los varios mtodos explicados hasta aqu para la solucin de sistemas lineales usando MATLAB,
el que ms se usa es el ltimo, principalmente porque llega a la solucin sin necesidad de hallar
la inversa de la matriz A (en realidad se usa factorizacin QR), lo que desde el punto de vista
computacional es bastante ventajoso. Se puede observar que el uso de este ltimo mtodo mejora la
velocidad de clculo de MATLAB en cerca de un 50%.
Por ltimo, slo resta decir que en el caso de trabajar con matrices y vectores de componentes
enteras o racionales, es conveniente expresar los resultados de esta misma manera para evitar la
prdida de cifras significativas. En MATLAB esto se puede hacer con la instruccin format rat, con la
que se aproximan todos los resultados a la fraccin irreductible ms cercana.
120
Gua Prctica MatLAB
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:
, y
121
Captulo 7
La cual puede resolverse directamente como es en el caso anterior o utilizando los mtodos de
iteracin que a continuacin conoceremos.
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
Gua Prctica MatLAB
Para cada rengln se define el elemento de la matriz aumentada como el pivote. Eliminacin
Gaussiana opera en dos fases. Primero, para cada rengln empezando por el primer rengln, hace
ceros en los elementos debajo del pivote (lneas 3 y 4). Segundo, para cada rengln empezando por
el ltimo rengln, hace el pivote igual a 1, y hace ceros arriba del pivote (lneas 5 a 8). La solucin
al sistema de ecuaciones queda en la ltima columna de la matriz aumentada (lnea 9).
A continuacin, se presenta la solucin del ejemplo del circuito elctrico mediante eliminacin
Gaussiana.
>> b=[20;0;0];
>> x=Elim_Gauss(A,b)
x =
1.5172
0.5517
0.1379
123
Captulo 7
En las lneas siguientes se muestra el seudocdigo mtodo Gauss-Jordan, cuyo cdigo est
implementado en el CD con nombre Gauss_Jordan.m.
El mtodo de Gauss-Jordan es similar al de la eliminacin Gaussiana, pero primero hace el pivote
igual a 1, y luego hace ceros en toda la columna del pivote. En el mtodo de Gauss-Jordan primero
se hace el pivote igual a 1 (lnea 3), despus se hacen cero los elementos arriba y abajo del
pivote lneas 4 a 6). La solucin al sistema de ecuaciones queda en la ltima columna de la matriz
aumentada en la ltima lnea.
A continuacin se muestra la solucin del ejemplo del circuito elctrico mediante el mtodo de
Gauss-Jordan.
124
Gua Prctica MatLAB
>> b=[20;0;0];
>> x=Gauss_Jordan(A,b)
x =
1.5172
0.5517
0.1379
PIVOTE MXIMO
Los algoritmos presentados pueden encontrar el problema de que el pivote sea cero, causando una
divisin entre cero. Para resolver este problema se pueden intercambiar renglones para colocar un
elemento diferente de cero en la diagonal principal. A continuacin se presenta la implementacin del
seudocdigo de Gauss-Jordan donde se escoge el elemento de mximo valor absoluto como pivote.
125
Captulo 7
Mtodo MONTANTE
El cdigo fue implementado con el nombre Montante.m y se encuentra en el CD, aplicando tendremos
la siguiente salida:
>> A=[15 -5 0;...
-5 15 -5;...
0 -5 20];
>> b=[20;0;0];
>> x=Montante(A,b)
x =
1.5172
0.5517
0.1379
126
Gua Prctica MatLAB
MATRIZ INVERSA
Los mtodos de eliminacin Gaussiana, Gauss-Jordan, y Montante pueden ser utilizados para encontrar
la inversa de una matriz. En este caso, la matriz aumentada sera la matriz original y la matriz identidad.
>> I=eye(3);
>> Inversa=Montante(A,I)
Inversa =
0.0759 0.0276 0.0069
0.0276 0.0828 0.0207
0.0069 0.0207 0.0552
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
Gua Prctica MatLAB
En las ecuaciones recursivas es posible utilizar inmediatamente los valores obtenidos para calcularlos
siguientes valores, es decir:
El utilizar los valores de xi que se acaban de calcular para calcular los siguientes valores permite que
el mtodo converja ms rpidamente a una solucin.
Las ecuaciones recursivas se pueden escribir en forma matricial de la siguiente manera:
Donde representa la fila de la matriz , y la regla debe aplicarse en orden para =1,2,,n
A continuacin se muestra el seudocdigo:
129
Captulo 7
T =
0 0.3333 0
0.3333 0 0.3333
0 0.2500 0
X =
1.5170
0.5509
0.1377
Iter =
9
T =
0 0.3333 0
0.3333 0 0.3333
0 0.2500 0
X =
1.5170
0.5516
0.1379
Iter =
5
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.
131
Captulo 7
132
8
Captulo
Solucin de Ecuaciones
No Lineales
En este captulo usaremos el programa MATLAB con el fin de resolver ecuaciones no lineales de
manera rpida y fcil. Se usarn tanto las herramientaspropias de MATLAB, como rutinas creadas por
el usuario que nos llevarn paso a paso a lasolucin de problemas.
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
Gua Prctica MatLAB
***Metodo de la Biseccin
f(x)= 0.5*exp(x/3)-sin(x)
x1= 0.25
x2= 1
Tolerancia= 0.0001
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
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 .
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
Gua Prctica MatLAB
Ejemplo:
El factor de friccin para los fluidos turbulentos en una tubera est dado por:
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
De la grfica anterior podemos ver que la funcin gcumple las condiciones del TeoremaFundamental
de Punto Fijo (dnde y por qu?). Para emplear el mtodo tomaremos lamisma tolerancia para la
distancia entre las aproximaciones y emplearemos una funcinde punto fijo para MATLAB que seha
creadoen el editor por el usuario de nombre met_puntofijo.m, cuyo cdigo se encuentra en el CD.
Si aplicamos esta funcin obtendremos lo siguiente:
>>met_puntofijo('1.14-2*log10*(0.025+3.1167*10^(-4))',1,0.000001)
it.
x g(x)
0
1.0000000000 1.0893766600
1
1.0893766600 1.0848521150
2
1.0848521150 1.0850811625
3
1.0850811625 1.0850695674
4
1.0850695674 1.0850701544
Mtodo de Newton-Rapson
Mtodo de Newton-Rapson
De la figura podemos ver que:
O lo que es lo mismo:
Que es equivalente a:
139
Captulo 8
Ejemplo:
Calcule las 3 races de la siguiente ecuacin no lineal: , para un valor inicial
de y tolerancia de .
Solucin:
Aplicando el script met_newton.m que se encuentra en el CD, obtenemos lo siguiente:
***Metodo de Newtn-Cotes
f(x)= pi*sin(2*x)+exp(-x/2)*cos(x)
x= 3.5
Tolerancia= 0.0001
Raiz= 3.174280
140
Gua Prctica MatLAB
Mtodo de la secante
O lo que es lo mismo,
141
Captulo 8
Ejemplo:
Resolviendo el ejemplo anterior, teniendo en cuenta que inicialmente , aplicando el script
met_secante.m que se encuentra en el disco, tendremos lo siguiente:
***Metodo de la Secante***
f(x)= pi*sin(2*x)+exp(-x/2)*cos(x)
x= 3.5
xant= 2.5
Tolerancia= 0.0001
Raiz= 3.174149
142
Gua Prctica MatLAB
(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:
Tomemos :
144
Gua Prctica MatLAB
Para demostrar estos resultados, nos ayudaremos del archivo script newtonnl.m, que ejecutando en la
ventana de comandos e ingresando lo requerido por el programa nos mostrar lo siguiente:
>> newtonnl
Ejercicios propuestos
1. Encuentre una raz positiva de , que sea exacta hasta la segunda cifra
significativa.
2. Encuentre una 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
146
9
Captulo
Integracin
Los mtodos de integracin numrica nos permiten integrar funciones que estn definidas
analticamente o de las que slo conocemos su tabla en un nmero finito de puntos.
Considerando el siguiente caso:
Dada una funcin se desea calcular la integral definida:
(1)
Para valores dados de y .
Todos los mtodos que veremos se basan en evaluar la funcin para valores de x y aproximar el
rea bajo la curva mediante estos puntos. El mtodo ms sencillo consiste en aproximar el rea bajo
la curva mediante rectngulos, como se muestra en la figura siguiente:
Si asumimos que la funcin va ser evaluada en puntos uniformemente espaciados, es decir que
es constante para toda , entonces podemos escribir como:
147
Captulo 9
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
Gua Prctica MatLAB
for k=2:n
An=An+2*y(k);
end
A=(h/2)*(y(1)+y(n+1)+An);
fprintf('Area=%7.4f\n\n',A)
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
Donde le hemos llamado R(1,2) al valor estimado. Ahora, supongamos que obtenemos laintegral de
para h3 = h/4, llammosle R(3,1). Podemos calcular un valor estimado dela misma manera,
obteniendo que:
Ahora, podemos obtener una mejor estimacin del valor de la integral utilizando R(1, 2) y R(2, 2)
de la siguiente manera:
149
Captulo 9
Los valores de R pueden ordenarse en una tabla al estilo de diferencias divididas como se muestra
a continuacin:
R(1,1) R(1,2) R(1,3) R(1,4) R(1,5)
R(2,1) R(2,2) R(2,3) R(2,4)
R(3,1) R(3,2) R(3,3)
R(4,1) R(4,2)
R(5,1)
El algoritmo contina evaluando valores de R(i,1) hasta que la diferencia del valor absoluto entre
las ltimas dos estimaciones de mayor orden obtenidas sea menor que una tolerancia que escoge
el usuario.
El Mtodo de Romberg se utiliza junto con el mtodo de trapecios para obtener una buena aproximacin.
Ejemplo:
Con el script Metodo_Romberg.m, que se encuentra en el disco, podemos calcular la integral anterior,
cuyo resultado luego de ejecutarlo en la ventana de comandos mostramos:
f(x)=sin(x)
Extremo Inferior
a=0
Extremo Superior
b=pi
Cifras de Aproximacion
n=4
An =
0.0000 0 0 0
1.5708 2.0944 0 0
1.8961 2.0046 1.9986 0
1.9742 2.0003 2.0000 2.0000
Integral:
I= 2.000006
El mtodo de Simpson 1/3 aproxima el rea bajo la curva de f(x) mediante parbolas, como se
muestra en la figura siguiente:
150
Gua Prctica MatLAB
Se hace pasar un polinomio de segundo orden por cada tres puntos. El polinomio definido por los
puntos xi1 , xi , y xi+1 puede obtener mediante el polinomio de interpolacin de Newton:
Donde:
Ntese que los coeficientes a1, a2 y a3 varan de segmento a segmento y, por lo tanto, que el
polinomio P2(x) es diferente para cada intervalo de tres puntos.
Para simplificar el clculo del rea bajo la curva en el intervalo de xi1 a xi+1 , esto es Ai , se traslada
la curva a x=0 como se muestra en la figura siguiente:
151
Captulo 9
Ejemplo:
Utilizando el mtodo de simpson 1/3 calcular la siguiente integral:
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:
f(x)= x^5
a= 0
b= 1
#Cifras Signif Exac.= 4
152
Gua Prctica MatLAB
Funciones de Cuadratura
MATLAB cuenta con dos funciones de cuadratura para realizar integracin numrica de funciones:
quad y quad8. La primera utiliza una forma adaptativa de la regla de Simpson y la segunda usa la
regla de Newton-Cotes adaptativas de 8 paneles; esta ltima es la mejor para manejar funciones con
cierto tipo de singularidades, pero eso s, ambos exhiben un mensaje de advertencia si detectan una
singularidad, devolviendo de todos modos una estimacin de la integral.
Las formas ms sencillas de estas dos funciones requieren tres argumentos. El primero es el
nombre (entre apstrofos) del m-file funcin que devuelve un vector de valores de f(x) cuando se
le proporciona un vector de valores de entradas. La funcin puede ser una creada por el usuario o la
que est definida en el programa, el segundo y tercer elemento son los lmites de integracin a y b.
A continuacin mostramos la sintaxis de estos:
var = quad('nombre_funcion',a,b)
var = quad8('nombre_funcion',a,b)
Ejemplo:
Calcular la integral de:
Solucin:
Analticamente el resultado es el siguiente:
A fin de comparar qu tanta aproximacin tiene el resultado de las funciones de cuadratura, usamos
el siguiente script de nombre cuadrat.m
a=input('Extremo Inferior: ');
b=input('Extremo Superior: ');
I=(2/3)*(b^1.5-a^1.5);
Iq=quad('sqrt',a,b);
Iq8=quad('sqrt',a,b),
Iq8 =
7.4536
Analitico= 7.453560
Numerico: 7.453556 7.453556
153
Captulo 9
Ejercicio:
Un sistema de tubera fluye petrleo, donde la friccin en la tubera origina un perfil de velocidades en
el petrleo al fluir. El petrleo que est en contacto con las paredes no se est moviendo, mientras
que el petrleo que est en el centro del flujo se est moviendo con velocidad mxima:
y cuya ecuacin se describe a continuacin:
Entonces la velocidad media en el tubo es la integral del rea de perfil de velocidad,lo cual se
demuestra que es:
154
10
Captulo
Solucin de Ecuaciones
Diferenciales Ordinarias
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
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:
dy=y/10;
for k=1:length(h)
[t,y]=met_Euler(y0,t0,tf,h(k));
plot(t,y)
grid on
hold on
end
te=t0:0.1:tf;
ye=1000*exp(te/10);
plot(te,ye,'-r')
legend('h=1','h=0.5','h=0.1','Exacta')
hold off
156
Gua Prctica MatLAB
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
Gua Prctica MatLAB
Ejercicio:
Utilizando el mtodo de Euler, solucione numricamente la siguiente ecuacin:
De a , 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:
Implementando una funcin de nombre sol_RK4.m en MATLAb que resuelva dicho algoritmo, el
cdigo ser:
% Metodo de Runge Kutta 4
function [t,y]=sol_RK4(f,y0,t0,tf,h)
% f: es una funcion referencial
fcn=f; t(1)=t0; y(1)=y0;
k=1;
while t(k)<tf
t(k+1)=t0+k*h;
K1=fcn(t(k),y(k));
K2=fcn(t(k)+h/2,y(k)+0.5*h*K1);
K3=fcn(t(k)+h/2,y(k)+0.5*h*K2);
K4=fcn(t(k+1)+h,y(k)+h*K3);
y(k+1)=y(k)+(h/6)*(K1+2*K2+2*K3+K4);
k=k+1;
end
159
Captulo 10
Resolviendo el ltimo ejemplo con este mtodo y realizando las comparaciones con los mtodos
anteriores. El script sol3_EDOS.m, tendr las siguientes instrucciones:
t0=1.0610329; tf=3; y0=1.0610329;
h=0.01;
f=@(t,y) -200*(t^-3)*sin(10/t)-1000*(t^-4)*cos(10/t);
[t1,y1]=met_Euler(y0,t0,tf,h);
[t2,y2]=met_EulerMOD(y0,t0,tf,h);
[t3,y3]=met_RK4(f,y0,t0,tf,h);
te=t0:0.1:tf;
ye=100*(te.^-2).*sin(10./te);
plot(t1,y1,t2,y2,t3,y3,te,ye)
grid on
title('h=0.001','fontsize',14)
legend('Euler','Euler Modificado','RK4','Exacta')
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)
dy=2*t.*(cos(t)).^2
plot(t1,y1,t2,y2)
grid on
legend('RK23','RK45')
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
dv=3-0.000062*v.^2;
162
Gua Prctica MatLAB
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)
163
Captulo 10
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 :
Donde
164
Gua Prctica MatLAB
, 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:
', adems:
166
Gua Prctica MatLAB
, donde:
167
Impreso en los Talleres Grficos de
Surquillo
719 9700 719 9701
Marzo 2012