Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
TACAMBARO
TAREA:
UNIDAD 1, 2 Y 3
GRUPO: 4B
>>quit
En Macintosh o Windows, haga clic en el icono de MATLAB o de STUDENT
MATLAB.
El procedimiento para salir de MATLAB es similar al que se sigue para salir de
cualquier otra aplicacin en Macintosh o Windows.
Ayuda: Si no entiende bien el signicado de un comando, teclee
nombre del comando en cuestin. El comando
help
help
y el
concisa pero precisa de los comandos; tal vez no resulte til para los principiantes,
pero ser uno de los comandos que utilice con mayor frecuencia. Por ejemplo, he
aqu una traduccin de las respuestas a help quit y a help help:
>>help quit
QUIT Terminar MATLAB.
QUIT termina MATLAB.
>>he1p help
HELP Documentacin en lnea.
HELP, sin ms, presenta una lista de todos los temas de ayuda primarios. Cada tema
primario corresponde a un nombre de directorio en MATLABPATH.
HELP tema proporciona ayuda sobre el tema especificado. El tema puede ser el nombre
de un comando o de un directorio; en el primer caso, HELP exhibe informacin acerca de
ese comando; en el segundo caso, HELP muestra la Tabla de Contenido del directorio
especificado.
No es necesario proporcionar el nombre de camino completo del directorio; basta con el
ltimo componente o algunos de los ltimos componentes.
Por ejemplo, tanto help general" y "help matlab/general" exhiben la Tabla de Contenido
del directorio toolbox/matlab/general.
LOOKFOR XYZ busca la cadena XYZ en la primera lnea de comentario del texto de
HELP de todos los archivos M que se encuentren en MATLABPATH. Para todos los
archivos en los que se encuentra la cadena, LOOKFOR exhibir las lneas en las que se
encontr.
MORE ON hace que HELP haga una pausa despus de cada pantalla si el texto de ayuda
ocupa varias pantallas.
Versin: Lo primero que el usuario debe saber acerca del software de
MATLAB es qu versin est usando. Para obtener esta informacin, teclee
versin.
Qu: El comando
what
nombredirectorio
en el
especicar el nombre completo de la ruta del directorio; basta con el o los ltimos
componentes. Por ejemplo, tanto what general como what matlab/ general listan los
archivos M- del directorio tool-box/matlab/ general.
Quin: El comando
who
variable;
who
Ans=
1.0e+03 *
1.9950 0.0030 0.0050 0.0150 0 .0140 0.0091
El primer nmero, 1.0e+ 03, es un multiplicador; los nmeros de
la segunda lnea
fix (clock).
La
respuesta es
ans =
1995
15
19
56
Lo que indica que la fecha fue el ao 1995, tercer mes, quinto da, 15 horas, 19
minutos y 56 segundos, aproximadamente seis minutos despus de que se
imprimi el primer ejemplo de clock. Podemos medir con clock el tiempo que tarda
una ejecucin. Por ejemplo, asigne
t_1=clock
t_0=clock
tiempo transcurrido.
El comando date proporciona informacin similar, pero en un formato ms breve:
ans =
5 -Mar 95
path imprime la ruta de bsqueda vigente de MATLAB. El
comando p = path devuelve una cadena p que contiene la ruta. El comando path
(p0) cambia la ruta a p0, que es una cadena que contiene la nueva nata. El
comando path (p1, p2) cambia la ruta a la concatenacin de las dos cadenas de
ruta p1 y p2. Por tanto, path (path, p3) anexar un directorio nuevo p3 a la ruta
vigente y path (p3, path) antepondr una ruta nueva.
Camino: El comando
getenv (MATLABPATH)
MAT-LAB vigentes.
diary on
Diario: El comando
diary y
diary off termina la escritura. Si ya existe el archivo diary, las salidas de la pantalla
se anexarn a ese archivo. Se puede especicar un nombre de archivo distinto de
diary escribindolo despus de la palabra diary. Si no se incluyen las palabras on u
off,
el comando
diary
diary on
diary off.
El archivo puede
MATLAB. Con este signo, se tiene acceso al directorio fuera de MATLAB. Por
ejemplo, suponga que abri MATLAB desde un shell de Unix; entonces, podr
emitir un comando de Unix desde dentro de MATLAB escribiendo dicho comando
despus del signo de escape. Por ejemplo, es posible abrir desde MATLAB
software de edicin de textos como el editor vi tecleando !vi nombrearchivo.
Podemos utilizar el escape de fonna anloga en una PC para los comandos de
DOS, o incluso en una Mac para un nmero limitado de comandos. Por ejemplo,
podemos dar formato a un disquete desde MATLAB en una PC con !format a:. Sin
embargo, la ejecucin de programas mediante este mecanismo, sobre todo si se
trata de software grco o de comunicaciones, puede echar a perder el entorno de
computacin.
Demostracin: El comando
demo
1.2 CALCULOS
Clculos con una sola variable: Cuando se abre una ventana de comandos,
aparece la indicacin >> en la esquina superior izquierda de la ventana. Podemos
escribir cualquier comando adelante de la indicacin. En nuestras explicaciones de
los comandos, omitiremos la indicacin por sencillez.
Como ejemplo sencillo, evaluemos:
Volumen =
Los comandos que debemos teclear son:
Listado 1.1a
r = 2;
vol = (4/3)*pi*r 3;
Donde pi = : en MATLAB. Cada linea se teclea adelante de la indicacin >> y se
oprime la tecla return (o intro) al nal de la lnea. Observe que en el guin anterior
cada lnea es un comando y termina con un signo de punto y coma. El circunejo
despus de r es el operador de exponente.
Cuando trabajamos en la ventana de comandos, la computadora calcula la
respuesta de cada comando inmediatamente despus de pulsarse la tecla return.
Por tanto, el valor de vol ya est en la computadora; cmo podemos hacer que
aparezca en la pantalla?
La forma ms fcil de exhibir el resultado es teclear vol y pulsar return. La
computadora exhibir
vol =
33.510
Otra forma de imprimir el valor de vol es omitir el signo de punto y coma al nal del
segundo comando:
Listado 1.1b
r=2;
vol = (4/3) *pi*r 3
Si falta el punto y coma, el resultado se imprimir inmediatamente despus de
calcularse. Sin embargo, como casi nunca resulta cmodo ir imprimiendo todos los
resultados, por lo general se coloca un punto y coma despus de cada comando.
Podemos escribir varios comandos en una misma lnea separndolas con signos
de punto y coma. Si necesita imprimir los resultados de cada comando que se
ejecute, separe los comandos con comas y termine la lnea con o sin una coma.
Por ejemplo, si escribe
r = 2, vol = (4/3)*pi*r 3
r = 2; vol = (4/3)*pi*r 3;
no se imprimirn resultados.
Es posible dividir un comando largo en varias lneas. En Fortran, esto se hace con
una marca de continuacin en la columna 6. En MATLAB, la marca de
continuacin es y se coloca al nal de la lnea que se desea continuar; por
ejemplo,
Listado 1.2
r=2;
vol = (4/3) *3 . 14159...
*r 3 ;
La indicacin > no aparecer en la lnea que siga a la marca de continuacin.
Operadores aritmticos: Los operadores aritmticos como +, -, * y / son los
mismos que los de lenguajes de programacin tradicionales como Fortran y,
respectivamente, ms, menos, multiplicar y dividir. MATLAB emplea un operador
no tradicional, \, que puede llamarse divisin inversa. Este operador produce el
recproco de la divisin; o sea, a \ b produce b / a. Por ejemplo,
c = 3\1
c=
0.3333
No es conveniente que los lectores utilicen este operador en clculos ordinarios,
pero adquirir importancia en la unidad 3 cuando tratemos el lgebra lineal.
Enunciado if: El enunciado
por ejemplo,
Listado 1.3
r=2;
if r>0, vol = (4/3) * 3.14159 * r
end
3;
Obsrvese tambin que al escribir el guin anterior la indicacin > no aparece sino
hasta despus de teclearse end. Si el enunciado matemtico requiere un igual
despus de if, utilice ==, como en el lenguaje C; por ejemplo,
Listado 1.4
r=2;
if r==2, vol = (4/3) * pi * r
end
El operador diferente de se escribe
3;
=; por ejemplo,
Listado 1.5
r = 2;
if r = 3, vol = (4/3) * pi * r 3;
end
Los operadores mayor que, menor que, igual o mayor que e igual o menor que
son, respectivamente,
>
<
>=
<=
Los enunciados lgicos
and
or
se denotan con
&
y l, respectivamente. Por
Desde luego, el
seif
Exhibicin: La orden
disp
ventana de comandos sin tener que especicar un nombre de variable; as, puede
servir para exhibir mensajes o datos en la pantalla. Por ejemplo, tanto disp (pi)
X=
9
Lo que signica que se acept la variable. En cambio, si se prueba con
end=4
como
sin
cos
sin= 3;
cos = sin 2;
sin
cos
clear o se
abandone MATLAB.
Si aparece un mensaje de error relacionado con un conicto, es importante que el
lector investigue qu lo caus.
Es tradicional utilizar los smbolos i, j, k, I, m y n como variables enteras o
ndices. Al mismo tiempo, i y j se emplean para denotar el valor imaginario unitario
. En MATLAB, i y j se reservan para el valor imaginario unitario; por tanto, si
un clculo incluye varias variables complejas es aconsejable evitar el uso de i y j
como variables definitivas por el usuario, si es posible.
En la tabla 1.1 se presentan ejemplos de nombres de variable reservados que
tienen signicado especial. Se puede vericar la existencia de una variable o un
archivo con el comando exist.
for / end,
calculemos el volumen de
Listado 1.7
for r=1:5
vol=(4/3) * pi * r^3
disp ( [r, vol ] )
end
Los clculos del ciclo no comenzarn hasta que se teclee end y se pulse la tecla
return (intro). El enunciado disp( [r , vol] ) imprimir los valores de r y vol en una
lnea cada vez que se calcule vol. No es necesario un signo de punto y coma
despus de for r=1 : 5 ni de end.
Otra forma de escribir un ciclo consiste en utilizar while /end; por ejemplo,
Listado 1.8
r=0;
while r < 5
r = r+1;
Vol = (4/3) *pi*1 ^ 3;
disp ( [r, vol])
end
El ndice del ciclo puede decrementarse as:
for r =5 : - 1 : 1
vol = (4/3) * pi * 1 ^3;
disp ( [r, vol])
end
En este ejemplo, el -1 entre los operadores de dos puntos es el decremento del
parmetro r despus de cada ciclo.
Podemos escribir ciclos dobles y triples; por ejemplo,
Listado 1.9
for r= 1 : 5
for s= 1 : r
vol = (4/3) * pi * (r^3 - s^3);
disp( [r, vol)
end
end
Formato: Por omisin, los nmeros se exhiben con cinco dgitos:
pi
ans =
3 . 1416
Sin embargo, los mismos dgitos pueden exhibirse con 16 dgitos si se emite la
orden format long; Por ejemplo,
format long
pi
ans=
3.141592653589793
while 1
.
.
if x > xlimit, break; end
.
.
end
Cmo borrar variables: Al ejecutarse los comandos, MATLAB memoriza las
variables utilizadas. Sus valores permanecen en la memoria hasta que se sale de
MATLAB o hasta que se borran las variables, lo cual se hace con el comando clear.
Si slo se desea borrar algunas variables, sus nombres se indican despus de la
palabra clear; por ejemplo,
clear x y z
Cmo borrar la ventana de comandos: Si desea borrar la ventana, utilice el
comando
clc
z = input(Teclee el radio:)
La parte
Teclee el radio:
Cuando se teclee el valor del radio y se pulse la tecla return (intro), el dato se
guardar en z. Tambin es posible introducir cadenas desde el teclado. Un
enunciado bsico sera:
%12. 5f
es el formato y es similar a
formato_e: l.23452e+04
Si se escriben consecutivamente dos enunciados de impresin sin
\n
en el
formato_f: 93
Si se desea imprimir varios nmeros en una misma lnea, puede utilizarse varias
veces fprintf sin \n, excepto en el ltimo enunciado.
Escritura en un archivo especco: Es posible utilizar el enunciado
fprintf
para escribir salidas con formato en un archivo. Para ello, se incluye el nombre del
archivo en el argumento; por ejemplo,
archivo_x.
Si no existe el archivo, se
fopen
fclose.
Si desea
ans =
0. 2
Una forma equivalente de denir la misma x es
for i=1:6
x(i) = (i-1)*0.1;
end
El tamao de un vector no tiene que declararse previamente, pues se ajusta
automticamente. El nmero de elementos de x puede incrementarse deniendo
elementos adicionales, por ejemplo,
x (7 ) = 0.6 ;
Otra forma de escribir una variable de arreglo de la con un incremento o
decremento jo es:
x = 2 = -0 . 4 = -2
que produce
z=
0
0. 1
0. 2
0. 3
0. 4
0. 5
Si se dene un solo elemento de un arreglo c, por ejemplo,
c ( 8) = 11 ;
se supondr c (i) = 0 para i=1 hasta 7. Por tanto, si teclea c como comando obtendr
C=
0 0 0 0 0 0 0 11
Cuando y y x tienen la misma longitud y la misma forma (la o columna), los
vectores y y x se pueden sumar, restar, multiplicar y dividir empleando los
operadores aritmticos de arreglos:
z=x+y
z=xey
z=x.*y
z=x./y
que equivalen respectivamente a
Listado 1.12
for i=1:6; z(i) = x(i) + y(i); end
for i=1:6; z(i) =x(i) -y(i); end
for i=1:6; z(i) = x(i) *y(i); end
for i=1:6; z(i) = x8i) /y(i); end
Las reglas para la suma y la resta son las mismas que para los vectores en el
lgebra lineal.
En cambio, .* y ./ son operadores nombrados para la multiplicacin y la divisin
de arreglos, respectivamente, y son distintos de la multiplicacin y divisin de
matrices y vectores. Si se omite el punto de .* o ./, el signicado cambia
totalmente.
El operador de potenciacin de arreglos se puede ilustrar con
g=z.^1.2;
donde z es un vector de longitud 6, se coloca un punto antes del operador ^ y g se
convierte en un vector de la misma longitud. El enunciado anterior equivale a
x=
2 3
El comando que sigue anexa 5 a x y hace que su longitud sea 3:
x = [x , 5]
Lo que devuelve
x=
2 3 5
Podemos anexar un nmero, un vector o varios vectores a un vector de columna.
Suponga que y es un vector de columna,
y=
2
3
entonces
y = [y ; 7]
produce
y=
2
3
7
Aqu, 7 se aade al nal del vector de columna. Observe que se utiliza un signo de
punto y coma para anexar a un vector de columna. Tambin se puede anteponer
un elemento a un vector; por ejemplo, x = [9 , x] produce
x=
9 2 3 5
donde x del lado derecho se deni previamente. De forma similar,
[-1 ; y] produce
y=
-1
2
3
7
Un procedimiento inverso consiste en extraer una parte de un vector. Con la
anterior,
w = y (3 : 4)
dene a w que equivale al tercer y cuarto elementos de y, a saber:
w=
3
7
Si no recuerda el tamao de un vector, pregntelo a la computadora. Para un
vector
x = [9 , 2 , 3 , 5]
la consulta
length (x)
recibe la respuesta
ans =
4
La respuesta es la misma para un arreglo de columna. Denamos
y = *9, 2 ,3+;
entonces, length (y) devolver ans = 3. Por otro lado, si adems de la longitud
se desea saber si el vector es de columna o de la, se debe usar
ans =
1
v = * g , 1 , a, c , i , a , r]
La variable v puede convertirse en una cadena de columna con
v = v
que es
g
l
a
c
i
a
r
Listado 1.13
m(1 , 1)=0.l;
m(1 , 2)=0.2;
m(1 , 3)=0.3;
m(2 , 1)=0.4;
m (2 , 2 ) =0.5;
m ( 2 , 3 ) =0.6;
m (3 , 1 ) =0.7;
m(3 , 2)=0.8;
m(3 , 3)=0.9;
Si tecleamos m como un comando obtenemos
m=
0.1000 0.2000 0.3000
0.4000 0.5000 0.6000
0.7000 0.8000 0.9000
Podemos expresar una columna o una la completa de un arreglo bidimensional
empleando un signo de dos puntos. Por ejemplo, m (1 , : ) y m ( : , 3) son la primera
la de
Por ejemplo,
c (1 , :) = m( 3 , :);
c (2 , :) = m(2 , :);
c (3 , :) = m(1 , :);
producen
c=
0.7000 0.8000 0.9000
0.4000 0.5000 0.6000
Listado 1.14a
c=a+b.
c=a-b
c = a .* b
c = a ./ b
Aqu, a y b son arreglos bidimensionales del mismo tamao. Los enunciados
anteriores equivalen a, respectivamente,
Listado 1.14b
for i=1 : 3
for j=1 : 3
c(i , j) = a(i , j) + b(i , j );
end
end
for i=1 : 3
for j=1 : 3
c(i , j) = a(i , j) - b(i , j );
end
end
for i=1 : 3
for j=1 : 3
c(i , j) = a(i , j) * b(i , j );
end
end
for i=1 : 3
for j=1 : 3
c(i , j) = a(i , j) / b(i , j );
end
end
Observe que las expresiones del listado 1.14a son mucho ms compactas y claras
que las del listado 1.14b.
El enunciado con el operador de potenciacin de arreglos,
g=a.^3
equivale a
for i=1 : 3
for j=1 : 3
g(i , j) = a (i , j) ^ 3;
end
end
Los vectores de columna y los de la son casos especiales de matrices; por tanto,
los operadores de arreglos funcionan igual con los vectores que con las matrices.
El empleo de los operadores aritmticos de arreglos tiene dos ventajas. En primer
lugar, los programas son ms cortos. En segundo lugar, la eciencia
computacional de MATLAB es mayor con la forma corta que cuando se escribe lo
mismo empleando ciclos.
Enunciados
if
tamao:
a = ' equidna
b = tapir
b = 'albatross
d = ' petrel
'
'
'
'
t1 = 'digitalis'
t2 = 'nicotiana'
t3 = 'basilicum'
t4 = ' lychnis'
t5 = ' chrysantemum'
Entonces, podemos organizar las variables en una sola matriz de cadenas con
s = str2mat ( t1 , t2 , t3 , t4 , t5)
La primera la de s se convierte en t1, la segunda en t2, y as sucesivamente, con
longitudes idnticas porque se aaden espacios en blanco a las cadenas ms
cortas.
1.5 FUNCIONES MATEMATICAS EN SOFTWARE
Al igual que otros lenguajes de programacin, MATLAB tiene numerosas
funciones matemticas, desde las elementales hasta las de alto nivel. Las
funciones elementales pueden agruparse en tres categoras:
cos ( 2 + 3 * i )
donde i es el numero imaginario unitario, equivalente a la raz cuadrada de -1. La
respuesta es
ans =
-4.1896 - 9.l092i
En otro ejemplo, consideremos la funcin arco
coseno, que es el inverso de la funcin coseno
denido por
y = acos(x) = cos1(x)
El comando
acos (0 . 5)
produce
ans=
1.0472
argumento x
de
<x<
acos(x)
Acos(3)
entonces
ans=
0 + 1 . 7627 i
Argumentos de arreglo: La mayor parte de las funciones de MATLAB puede
aceptar vectores y matrices como argumentos. Por ejemplo, si
x=
1 2 3
9 8 7
entonces sin (x) producir
ans =
0.8415 0.9093 0.1411
0.4121 0.9894 0.6570
que es una matriz del mismo tamao que x. El clculo realizado equivale a
Listado 1.18
for i=1 : 2
for j =1 : 3
x(i , j) = sin( x ( i , j))
end
end
Si
sin (x)
se convierte en un arreglo de
es una matriz, el
sort( [ 2 1 5 ] )
ans =
1 2 5
sort ( [2 1 , 5)
ans =
l
2
5
Sort ( [ 9 1 5 ; 2 8 4 ] )
ans =
2 1 4
9 8 5
Sumatoria: sum (x) calcula la sumatoria de los elementos de un vector o matriz x.
Para los vectores tanto de la como de columna, sum calcula el total de los
elementos. Si x es una matriz, se calcula la sumatoria de cada columna y se
devuelve un vector de la formado por las sumatorias de todas las columnas. A
continuacin damos unos cuantos ejemplos
sum ( [ 2 1 5] )
ans=
8
sum( [ 2 1 5} ' )
ans =
8
sum([ 2 1 5 ; 9 8 5 ])
ans =
11 9 10
Mximo y mnimo:
max (x)
min (x)
sort
sum.)
Nmeros aleatorios: Podemos generar nmeros aleatorios con
bsica de la funcin es
rand (n),
donde
rand. La forma
n = 1,
invoca
rand
esfera
como un
comando; incluso puede ejecutarse desde otro archivo M incluyendo esfera en ese
archivo. Otra forma de ejecutar el archivo en Macintosh es hacer clic en SAVE and
on, los enunciados se exhibirn. De este modo, el usuario puede ver cul parte del
archivo M se est ejecutando. Para desactivar el eco, teclee echo of f.
Enunciados de comentario: El signo
Ejemplo 1.1
Los nmeros aleatorios pueden servir para crear juegos. El enunciado
genera un nmero aleatorio entre
x=rand (1)
c=clock
asigna a
el ao.
El siguiente archivo M determina una carta cada vez que se ejecuta. El juego se
repite respondiendo a la solicitud con r y termina si se teclea cualquier letra distinta
de r. Este archivo M se guarda con el nombre List1_19 . m, as que puede
ejecutarse desde la ventana de comandos tecleando
Listado 1.19
List1_19.
c=clock;
k=c(2)*c(3)*c(4)*c(5)*c(6);
rand ( ' seed ' , k )
for k=1 : 2 0
n = ceil (13 * rand (1) ) ;
fprintf ( Nmero de carta sacada: % 3.0 f \ n , n)
disp ( )
disp ( ' Teclee r y pulse Return para repetir ')
r = input ( ' o cualquier otra letra para terminar ' , ' s ' );
if r ~= 'r, break, end
end
1 .8 CM ESCRIBIR FUNCIONES DE USUARIO PROPIAS
Las funciones en MATLAB, que se guardan como archivos M independientes,
equivalen a las subrutinas y funciones de otros lenguajes.
Una funcin que devuelve una sola variable: Consideremos un archivo M de
funcin para la siguiente ecuacin:
( )
Suponiendo que el archivo M se guarda como demof_.m, su guin seria el
siguiente
Listado 1.20
function y = demof_ (x)
y = ( 2 * x. ^ 3 + 7 * x . ^ 2 + 3 * x-1) ./ ( x. ^2 3 * x + 5 * exp (-x) );
Observe que el nombre del archivo M es idntico al nombre de la funcin, que
aparece a la derecha del signo de igual. En el archivo M se utilizan los operadores
aritmticos de arreglos, as que el argumento x puede ser un escalar, un vector o
una matriz. Una vez que se guarda demof_ . m como archivo M, se puede utilizar
desde la ventana de comandos o en otro archivo M. El comando
y = demof_ ( 3)
produce
y=
502 .1384
Si el argumento es una matriz, por ejemplo,
demof_ ( [ 3 , 1 ; 0 , -1 ] )
El resultado tambin es una matriz:
ans =
5 0 2 . 1 3 8 4 -6 8 . 4 9 2 0
-0. 2 0 0 0
0. 0 5 6 8
Funcin que devuelve mltiples variables: Una funcin puede devolver ms
de una variable. Supongamos una funcin que evala la media y la desviacin
estndar de una serie de datos. Para devolver las dos variables utilizamos un
vector en el miembro izquierdo del enunciado de la funcin; por ejemplo,
Listado 1.21
function [media , dvstd] = media_ds (x)
n=length (x) ;
media = sum(x)/n;
dvstd = sqrt(sum(x.^2)/n media.^2);
Para utilizar esta funcin, el miembro derecho del enunciado de llamada tambin
debe ser un vector. El guin anterior debe guardarse como media__ds. m.
Entonces,
x=[ 1 5 3 4 6 5 8 9 2 4 ];
[ m , d ] = media_ds(x)
produce
m=
4.7000
s=
2 . 3685
Funcin que utiliza otra funcin: El argumento de una funcin puede ser el
nombre de otra funcin. Por ejemplo, supongamos una funcin que evala la
media ponderada de una funcin en tres puntos como
( )
( )
( )
donde ( ) es la funcin que se nombrar en el argumento. El siguiente guin
ilustra una funcin f_av . m que calcula la ecuacin 1.7.2:
Listado 1.22
function mp = f _ av ( nombre _ f , a , b , c )
mp = ( feval ( nombre _ f , a ) + 2 * feval ( nombre _ f , b) ...
+ feval(nombre_f)c))/4;
nombre_f (una variable de cadena) es el nombre de la funcin
es la funcin seno, nombre_f ser ' sin . feval (nombre_f, x) es un comando
En el guin anterior,
( ). Si
nombre_f
y se muestra en el listado
1.19.
Solucin
Suponemos que
f_av.m
comando
89 . 8976
El nmero de argumentos de entrada y de salida de
formato de la funcin
nombre__f.
feval
nombre_f
requiere
[ p , q , s] = feval (nombre_ f , u , v , w , z )
Depuracin de archivos M de funcin: La depuracin de archivos M de funcin es
ms dicil que la de archivos M de guin. Una de las causas es que no es posible
ver los valores de las variables tecleando los nombres de las variables a menos
que se utilicen rdenes de depuracin. El mtodo ms bsico pero ecaz para
crear un archivo M de funcin consiste en convertir en comentario el enunciado de
la funcin en la primera lnea colocando % antes de la palabra function y probar el
archivo M como guin. Cuando haya depurado exhaustivamente el archivo M,
reincorpore el enunciado de la funcin.
El empleo de comandos de depuracin slo se recomienda a usuarios avanzados
de MATLAB.
1.9 CMO GUARDAR Y CARGAR DATOS
Guardar y cargar: Si utiliza save slo, as:
save
matlab . mat. La orden
load es el inverso de save y recupera todas las variables guardadas por save.
Se puede especicar el nombre de archivo colocndolo despus de save; por
todas las variables se guardarn en el archivo por omisin
ejemplo,
save nombre_archivo
nombre_archive . mat.
Cuando
load nombre_archivo
Si slo desea guardar ciertas variables, escriba sus nombres despus de
nombre_archivo; por ejemplo,
save nombre_archivo a b c
En este ejemplo, a, b y c se guardan en el archivo llamado nombre_archivo. No
separe nombre_archivo y las variables con una coma. Todas las variables se
guardan en formato binario de doble precisin. Cuando quiera cargar los datos
contenidos en nombre_arichivo.mat teclee
load nombre_archivo
sin nombres de variables; a continuacin se recuperarn a, b y c.
Guardar y cargar en formato ASCII: Se puede utilizar save para escribir datos
en formato ASCII. Los comandos load y save con la opcin ASCII son importantes
porque permiten exportar datos de MATLAB e importarlos en MATLAB.
Si desea utilizar el formato ASCII, agregue -asciio /ascii despus de los nombres de
las variables; por ejemplo,
datos. tmp.
El
x= [ 1 , 2 , 3 , 4]
y = [ -1 , -2 , -3 ]
save dat1.tmp x y -ascii
Si abre el archivo M dat1 . tmp, se ver as:
1 . 0000000e+00 2. 0000000e+00 3 . 0000000e+00 4 . 0000000e+00
-l .0000000e+00
42.0000000e+00
-3 .0000000e+00
El comando load lee un archivo de datos y lo guarda en una variable, pero la carga
de un archivo en formato ASCII no es exactamente el inverso de save en formato
ASCII. La razn es que si bien save en ASCII puede escribir mltiples variables, load
lee todo el archivo de datos y lo coloca en una variable. Adems, el nombre del
archivo se convierte en el nombre de la variable. Por ejemplo, cargamos un
archivo llamado y_dat. e con
load y_dat . e
el contenido se carga en la variable llamada
tanto, el archivo de datos
de datos:
y_dat
y_dat
Se recomienda a los lectores borrar las variables y las ventanas de grcas antes
de iniciar cualquier trabajo de gracacin. Si aun as MATLAB se comporta de
forma extraa, salga por completo de MATLAB y bralo otra vez.
2.1 GRAFICACION SIMPLE
Gracar: Suponga que desea gracar un conjunto de puntos de datos,
(
)
Es necesario preparar y en forma de arreglo idntica, es
decir, convertirlos en arreglos de la o de columna de la misma longitud. Los datos
se gracan con plot. Por ejemplo,
( )
(
)
, se graca
con el listado 2.1
Listado 2.1
x= 0: 0.05:10;
plot, como
x= (0:0.05:10);
y = sin(x).*exp (-0. 4*x);
plot (x, y)
xlabel ('x') ; y1abel(y' )
Los dos guiones anteriores producen la misma grca, que se muestra en la
gura 2.1. Los rtulos de los ejes se imprimen mediante los comandos xlabel y
ylabel, que se explicarn mayor detalle posteriormente. La gura 2.2 se graca con
el listado 2.3 que conecta una de puntos en un plano complejo.
Listado 2.3
Si desea gracar con un solo tipo de marca, coloque el smbolo de la marca como
una cadena despus de las coordenadas en los argumentos de plot. La grca
producida por el listado 2.4 se muestra en la gura 2.3.
Listado 2.4
x = (0:0.4:l0)';
y=sin(x) .*exp (0 . 4*x);
plot (x,y, ' +')
xlabe1('x'); y1abe1('y')
Si desea gracar una funcin tanto con lneas
como con una marca, grafique dos veces: la
primera con lneas y la segunda slo con marcas. Para gracar de este modo, el
ltimo enunciado del listado 2.4 se cambia a plot (x, y , x, y , + ) . El comando text
sirve para gracar con cualquier marca o letra; sin embargo, la posicin de la
marca puede estar desplazada un poco de la posicin real de punto de datos.
Tipos y colores de lneas: Se dispone de cuatro tipos de lneas:
El tipo de lnea por omisin es el continuo. Si desea gracar con un tipo de lnea
en particular, especique la marca de lnea despus de las coordenadas; por
ejemplo,
plot ( x , y , - -)
Se dispone de los siguientes colores:
Utilice el smbolo del color igual que los tipos de lnea en el argumento de plot; por
Ejemplo,
plot ( x , y , '+g)
graca los datos con marcas + de color verde.
Graficacin de funciones con fplot: Otra forma de gracar funciones
individuales es con fplot (' nombre_f [xmin, xmax] ), donde nombre es el nombre de
la funcin o del archivo M de funcin que se desea gracar y
clf
mientras que cla borra las curvas gracadas y redibuja los ejes.
Funciones implcitas: Si una funcin est en forma implcita, como por
ejemplo
( )
( )
No se puede expresar como en funcin de ni como en funcin de . No
obstante, la curva se puede gracar utilizando contour. En la seccin 2.3
detallaremos este procedimiento.
axis ( ' of f )
Este efecto se cancela con axis ( ' on ' ) .
El mximo y el mnimo de las coordenadas en la grca se pueden especicar con
grid off elimina la retcula. El empleo de grid por s solo activa y desactiva la retcula
alternadamente. El siguiente guin es un ejemplo del empleo de grid on:
Listado 2.5
X = (0:0.2:10)';
y=sin(x) .*exp(O.4*x);
plot (x, y)
grid on
xlabel ('x' ) , ylabel ( y )
(Vase la gura 2.5 producida por el listado 2.5.)
Grcas polares: Podemos gracar una funcin en coordenadas polares con
polar. La gura 2.6 se graca con el listado 2.6.
Listado 2.6
t = 0: .05:pi+.01;
y = sin (3*t) .*exp (0 . 3*t:);
polar (t , y)
title(Grfica polar) y
gr id
Listado 2.7
t= .1 : .1 :3 ;
x= exp(t);
y= exp(t.*sinh(t)) ;
loglog (x,y)
grid
xlabel (x); ylabel (y)
El listado 2.8 produce una grfica semilogaritmica con
en la escala logartmica
Listado 2.8
t = . 1: . 1 : 3;
semilogy (t, exp(t.*t))
grid
xlabel(' t ); ylabel ( 'exp(t. *t) ' );
De forma similar, el listado 2.9 produce una grca semilogartmica con
escala logartmica.
en la
Listado 2.9
t=.1:.lz3;
semilogx (t, exp (t . *t:))
gr i d
xlabel(t') ; ylabel('exp(t.*t)');
Mltiples curvas: Si quiere gracar dos o ms curvas con una sola orden plot,
escriba todos los conjuntos de coordenadas repetidamente en la orden plot:
Listado 2.10
x = 0 : O . O5 : 5 ;
Y = sin (X) i
z = cos (x) ;
p1ot(x,y, x, z)
Listado 2.11
x = 0 : 0 . 05 : 5;
y(1, : ) = sin(x);
y(2, :) = cos(x);
plot (x, y)
Listado 2.12
x = (0:0.05:5) ';
y( : , l) = sin(x);
y( : , 2) = cos(x);
plot (x , y)
Retencin: Hasta aqu hemos gracado todas las curvas en una sola
operacin con un solo comando plot. Sin embargo, a menudo resulta deseable
agregar una curva a una grca que ya se traz. Esta gracacin adicional puede
realizarse con el comando hold on (vase la
gura 2.8).
Listado 2.13
X = 0 : 0 . 05 : 5;
y = sin (x) ;
plot (x , y) ;
hold on
Figura 2.8 dos curvas graficadas con hold on
(listado 2.13)
z = cos (x) ;
plot(x , z , '- - )
xlabel (x ); ylabel ('y(-) , z (- -) ');
hold on, la grca permanece en la pantalla incluso si
se ejecuta otro guin; por tanto, lo prudente es colocar un comando hold of f tanto
Una vez emitido el comando
Listado 2.14
Clear ; clf ; hold off
x = 0 : 0 . 05 : 5;
y = sin (x) ;
plot (x. y)
hold on
z = cos (X)
plot: (x, z)
hold off
Cuando se gracan varias curvas con
hold on,
es recomendable especicar
hold on
una grca que tarda mucho en dibujarse, por la siguiente razn: los comandos
para cambiar parmetros de las guras, como los ejes, el mapa de color, los
ngulos de perspectiva, el eje de color y otros, se pueden modicar despus de
haber gracado una gura.
2.2 CONTORNO DE FUNCIONES BIDIMENSIONALES
Malla: Se puede denir una funcin bidimensional z = z(x,y) con puntos
discretos mediante
(
)
donde
,y
, son puntos en los ejes y en orden
ascendente. Las intersecciones constituyen una retcula cartesiana. Como
ilustracin, consideremos la retcula denida por
(
(
)
)
Listado 2.18
clear, cl f
xa = -2 : . 2 : 2 ;
ya = -2 : . 2 : 2 ;
[x,y] = meshgrid (xa,ya);
z = x .* exp(-x. ^ 2 - y. ^ 2);
mesh (x , y , z)
title ( sta es una gIfica 3D de z =
x * exp (x2 - y"2) ')
xlabel ('x' ); ylabel ( y ); zlabel ( ' z);
meshgrid para crear arreglos bidimensionales, y ,
donde x es un arreglo de las coordenadas de la retcula y y es un arreglo de las
coordenadas . Estos arreglos x y y sirven para calcular el arreglo bidimensional z.
En el listado 2. 1 8 utilizamos
x (j , i) , y (j , i) y z (j , i)
corresponden
/end.
El comando
de
mesh del guin anterior puede sustituirse por mesh (z) . El primer ndice
manual )
Listado 2.19
clear , clc, clf, axis ( ' squane)
xm=-2: .2:2; ym=2: .2:2;
[x, y] = meshgrid (xm, ym);
z = x .* exp(-x.2 - y."2);
El comando contour puede servir para gracar una funcin implcita como
( )
( )
Para gracar la curva, reescribimos la_ ecuacin as:
(
)
( )
( )
y gracamos el contorno de un solo nivel que corresponde a f = 0 (vase la gura
2.15). El siguiente guin ilustra el procedimiento de gracacin:
Listado 2.20
clear , clf
xm = 3:0.2:3; ym = 2:0.2:1;
lx, y] = meshgi: id (xm, yrn);
f = y. 3 + exp(y) e tanh(x);
contour (x,y, f, [t], 0])
xlabel ('x' ); ylabel ('y')
Observe que en el guin anterior el vector
para especicar el nivel del contorno. El nico contorno que nos interesa es el del
nivel 0, pero los niveles de contorno deben estar en forma de vector, por lo que
repetimos el cero.
Grca vectorial: En ocasiones, las cantidades
correspondientes a los puntos de una retcula se
dan en forma vectorial. Por ejemplo, la
distribucin de velocidades e n un ujo de
uido bidimensional se pueden expresar
mediante vectores de velocidad en los
puntos de la retcula. Los vectores
en
esos
puntos
pueden gracarse
con quiver y requieren
dos componentes, uno para la direccin x y otro para la direccin y. Suponga que
estos componentes estn dados por u y v, que son matrices del mismo tamao
que x y y. Entonces, los vectores se gracarn con
quiver (x,y,u,v, s)
donde
Listado 2.21
% trazado de retcula triangular
cleaR: , clf
load cell_da
load point_da
tri_grid(cell_da, point_da, 1.8)
Grfica de contorno en una retcula triangular: Si tenemos una funcin
discreta denida en los puntos nodales de una retcula triangular, podemos trazar
su contomo con tri_cont de FM 2-2 (pgina 79). Para ejecutar este guin
necesitamos dos archivos de datos, cell_da y point_da (los mismos que usamos
en m i_cont), y un archivo de funcin adicional, f_da. La segunda parte de la gura
2.17 ilustra la grca de contorno producida por el listado 2.22 empleando tri_cont.
Listado 2.22
donde
son
ndices de puntos. El sistema de retcula es
una retcula cartesiana si sus lneas son
paralelas a los ejes de las coordenadas
cartesianas. Por otro lado, si la geometra
en cuestin es compleja podemos utilizar
puntos de retcula ajustados a fronteras
curvas, como se ilustra en la gura 2.18.
Una
retcula
as
se
denomina
g_cont de F M 2.3
Listado 2.23
clear , clf
[x, y, f] = tcLdata;
f_max = max (max (f) )
f_1nin = min (min ( f) )
kmax = 2 0;
fOI k=l : kmax
ELV (k) = (k-l) /kmax* (f_maxef_min) *0 9999 + f_min;
end
g_cont (x, y, f, ELV)
O %Para responde: automticamente a la pregunta que hace
g_cont
1 % dem
axis ( [-10, 15, -15, 10])
axis ( ' square)
axi s ( of f ' )
En el guin anterior,
td_data
es un archivo M de
contour
porque la retcula no es
rectangular.
2.4 GRAFICACIN DE MALLA Y DE SUPERFICIES
En esta seccin, estudiaremos los grcos tridimensionales, que se han mejorado
notablemente en la nueva edicin para estudiantes y en las ltimas versiones
profesionales de MATLAB. que ya presentamos a mesh, aqu lo veremos con
mayor detalle.
Grfica de malla de una matriz: La aplicacin ms sencilla de los grcos
tridimensionales es la graficacin de una matriz. Consideremos una matriz de
por . El elemento z(j, i) se considera el valor funcional en
y
en el
plano bidimensional. Denimos una matriz de muestra con
Listado 2.24
clear: , c l f
for i=1 : 4 % corresponde a la direccin
for j=1 :7 % corresponde a la direccin y
z(j,i) = sqrt(i"2 + j2);
end
end
mesh (z)
xlabel ( ' i ' )
ylabel ( ' j ' )
zlabel ( ' z ' )
Entonces,
mesh (z)
produce la grca de malla que se muestra en la gura 2.21.
Color por omisin: En una pantalla a color, las lneas que conectan los
puntos se colorean con el mapa de color por omisin hsv (iniciales en ingls de
matriz, saturacin, valor). Se asigna rojo a los valores tanto mximo como mnimo
de
z (i, j ) . Entre el mnimo el mximo, el mximo el color se determina
linealmente en el orden rojo, amarillo, verde, turquesa, azul, magenta, rojo.
[x.y1 = ginput
[x,y,botn] = gnput
[x,y,botn] = ginput (n)
suponga que se hace clic con el ratn en cierto lugar dentro de una pantalla de
grcos. Entonces, [x , y] = ginput acumular un nmero ilimitado de puntos hasta
que se pulse la tecla return (intro), as que x y y se convertirn en vectores de
longitud igual al nmero de puntos acumulados. [x , y , botn] = ginput es lo mismo
excepto que tambin se registran los nmeros de botn del ratn. Los nmeros de
botn son l, 2 y 3, contando a partir del lado izquierdo del ratn. [x , y , botn] =
ginput (n) acumula n puntos, pero puede suspenderse pulsando la tecla retum.
El listado 2.31 ilustra el empleo de
ginput.
programa espera hasta que se hace clic con el ratn. Si se hace clic con el botn
izquierdo, se imprimir una marca + roja en la posicin del apuntador. De forma
similar, si se acciona el botn del medio o el derecho, se imprimir una marca o
amarilla o una marca * verde, respectivamente. La ejecucin termina si se hace
clic con el ratn cuando el cursor est dentro del cuadro en la esquina inferior
izquierda de la pantalla. La gura 2.35 ilustra las marcas gracadas con el listado
2.31.
Listado 2.31
clear: , clf , hold off
axis( [0, 10, 0, 10] )
hold on
plot([l.2.Z.l.1] , [2.2.3,3,2])
text (1, 1 .6 , Haga clic dentro del cuadro para terminar )
while 1
[x , y , boton] = ginput (l)
if boton=1, plot: (x,y, ' +x ' ) , end
if boton=2 , plot (x,y, ' oy ) , end
B= [
b= (1, 6; 5, 2);
Un vector de columna o de la se puede denir como una matriz de una columna o
una la, respectivamente; por ejemplo,
c = *1 , 2+ ; (vector de la)
d = [1 ; 7] ; (vector de columna)
Podemos transponer una matriz en MATLAB colocando un apstrofo despus de
la matriz; por ejemplo, con
e=b'
la matriz e se convierte en la transpuesta de la matriz b. Una matriz identidad de m
por m se genera con
s = eye (m)
De forma similar, una matriz nula de m por m es
s = zeros (m)
Una matriz nula de m por n se genera con
s = zeros (m, n)
w = ones (m , n)
Si a es una matriz que ya existe,
producen,
mayores detalles sobre los nmeros aleatorios). Una matriz especial, llamada
matriz de Hlbert, se genera con hilb (m) (vase el emplo 3.6). La multiplicacin de
matrices en MATLAB se expresa con el operador de multiplicacin;
por ejemplo,
g=
7
23
2
que corresponde al inciso (a) del ejemplo 3.2. La suma y la resta de matrices es
igual que en el de arreglos bidimensionales.
MATRIZ INVERSA
Ahora que aprendimos a multiplicar matrices tanto mediante clculos manuales
como con MATLAB, podemos estudiar el concepto de matrices inversas. Cuando
dos matrices cuadradas A y B satisfacen
AB=IoBA=1
donde I es la matriz identidad, A y B estn en la relacin inversa; es decir, A es el
inverso de B y B es el inverso de A. Por ejemplo,
A=[
B=[
= [
A = [1 6 ; 5 2] ,
entonces,
B = inv (A)
produce
]
B =[
A*B
ans =
[
B *A
ans =
[
El comando
A1.1x1 +a1,2x2+a1,3x3++a1nxn=y1
A2,1x1 +a2,2x2+a2,3x3+a2,nxn=y2
Am,1x1+am,2x2+am,3x3+am,nxn=ym
donde
son coecientes conocidos, son incgnitas
y; son trminos
conocidos que se denominan trminos no homogneos (o trminos fuente). " Las
ecuaciones lineales anteriores se pueden expresar de forma compacta como
Donde ,
A =[
X=[
y=[
x = A\y
Un mecanismo equivalente es
x = inv (A) *y
Sin embargo, el primer mtodo es ms eciente desde el punto de vista
computacional (el tiempo de cmputo del segundo mtodo en MATLAB es
aproximadamente 50% ms largo que para el primero).
Si la ecuacin se escribe en la forma de la ecuacin 3.4.3, la solucin se obtiene
en MATLAB con
z = y /A'
donde y es un vector de la y z tambin se convierte en un vector de la. Las
siguientes expresiones producen el mismo resultado:
inv (A) *y
A ^ ( -1 ) *y
y ' * inv (A ' )
Los resultados de las primeras dos estn en forma de vector de columna, mientras
que el de la ltima est en forma de vector de la.
Ejemplo 3.4
Utilice MATLAB para obtener la solucin de
Donde
A=[
, Y=[
Solucin
Sea
A = [ 3 2 ; 1 -1 ] ;
Y = [-1 , 1] ';
Entonces,
x = A\y
produce
x=
0 . 2 000
-0 . 8 000
Tambin, si escribimos
z=y'/A'
Obtendremos la misma respuesta en forma de vector de la como
z=
0 . 2000
-0 . 8000
3.3 DETERMINANTES
El determinante es una cantidad importante asociada a una matriz cuadrada. De
hecho, no podemos obtener una solucin nica de un conjunto no homogneo de
ecuaciones lineales si el determinante de la matriz de coecientes es cero. Esto se
debe a que, si por lo menos una ecuacin de un conjunto de ecuaciones lineales
no es linealmente independiente, el determinante es cero. Si el valor del
determinante es extremadamente pequeo o grande, es seal de que hay errores
graves en la solucin de las ecuaciones. El determinante de una matriz tambin
desempea un papel importante cuando se calculan los valores propios de una
matriz.
El determinante de la matriz A se denota por det(A) o
de 2 x 2, el determinante de A se calcula como:
( )
(3.62)
Es fcil memorizar la regla para una matriz de 3 por 3 como la regla del espagueti.
En la gura 3.3, cada una de las tres lneas continuas conecta tres nmeros. Los
productos a lo largo de las lneas continuas tienen signo positivo en la ecuacin
3.6.2. Los productos de los tres nmeros a lo largo de las lneas punteadas tienen
signo negativo en la ecuacin 3.6.2. Sin embargo, la regla del espagueti no puede
extenderse a una matriz dc 4 por 4 o mayor.
Una denicin formal del determinante
de una matriz A de orden n est dada
por
( ) (
)( )
(3.63)
A =[3 , 4 , 1; 0 , 2 , 7; 5 , 1 , 2];
d = det (A)
d=
163
3.4 ELIMINACION DE GAUSS-JORDAN
La eliminacin de GaussJordan es una variacin de la eliminacin de Gauss
mediante la cual se eliminan los nmeros que estn arriba y abajo de un pivote sin
distinguir la eliminacin hacia adelante de la sustitucin hacia atrs. No obstante,
el pivoteo sigue siendo necesario por la misma razn que lo es en la eliminacin
de Gauss.
En la presente seccin ilustraremos primero la resolucin de una ecuacin lineal
por eliminacin de Gauss-Jordan y luego aplicaremos este mtodo a la inversin
de una matriz.
Una ventaja de la eliminacin de Gauss-Jordan es que la explicacin del algoritmo
para calcular el inverso de una matriz se simplica.
Ejemplo 3.10
Resuelva el mismo problema del ejemplo 3.8 por eliminacin de Gauss-Jordan.
Solucin
Comenzamos con la misma matriz aumentada que en el ejemplo 3,8. El
procedimiento para el primer pivoteo es el mismo que se sigui en ese ejemplo,
pero ahora despus del primer pivoteo se normaliza la primera la dividindola
entre el pivote:
a=
1.0000 -2.7857 0.5714 1.7857
-0.0400 0.0400 0.1200 3.0000
-0.2400 1.2400 0.2800
0
A continuacin se eliminan todos los elementos que estn debajo del primer pivote
restando (o sumando) un mltiplo de la primera la:
a=
1.0000 -2.7857 0.5714 1.7857
0 0.0714 0.1429 3.0714
0 0.5714 0.1429 0.4286
El segundo pivote se compara con los elementos que estn abajo. Puesto que la
magnitud del segundo pivote es menor que la del elemento que est abajo, es
necesario pivotear. Luego, la segunda la se divide entre su propio pivote:
a=
a=
l.0000
0
0
0
1.0000
0
40.1250
-0.2500
0.1250
3.8750
0.7500
3.1250
a=
1.0000
0
0
0
1.0000
0
-0.1250 3.8750
40.2500 0.7500
1.0000 25.0000
Los elementos que estn arriba del tercer pivote se eliminan restando (o sumando)
la tercera la multiplicada por el nmero que se va a eliminar. Ahora, la matriz
aumentada es
a=
1.0000
0
0
0
0
1.0000
0
0 1.0000
7.0000
7.0000
25.0000
Aqu, las primeras tres columnas forman una matriz identidad, mientras que la
ltima columna es la solucin.