Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Introduccin a MATLAB
leccin 1
Nociones Generales...............................................2
Mi Primer Programa........................................5
Matrices y vectores...........................................9
El detector de capicas...................................18
Programa 3: una funcin desplazamiento....20
Operaciones elementales con matrices..........21
Programa 4 : rotador plano...........................31
Rotador plano, centro de rotacin flexible...37
Flexibilizacin de argumentos.......................39
Conclusiones....................................................42
Ejercicios.........................................................44
>> q
q=
1
>> Q
>> cos(pi) + 1 / 2
ans =
-0.5000
% el ; suprime la respuesta;
>> q , z
z=
paz y bien
q=
4
z = 25
Vemos entonces que las funciones se escriben con la misma notacin habitual,
sindolo tambien las precedencias de las operaciones elementales. Para un
listado rpido de las funciones elementales bastar teclear en la pantalla >>help
elmat , mientras que si, ya conocido el nombre de la funcin se quiere
informacin especfica de sintaxis y objeto se aplica el comando help sobre tal
nombre; sea por caso la funcin angle:
help angle
% pido ayuda acerca del comando llamado angle
complex elements.
text string and then waits for input from the keyboard.
all other ways it's the same as leaving the semicolon off an
disp(promedio);
Nuestro programa puede ahora ser ejecutado, bastar teclear su nombre para
que se ponga en marcha: >> aceroprom0 con el siguiente resultado de una
corrida.
17-Apr-2003
siendo el resultado =
help aceroprom0
de dos nmeros.
El comando clear nos permite deshacernos de las variables que se han ido
acumulando en nuestra sesin y nos aseguraremos que est operativo utilizando
antes y despus el comando who que nos indique los nombres (no sus valores)
de las mismas.
>> who
ans n2 q z
n1 promedio w
>> clear
>> who
>> u=[1 4 2 1]
% define el vector fila u
u=
1 4 2 1
Los vectores columna pueden obtenerse o bien separando cada elemento por un
punto y coma ; o bien trasponiendo el correspondiente vector fila mediante el
operador trasposicin punto-comilla: . . (Si estamos trabajando con reales
basta el operador comilla que es la trasposicin conjugada).
>> v=[1;0;1;2]
% define el vector columna v
v=
>> v=[1 0 1 2]
v=
[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 10 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 11 de 54
1
0
M=
1 2 3
6 5 4
5 3 1
>> u = -2 : 5
u=
-2 -1 0 1 2 3 4 5
>> v = -2 : 2: 5
v=
-2 0 2 4
>> u= linspace(1,2,5)
u=
5.5
4.5
3.5
2.5
1.5
1
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3
Si en verdad queremos ser nosotros mismos los que tomamos tales decisiones,
pues habr que comunicrselo a matlab mediante instrucciones que hacen a la
creacin de los objetos grficos. Aqu nos limitamos a hacer la observacin
para retomarla en otras lecciones.
5.5
4.5
3.5
2.5
1.5
1
1 1.2 1.4 1.6 1.8 2 2.2 2.4 2.6 2.8 3
>> f (2)
% pedimos el valor de la segunda componente
ans =
>> f ( [1 3 9 10])
ans =
pzen
>> f ( [1:5])
ans =
paz y
% invierte la frase
retrof =
neib y zap
Los siguientes ejemplos se explican por s mismos y nos nsea que se puede
hacer un pegote de matrices para lograr una nueva matriz; esto no es de
extraar, ya que de hecho la matriz ms simple ya escrita fue un pegote de
matrices ( ciertamente de 1 x 1).
>> mf = [f;retrof;f]
mf =
paz y bien
neib y zap
paz y bien
ans =
zap
bien
>> length ( f )
ans =
10
>> size ( f)
ans =
1 10
ans =
3 10
>> M(:,2)
ans =
>> M(1:2,:)
ans =
1 2 3
6 5 4
% columna: la primera de M.
H=
1 2 3 1
6 5 4 6
5 3 1 5
H(2:5)
ans =
6 5 2 5
Si queremos eliminar una fila o columna de una matriz basta asignarle valor
vaco, que se escribe como como un par de corchetes que nada encierran:
H( 1, :) = [ ]
H=
6 5 4 6
5 3 1 5
Como un ejemplo, creamos dos matrices de 2 x 2 para con ellas construir una
matriz de 2 x 2 x 3
A = [ 1 2 ; 3 4] ; B = [ 5 6 ; 7 8];
triple ( : , : , 1) = A ;
triple ( : , : , 2) = B ;
triple ( : , : , 3) = B ;
size(triple)
ans =
2 2 3
triple(:,:,1) =
1 2
3 4
triple(:,:,2) =
5 6
[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 19 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 20 de 54
7 8
triple(:,:,3) =
5 7
6 8
largo = length(frase);
Una corrida del anterior para un usuario que ingresa hola mundo produce el
siguiente panel:
hola mundo
odnum aloh
Se trata de escribir un M-file tal que admita como argumento de entrada una
matriz y devuelva una nueva matriz con las columnas permutadas cclicamente
de modo horario; as por ejemplo, si la matriz original tiene cinco columnas,
las de la transformada se obtiene desplazando cada columna un lugar hacia la
derecha, pasando la quinta a ocupar la primera posicin.
% acerodesp0 ( M )
function z = acerodesp0 (M );
a = size ( M ) ; n= a ( 2 ) ;
z = M ( : , [n , 1: n-1] );
% el paso decisivo, basta examinar que el corchete es un vector
2 1 2 1
4 3 4 3
2 1 3 1
4 2 4 3
A = [ 1 2 ; 3 4] ; B = [ 5 6 ; 7 8];
A^3+2*B^2+A*B-B^3
% a la suma del cubo de A con el doble del cuadrado de B
% y del producto entre ambas le resta el cubo de B.
ans =
-691 -794
-891 -1014
>> A+1
% un escalar puede sumarse a cualquier matriz!
ans =
2 3
4 5
Ahora en cuanto al producto, que sigue las reglas usuales, admite un segundo
operador, el punto asterisco . * que efecta el producto entre cada uno de los
elementos de las matrices (y por tanto exige que las matrices a multiplicarse
tengan la misma dimensin); lo mismo cabe para el . ^
>> C = A .* B, D = A .^ 2
% C es tal que c ( i , j ) = a ( i , j ) b ( i , j )
C=
5 12
21 32
D=
1 4
9 16
14
b=
1 2 3
2 4 6
3 6 9
c=
1 4 9
d=
F=
0.7854 -1.5708
0 3.1416
>> plot ( t, y, y, t) ;
Ahora continuamos con nuestro recorrido por las operaciones sobre matrices
con ... la divisin ! , que no slo se halla definida sino que tambin tiene,
como el producto, diferentes versiones. Comenzamos diciendo lo que sucede
para los escalares (matrices de 1 x 1), donde tenemos dos divisiones, la
divisin a derecha cuyo operador es / segn la cual el comando >> a / b
indica que b divide a a y la divisin a izquierda cuyo operador es \ segn la
>> a = 2 / 3 , b = 2 \ 3
a=
0.66667
b=
1.5
A = [ 1 2 ; 3 4] ; B = [ 5 6 ; 7 8]; C = A \ B , D = B / A
C=
-3 -4
4 5
D=
-1 2
-2 3
a = [ 1 1 ; 1 2 ;1 3;1 4] ; b = [ 1 ; 2 ;1;2]; x = a \ b
% resuelve el sistema incompatible a x = b
x=
0.2
A = [ 1 2 ; 3 4] ; B = [ 5 6 ; 7 8]; C = A ./ B , D = 12 ./ A
C=
0.2 0.33333
0.42857 0.5
D=
12 6
4 3
2.5
1.5
0.5
-0.5
-1
0 1 2 3 4 5 6 7 8 9 10
Un ejemplo ms nos recuerda las singularidades; sea por caso la funcin f(t) el
cociente de u(t) = t 2 3 t + 2 y w(t) = t 2 1 con una discontinuidad evitable
en el punto t0 = 1; representemos las tres funciones en las cercanas de la
singularidad mediante la secuencia de comandos habitual. Podemos observar
en la figura la ausencia de imagen de t0 a travs de f, consecuencia ya advertida
con el mensaje de advertencia de matlab.
t = 0: 0.05 : 2 ; u = t .^ 2 3* t + 2 ; w = t .^2 1 ;
f = u ./ w ; % define f
2.5
w
2 u
f=u/w
1.5
0.5
-0.5
-1
-1.5
-2
0 0.2 0.4 0.6 0.8 1 1.2 1.4 1.6 1.8 2
Matlab tiene una rpida manera de generar matrices especiales entre los que se
hallan los comandos eye, ones, zeros, pascal, magic, rand, randn, diag; los
ejemplos explican por s mismos su funcin y sintaxis.
a=
1 0
0 1
b=
1 1 1
1 1 1
c=
0 0 0 0 0
0 0 0 0 0
d=
1 1 1
1 2 3
1 3 6
e=
2 0
0 3
>> rand (m,n) genera una mxn matriz con elementos entre 0 y 1 elegidos
aleatoriamente con distribucin uniforme, mientras que >> randn (m,n) resulta
en lo mismo, pero con distribucin normal ( 1, 0).
En verdad tenemos todos los elementos para realizarlo, pero siendo el hasta
ahora ms complejo de nuestros programas procuramos asegurarnos de tomar
las decisiones adecuadas antes de iniciar la programacin, y puesto que se nos
sugiere utlizar la funcin fill nos enteraremos mediante un >> help fill de su
sontaxis y probaremos con un ejemplo, como el de colorear de rojo el tringulo
definido por los vrtices P1 = ( 0, 0) , P2 = ( 2, 1) , P3 = ( 1, 2) .
Como se nos pide que nuestra funcin admita como argumento de entrada un
arbitrario polgono nos conviene pensar el carcter de tal argumento y
pareciera natural (desde luego no es la nica opcin) decidir que el polgono
de n lados quedar identificado por una matriz, llammosle A, de 2xn cuya fila
k identifica el vrtice k.
Ahora bien, como la sintaxis es fill (x,y,color) donde x carga las abscisas
mientras que y las ordenadas, deberemos rescatarlas de la matriz A, lo que no
es sencillo por el apredizaje previo: bastar escrbir que x = A ( : , 1), en tanto
que y = A (: , 2) y ya podemos probar cmo funciona con nuestro tringulo.
Ahora el otro punto es que la funcin debe admitir el ngulo de rotacin como
argumento de entrada; puesto que un usuario pensar con facilidad en grados
sexagesimales antes que en radianes, nos ocuparemos de convertirlo en el
cuerpo del programa, de modo que si el usuario ingresa el argumento r habr
[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 35 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 36 de 54
una instruccin del tipo alfa = pi*r /180 , que almacenar en la variable alfa la
rotacin en radianes.
alfa =
0.7854
R=
0.70711 -0.70711
0.70711 0.70711
T = A * R ;
De modo que slo debemos repetir la instruccin original pero ahora para el
polgono T, con el fill alterado el color, esto es
x=T(:,1);y=T(:,2);fill(x,y,'y');
Proceder segn tales pautas puede ahorrar horas de trabajo, puesto que es muy
difcil descubrir errores en un programa algo extenso, y esto es especialmente
verdadero para el mismo autor del programa.
5
La figura obtenida ahora con
4
>>A=[0 0;6 3;1 5;4 -1]; 3
>>acerorota0(A,100);
2
manera, el lazo con que se delimita la figura no tiene porqu ser de Jordan. Es
un recomendable ejercicio observar lo que sucede con distintas secuencias de
los mismos puntos para una dada A.
5
He aqu la figura obtenida; valga
la observacin que en no pocas
4 ocasiones un programa termina
revelndose de mayor alcance
3 que aqul para el cual fue
concebido, una caracterstica
2 propia de la gran flexibilidad de
las funciones matlab; lo cierto es
1 que nuestro programa rotador es
ya una funcin bastante poderosa
0
-1 0 1 2 3 4 5 que permite construir efectivas
visualizaciones de lo que de una
rotacin pueda esperarse.
% traslada y rearma A.
T =[x, y];
% rearma T con las coordenadas repuestas
0
-2 -1 0 1 2 3 4 5
Ahora bien, si ya sabemos cmo contar las variables que el usuario ingresa,
necesitamos tambin que nuestro programa efecte o no acciones segn se
ingresen o no los tres argumentos. Es aqu que aparece uno de los comandos de
control de flujo ms necesarios y tiles: if end , del que aqu presentamos
slo una simplificada versin en esta primera leccin.
Baste entonces decir que la versin 2 de nuestro programa dejar obsoletas las
anteriores con tal que intercalemos inmediatamente despus de la declaracin
de la funcin la lnea de decisin en la pantalla de edicin quedando el inicio
del cuerpo de esta manera:
% el origen de coordenadas
Lo que hasta aqu hemos recorrido con las sucesivas versiones de la rotacin es
una rplica en pequesima escala de lo que normalmente acontece en el
desarrollo de una aplicacin; las nuevas versiones se apoyan en la plataforma
proporcionada por las anteriores logrando ser inclusivas, esto es que cunto se
haca con la anterior debe poderse practicar con la nueva y sin complicaciones
adicionales operativas (como hubiese significado la necesidad de introducir un
tercer argumento), a la vez que debe incorporar una nueva prestacin (en este
caso permitir la eleccin del centro de rotacin).
A=rand(15,2); acerorot2(A,90);
help acerorot2;
Vale otra observacin, que es una ampliacin del rastreo que hace el comando
lookfor, que segn ya viramos busca en la lnea H1 una coincidencia con la
palabra clave; pues si queremos que busque en todas las lneas debemos
escribir la instruccin como siempre seguida de espacio guin all, esto es con
la sintaxis lookfor trminoabuscar all .
Como ejemplo, vemos que la siguiente lnea nos devuelve nuestras funciones
rotacin en las versiones 1 y 2 que incluyen en las lneas de ayuda la palabra
[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 45 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 46 de 54
Debemos admitir que nuestro programa del promedio es algo salvaje, pues el
usuario es conminado a escribir un nmero y otro sin siquiera decrsele con qu
objeto, luego se le devuelve el promedio de un modo escasamente legible y
adems se le indica la fecha de la consulta; en fin, que ms que un servicio
parece un arresto policial.
Realmente los programas que hemos logrado realizar son algo rudimentarios en
lo que hace a su estructura, pues no son mucho ms que un paquete de
instrucciones que se dispara a modo de secuencia nica, en una cadena causal
lineal con la nica excepcin de la versin 3 del rotador, donde la presencia del
if bifurca la accin.
Los marcados con son ms bien proyectos abiertos donde se deben ejercer
decisiones para la implementacin de algn programa algo vagamente
definido.
f. Obtener las letras comunes a ambas frases y las totales utilizadas para
construirlas; ( union intersect ).
4. Para la matriz H de 4x5 del ejercicio 2.f escribir los comandos que
permiten ejecutar cada una de las siguientes acciones y verificarlos con
matlab.
a. Eliminar la cuarta columna.
b. Eliminar la tercera fila.
c. Aadirle una columna de ceros.
d. Intercambiar la tercera y quinta columna.
e. Crear una matriz con las columnas impares de H
f. Calcular el recproco de cada elemento de H
g. Crear una matriz que guarde la submatriz de H constituida por
aquellos elementos que se hallan en la segunda y cuarta fila a la vez
que en la segunda y quinta columna.
h. Crear una matriz extrayendo las columnas tercera y quinta de H.
t=(0:.1:2*pi)';x=sin(t);y=cos(t); ...
k. t=(0:.1:2*pi);x=cos(t);y=sin(t); plot(t,x,3*x+3,y,y,2*x,x,t);
l. t=0:.1:2*pi; x=cos(2*t).*cos(t); y=cos(2*t).*sin(t); ...
plot(2*x ,y , x ,2*y);
6. Escribir los comandos o M-files, segn el caso, que ejecutan las siguientes
acciones:
a. Crear un vector con todos los nmeros impares entre 7 y 138.
b. Retornar el ngulo (en grados) entre dos vectores dados (de la misma
dimensin, no nulos!). Probarlo con u = [1:100] y algn vector v
ortogonal a u.
c. Retornar la distancia eucldea entre dos puntos de un espacio n-
dimensional (fijo pero cualquiera). Probarlo con u = [ 1:100], y el
vector v = u + 1
d. Que retorne la suma de las r-potencias de los primeros n nmeros
naturales, para cada n natural y r real. Verificarlo con la suma de los
primeros 500 trminos de la sucesin armnica.
e. Crear un vector x con los primeros 100 trminos de la sucesin dada
por xn = (-1)n+1/(2n-1) y hallar su suma.
f. Representar la funcin f: [0, 2) R/ f(x) =sen(x) junto con los
simtricos de su grfico respecto de los siguientes ejes:
f1. Abscisas.
f2. Ordenadas.
ln( x 6) si 5 x 4
f ( x) 2 x 1 si 4 x 0
| 2 x | si 0 x 3
7. Definiendo t=0:.1:2*pi; x = 2*cos(t);y=sin(t); u = sin(2*t) pueden obtenerse
dos figuras tecleando, una tecleando fill(x,y,x+y,y,x+3,x-y) y la restante
con fill(x,y,x+y,y,x+3,x-y,u,x,x+2*y,x,u+3,'y'); observando las figuras,
puede determinar qu est sucediendo? Si resultara en una dificultad mayor
saltear el ejercicio puesto que lo retomaremos en otra leccin.
8. Los siguientes son fragmentos de cdigo de un (mal) programador que no
intercala comentario alguno, adems de escribir de un modo compacto que
lo torna prcticamente incomprensible. podra describir lo que significa
cada fragmento? El segundo tiene un error conceptual, cul? El tercero es
un programa completo: qu hace?
function m=prominmax(x,y,z)
if x>y, a=y;y=x;x=a;end; if y>z, a=z;z=y;y=a;end
if x>y, a=y;y=x;x=a;end
m=(x+z)/2;
15
-10
0 0.5 1 1.5 2 2.5 3
Fiuba/MatLab/elementalsimo Leccin 1 , 53 de 54
10. La ltima versin del rotador recibe tres argumentos con uno opcional.
Poner a punto una versin que permita aadir desplazamientos, y dado que
la traslacin y la rotacin no conmutan, dar la posibilidad que se indique un
desplazamiento previo a la rotacin y otro posterior o ambos, con lo que
pasara a tener cinco argumentos de modo que tendra una sintaxis tal como
miapellidorot3(A,r,C,di,df). Los argumenros aadidos debern ser
opcionales para no entorpecer la llamada del que no los necesita.
Con las visitas sugeridas al help del comando fill en los ejercicios anteriores
no debera resultar demasiado costoso aadir un pequeo crculo azul que
indique el centro de rotacin; en cambio ser mucho ms difcil lograr una
11. Construir un reflector plano que acte al modo de los rotadores, esto
es que reciba tres argumentos: uno para la figura a reflejar cargada en una
matriz A, y el eje respecto al cual se pretende la reflexin cargado en dos
argumentos, digamos P y v, vectores que indican un punto y la direccin del
eje respectivamente. La respuesta del programa consistir en las dos figuras
y el eje de reflexin; grabar el programa como miapellidorefl0. Ayuda:
posiblemente facilite muchsimo las cosas manejar el problema en la
versin matricial dada por la matriz de Householder; concebir en una
primera etapa la reflexin respecto a un eje pasante por el origen dirigido
por v y luego modificarlo para incorporar P.