Está en la página 1de 54

Fiuba/MatLab/elementalsimo Leccin 1 , 1 de 54

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

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 1 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 2 de 54

En esta leccin pretendemos, avanzando a zancadas, alcanzar el terreno natural


en el que matlab produce sus mejores resultados: el de los M-files, archivos en
los que el progamador anota una secuencia de rdenes que se ponen en marcha
ante una llamada externa.

La etapa de los M-files suele ser el principio de un curso de nivel intermedio,


mas aqu preferimos introducirla en el inicio; para lograrlo deberemos hacer el
recorrido a travs de los comandos someramente, echando apenas un vistazo
hacia los laterales de las opciones, e ignorando mucho material al paso.

As, nuestra primera leccin se asemeja a un paquete del estilo: Londres,


Madrid y Estambul (s, dejando fuera Pars y Roma) en cuatro das (dos
noches). Revisitaremos, no obstante, aquellas capitales que exijan recorridos
menos desbocados con una calma santa en las siguientes lecciones, y nos
asomaremos a las ms notorias que hemos dejado fuera del circuito.

Nociones Generales. En lo que sigue, el color rojo indica la


instruccin que el usuario ingresa, en azul la accin de matlab y los
comentarios en verde. Toda vez que se introduzca un nuevo operador o
comando o funcin lo resaltaremos con celeste.

Matlab distingue entre minsculas y maysculas, de modo que la variable q


no es la misma que la variable Q.

Matlab ignora cuanto sea precedido por %, de manera que la siguiente


instruccin:

>> q =1 % asigno el valor 1 a la variable A


q=
1

ordena a matlab que asigne el valor 1 a la variable designada con q; luego


matlab ignora el comentario insertado a continuacin del % y responde que

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 2 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 3 de 54

q = 1. Si ahora le preguntamos (un poco desconfiadamente) a matlab por la


variable q bastar teclear su nombre:

>> q

% cul es el valor de la variable q?

q=
1

Matlab contesta previsiblemente lo que ya sabamos; si en cambio pregunto por


Q matlab devolver un mensaje de error al no reconocerla:

>> Q

% cul es el valor de la variable Q?

??? Undefined function or variable 'q'.

Muchas veces no asignamos a una variable ciertos cculos que ordenamos a


matlab; en tal caso matlab los almacena en una variable que llama ans ( por
answer), tal como en la siguiente instruccin:

>> cos(pi) + 1 / 2

% suma un medio al coseno de pi

ans =

-0.5000

Si en verdad no estamos interesados (escasas veces lo estamos) en que matlab


nos muestre los resultados de sus clculos, basta terminar la orden con un
punto y coma ( ; ) como en la siguiente instruccin:

>> q = 2 / 4 * 6 + 1; z = paz y bien;

% el ; suprime la respuesta;

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 3 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 4 de 54

Claro que no por ello deja de hacer el clculo:

>> q , z

% cul es el valor de las variables q y z ?

z=

paz y bien

q=
4

Podemos asignar varias variables a la vez, separando cada asignacin por el


operador punto y coma ( ; ) o por el operador coma ( , ) segn pretendamos o
no ver la salida respectivamente:

>> q = abs(3+4i); z = q^2, w = angle (1- i);

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

ANGLE Phase angle.

ANGLE(H) returns the phase angles, in radians, of a matrix with

complex elements.

See also ABS, UNWRAP.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 4 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 5 de 54

Observamos que adems propone una consulta a funciones relacionadas con la


solicitada; regresaremos sobre las mltiples ayudas de matlab, bastndonos la
mencionada por ahora. Advertencia: para resaltarla del resto del texto matlab
escribe en las ayudas el nombre de la funcin con maysculas, pero el
comando es en minsculas en verdad!

Para el momento de comunicarnos con el exterior disponemos del comando


input (el exterior nos proporciona datos) y el comando disp (le comunicamos
resultados); presentamos una salida abreviada de la consulta sobre ambos
comandos:

>> help input

INPUT Prompt for user input.

R = INPUT('How many apples') gives the user the prompt in the

text string and then waits for input from the keyboard.

The input can be any MATLAB expression, which is evaluated,

using the variables in the current workspace, and the result

returned in R. If the user presses the return key without

entering anything, INPUT returns an empty matrix.

>> help disp

DISP Display array.

DISP(X) displays the array, without printing the array name. In

all other ways it's the same as leaving the semicolon off an

expression except that empty arrays don't display.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 5 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 6 de 54

If X is a string, the text is displayed.

Mi Primer Programa.A programar ya! : Se quiere un programa


que pida al usuario un par de nmeros y que le devuelva su promedio,
indicndole adems la fecha de consulta. La pantalla de comandos ya no es la
que nos permite trabajar para editar un programa, que en verdad no es ms que
una secuencia de istrucciones que puede escribirse en cualquier aplicacin de
texto, aunque de hecho tiene ventajas hacerlo en la misma pantalla que matlab
ofrece llamada matlab editor debugger ; accedemos a ella tecleando ahora >>
edit y en pantalla emergente escribimos el programa, que llamaremos
miapellidoprom0 ( en particular me ha correspondido llamarlo aceroprom0).

% El programa aceroprom0 calcula el promedio de dos nmeros.

% Este es mi primer programa en matlab.

n1=input('Hola amigo, ingresa un nmero: ');

n2=input('Ahora otro nmero: ');

promedio = 0 .5*(n1 + n2);

disp('Usted ha efectuado la consulta en la fecha: ');

disp(date);disp('acerca del promedio entre los nmeros');

disp(n1); disp(n2); disp('siendo el resultado = ');

disp(promedio);

Los colores, ahora, son automticamente generados por matlab, manteniendo


el verde para los comentarios y definiendo en rojo las cadenas de texto que
deben imprimirse tal como se escriben (para lo que basta encerrarlas con el
operador comillas simple que en un teclado standard se halla en la tecla del
signo de interrogacin)

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 6 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 7 de 54

Recorramos este nuestro primer programa:

La primera lnea es un comentario que describe el objeto del programa; el


programa funciona igualmente sin ella, pero pronto veremos que es excelente
idea escribirlas. La segunda, segn la consulta hecha sobre la funcin disp
saluda al usuario y le pide que ingerese un nmero, el que guarda en una
variable que llama n1. La tercera, idem anterior con el segundo nmero, que
almacena en n2. La cuarta calcula el promedio entre los nmeros ingresados y
lo guarda en una variable que llama promedio. La quinta informa con disp,
mediante texto, la fecha de la consulta utilizando la funcin date ( podemos ver
la funcin, recordemos, con >>help date en la pantalla de comandos). Las siete
y ocho describen al usuario su consulta y la ltima muestra el resultado
almacenado en la variable promedio.

Habiendo escrito el programa ahora debemos grabarlo de la manera habitual,


desde la barra de men, File, Save As... y all escrbir el nombre del archivo,
que en mi caso es aceroprom0. Matlab le aadir automticamente la extensin
. m, y as nuestro programa es ahora verdaderamente un M-file y est listo para
ser ejecutado. Cerramos ahora el editor de programas ( File, Close) de modo
que hemos regresado a la pantalla de comandos.

Nuestro programa puede ahora ser ejecutado, bastar teclear su nombre para
que se ponga en marcha: >> aceroprom0 con el siguiente resultado de una
corrida.

Hola amigo, ingresa un nmero: 1

Ahora otro nmero: 5

Usted ha efectuado la consulta en la fecha:

17-Apr-2003

acerca del promedio entre los nmeros

siendo el resultado =

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 7 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 8 de 54

Bien, el programa anterior cumple lo elemental: funciona!, aunque tal vez


fuese prudente decir ms bien que al menos funcion cuando el usuario ingres
los nmeros 1 y 5, pero qu sucedera ante maldades del usuario tales como
ingresar letras, o no ingresar nada? Por otra parte debemos admitir que lo que
el programa devuelve al usuario no est muy organizado para una fcil lectura,
hay saltos de lnea inoportunos, etc. Tambin, y esto es esencial, los
comentarios que describen lo que cada instruccin pretende nos conviene
incorporarlos al cuerpo del programa utilizando el operador %, para que sea
fcilmente legible en posteriores correcciones o modificaciones. (De no hacerlo
as, es muy posible que el mismo que escribe el programa despus deba pasar
gran tiempo en el discernimiento de cada lnea).

La lnea de comentario que precede a la primera instruccin tiene extrema


importancia por una caracterstica excepcional de matlab: nuestro programa ha
quedado incorporado y accesible al sistema de ayudas! Pues comprobmoslo
tecleando el correspondiente help:

help aceroprom0

El programa aceroprom0 calcula el promedio de dos nmeros.

Este es mi primer programa en matlab.

En este momento es oportuno sealar otro sistema de ayudas disponible desde


la pantalla de comandos, y que posiblemente resulte finalmente el ms til. El
comando help funciona siempre que conozcamos el nombre de la funcin (su
nombre exacto!) lo que no puede pretenderse ya que hay miles (literalmente);
pues para ello est el comando lookfor que busca en la primera lnea del
comentario que precede al programa (H1 en lo sucesivo) una palabra que
creemos debe estar presente para la funcin cuyo nombre pretedemos conocer,
y toda vez que encuentra coincdencia, devuelve el nombre de la funcin junto a
la primera lnea del comentario. As, busquemos alguna funcin que se vincule
con la palabra promedio:

>> lookfor promedio

aceroprom0.m: % El programa aceroprom0 calcula el promedio

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 8 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 9 de 54

de dos nmeros.

Nuestra funcin! No halla ms que la nuestra pues promedio no es un vocablo


representado en ingls; lo importante es que en H1 conviene siempre escribir la
palabra que de un modo natural buscaramos mediante lookfor, para que as se
halle disponible ante una bsqueda contextual como la de lookfor.

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

Your variables are:

ans n2 q z

n1 promedio w

>> clear

>> who

El comando clear puede actuar selectivamente sobre algunas variables, de


modo que, por ejemplo, >> clear ans z slo remueve las variable ans y z;
asimismo observemos que las variables que fueron asignadas en un programa
( n1, n2, promedio), quedan residentes en la pantalla de comados una vez
ejecuado el M-file (y por lo tanto pueden ser procesadas); por ltimo, el
comando whos ampla la informacin dada por who, aadiendo adems del
nombre de la variable su tipo, siendo genricamente identificadas como arrays
manifestando que se trata de ordenaminetos siguiendo direcciones (ndices)
determinadas de elementos que no slo comprenden los escalares.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 9 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 10 de 54

Matrices y vectores. Para definir un vector fila basta escribir sus


componentes separadas por coma , o bien por un espacio, encerradas entre
corchetes [ ]

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

% los elementos del vector se separan con el punto y coma ;

v=

>> v=[1 0 1 2]

% define el vector columna v

% como traspuesto del vector fila.

v=
[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 10 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 11 de 54

1
0

Las matrices se escriben naturalmente como un apilamiento de vectores,


separando cada fila con el operador punto y coma:

>> M=[1 2 3;6 5 4;5 3 1]

M=

1 2 3

6 5 4

5 3 1

Uno de los ms potentes operadores, el dos puntos : permite construir vectores


rpidamente; veamos algunos ejemplos

>> u = -2 : 5

% vector fila cuya primera componente es

% -2, y las siguientes se obtienen por incremento 1


% hasta alcanzar un nmero menor o igual que 5

u=

-2 -1 0 1 2 3 4 5

>> v = -2 : 2: 5

% vector fila cuya primera componente es

% -2, y las siguientes se obtienen por incremento 2


% hasta alcanzar un nmero menor o igual que 5

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 11 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 12 de 54

v=

-2 0 2 4

Semejante utilidad presenta la funcin linspace , que permite mayor control


especificando tres argumentos de entrada: la primera componente, la ltima y
el nmero total de valores comprendidos entre ambos:

>> u= linspace(1,2,5)

% crea un vector fila equiespaciado

u=

1 1.25 1.5 1.75 2

Puede representarse un vector o matriz mediante la funcin plot con la sencilla


sintaxis plot(matriz), que posiblemente sorprenda la primera vez, puesto que no
representa en verdad el vector en su espacio, sino una funcin para cada
columna de una matriz, llevando en ordenadas el valor del elemento
correspondiende a su ndice (fila), y diferenciando las columnas (si hubiese
ms de una) mediante colores. Representemos pues la matriz M anteriormente
definida mediante la instruccin >> plot (M) :

La siguiente es la figura producida por matlab sin ningn aadido ni


escalamiento ni tratamiento posterior; sto es atlab ha actuado de manera
automtica para generar el grfico y ha tomado por nosotros las decisiones
respecto a la escala en cada eje (observemos que la relacin de escalas es 1 / 2)
y a la graduacin de la marca de los ejes ( intervalo 0. 2 sobre el eje de
abscisas, 0. 5 sobre el de ordenadas), la ubicacin del origen de coordenadas
(en este caso el punto (1, 1) ), el espesor de las lneas que representan las
columnas, el color de las mismas (la primera columna es azul, verde la
segunda, roja la tercera ), etc.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 12 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 13 de 54

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.

Representemos ahora la traspuesta de M mediante >> plot (M) :

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 13 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 14 de 54

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

donde con las mismas nomenclaturas de colores estn representadas las


columnas de la traspuesta de M, esto es las filas de M; tambin es fcil notar
que la segunda fila (verde) es la suma de las otras dos.

A los elementos de una matriz puede accederse con la nomenclatura


habitual, slo que se permite que los ndices de identificacin sean tambin
vectores! Empecemos con ejemplos que acten sobre un vector fila de
caracteres (esto es el definido por una expresin encerrada entre las comillas
simples) y luego extendido a matrices:

>> f = paz y bien ;

% vector fila de 10 elementos (caracteres, incluyendo espacios)

Observando que la letra a es la segunda de la frase no nos sorprende el


resultado de aplicar el siguiente comando:

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 14 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 15 de 54

>> f (2)
% pedimos el valor de la segunda componente

ans =

La primera letra es p, la tercera es z, la novena e y la dcima n:

>> f ( [1 3 9 10])

ans =

pzen

cules son las primeras cinco letras (incluyendo espacios!) de la frase?

>> f ( [1:5])
ans =

paz y

Si ahora queremos escribir la frase f pero leda dederecha a izquierda


deberemos ir recorriendo el vector en retroceso, esto es arrancar desde el
ltimo (el dcimo) hasta alcazar el primero, leyendo uno a uno los caracteres
encontrados en el recorrido

>> retrof = f([10:-1:1])

% invierte la frase

retrof =

neib y zap

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 15 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 16 de 54

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]

% crea una matriz de 3 x 10

mf =

paz y bien

neib y zap

paz y bien

>> mf( 2:3,7:10)

% selecciona todas las filas entre la segunda y tercera


% y todas las columnas etre la sptima y la dcima de la

% matriz de caracteres mf de dimensin 3 x 10.

ans =

zap

bien

Los ejemplos anteriores bastan para comprobar cun asombrosamente fcil


resulta manipular los elementos que constituyen una matriz; un par de
funciones puede venir en nuestra ayuda cuando estamos trabajando con
demasiadas y queremos cercionarnos acerca de sus tamaos: length y size .
Demos todava algunos ejemplos ms:

>> length ( f )

% el mximo entre el nmero de filas y columnas

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 16 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 17 de 54

ans =

10

>> size ( f)

ans =

1 10

>> size (mf)

ans =

3 10

>> M(:,2)

% selecciona la segunda columna de M

ans =

>> M(1:2,:)

% selecciona las dos primeras filas de M

ans =

1 2 3

6 5 4

>> H=[M M(:,1)]

% crea una matriz que aade a M una cuarta

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 17 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 18 de 54

% columna: la primera de M.
H=

1 2 3 1

6 5 4 6

5 3 1 5

La siguiente instruccin merece una aclaracin: si pedimos con slo un ndice


los elementos de una matriz (bidimensional), matlab entiende que queremos
tratarla como una columna que es la concatenacin de sus columnas; devuelve
un vector fila con los elementos sealados.

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, :) = [ ]

% elimina la primera fila de H

H=

6 5 4 6

5 3 1 5

Si podemos ver una matriz (bidimensional) como un apilamiento de vectores


(matrices unidimensionales) no trae dificultad alguna ver las matrices
tridimensionales como un apilamiento de bidimensionales... y as siguiendo;
posiblemente sea la mejor manera de concebir las matrices multidimensionales
al momento de manipularlos.
[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 18 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 19 de 54

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

% crea las matrices A y B de 2 x 2.

Nuestra matriz tridimensional ( que llamaremos triple) ser un apilamiento que


en un primer nivel tenga la matriz A, en el segundo B, y en el tercero la
traspuesta de B; as, para referirnos a todo lo que haya en el nivel k
escribiramos triple (: , : , k).

triple ( : , : , 1) = A ;

% crea la matriz triple y pone a la matriz A en su primer nivel

triple ( : , : , 2) = B ;

% crea la matriz triple y pone a la matriz B en su segundo nivel

triple ( : , : , 3) = B ;

% crea la matriz triple y pone a la traspuesta de B en su tercer nivel

size(triple)

ans =

2 2 3

triple % pregunto por la variable triple

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

% matlab contesta como puede; es recomendable preguntar por otras

% secciones del ladrillo que constituye triple.

El detector de capicas. Queremos un M-file que pida al usuario


un nmero o frase (indistintamente) y que devuelva el nmero o frase al
revs; se dejan las decisiones al constructor, con la nica restriccin de slo
emplear los comandos hasta ahora vistos.

Con la experiencia del primer programa trataremos de documentar mejor ste,


abundaremos en comentarios en el cuerpo mismo del programa para que se
explique por s solo. Una decisin importante debe tomarse: lo que el usuario
ingrese debe ser un vector de caracteres, an en el caso de que ingrese nmeros
porqu?.

% acerocapi0 es un detector de capicas

% requiere que el usuario ingrese, entre comillas simples,

% una frase o nmero, el programa la invierte y la retorna

% al usuario para que l mismo compruebe si resultan o no iguales

frase=input('Ingrese frase o nmero entre comillas: ');

% pide al usuario la entrada y la guarda

% en la variable llamada frase

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 20 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 21 de 54

largo = length(frase);

% cuenta el nmero de letras (incluyendo espacios!)

% que componen la frase ingresada y la guarda en largo

retro = frase([largo: -1 : 1 ]);

% invierte la sucesin ingresada y la guarda

% en la variable retro (este es el paso decisivo)

disp('observe su frase y la invertida: );disp ([frase;retro]);

% muestra el mensaje al usuario y le presenta la frase

% original apilada con la invertida

Una corrida del anterior para un usuario que ingresa hola mundo produce el
siguiente panel:

>> Ingrese frase o nmero entre comillas: 'hola mundo'

observe su frase y la invertida:

hola mundo

odnum aloh

El programa funciona, y aunque nuevamente podamos sentirnos insatisfechos


con la presentacin algo rudimentaria, al menos podemos decir que est muy
bien documentado con los comentarios; los espacios en blanco entre lneas
ayudan a la legibilidad. Tambin podemos decir que en verdad el programa
deja al usuario la verificacin cuando preferiramos tal vez que contestara si es
o no capica lo ingresado, mas no tenemos an los elementos para lograrlo.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 21 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 22 de 54

Programa 3: una funcin desplazamiento. Ahora


pretendemos un programa que es de naturaleza ligeramente distinta de los
anteriores; se trata de un M-file que toma argumentos entregados por el usuario
en el mismo momento de ser llamado. Simplificando, podramos decir que si
en los anteriores casos el usuario eventualmente ingresaba informacin
mediante el comando input, en una funcin, la informacn es ingresada como
argumento sobre el que se pide la operacin.

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.

El inicio de la construccin de una funcin no difiere a los ya vistos sino en


slo un detalle: una vez abierto el editor de programas con el comando edit
debemos indicarle a matlab que lo que vamos a escribir es una funcin que
toma argumentos de entrada y debe devolver argumentos de salida; en nuestro
caso slo tomoa un argumento de entrada (la matriz) y devuelve slo uno de
salida (la matriz transformada).

Con suficientes comentarios, el programa siguiente se explica por s mismo:

% la funcin acerodesp0 desplaza columnas hacia la derecha

% recibe una matriz como argumento con la sintaxis

% acerodesp0 ( M )

function z = acerodesp0 (M );

% el comando function indica a matlab que se trata de una funcin

% recibe una matriz M y devuelve una matriz que llama z

a = size ( M ) ; n= a ( 2 ) ;

% n = el segundo elemento del size de M (su cantidad de columnas)

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 22 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 23 de 54

z = M ( : , [n , 1: n-1] );
% el paso decisivo, basta examinar que el corchete es un vector

% cuya primera columna es la ltima de M, y luego las restantes

disp('La matriz desplazada es ' ) ; disp(z) ;

% muestra una breve leyenda aclaratoria

Una vez guardado el archivo con el nombre de la funcin cerramos el editor de


matlab y en la pantalla de comandos nuestra funcin ha quedado aadida entre
las miles disponibles. Toda vez que necesitemos un desplazamiento de
columnas de una matriz sencillamente teclearemos acerodesp0 ( M ) y
obtendremos el resultado, como se muestra en el ejemplo de una corrida.

>> acerodesp0 ( [A A ; A' A] )


La matriz desplazada es

2 1 2 1

4 3 4 3

2 1 3 1

4 2 4 3

Operaciones elementales con matrices. Pues en primer


lugar tenemos la suma, con las reglas habituales siendo su comando + y el
producto habitual por un escalar o matriz cuyo operador es * y la reiteracin
del producto k veces se escribe A^k

A = [ 1 2 ; 3 4] ; B = [ 5 6 ; 7 8];

% crea las matrices A y B de 2 x 2.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 23 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 24 de 54

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

Si embargo tenemos ya una caracterstica de excepcin: para sumar dos


matrices los dimensiones deben ser las mismas, excepto que una de ellas sea
en verdad un escalar! En tal caso, el escalar se suma a cada elemento:

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

% D es tal que d ( i , j ) = [a( i , j )] ^ 2

C=

5 12

21 32

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 24 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 25 de 54

D=
1 4

9 16

Para abundar en la distincin entre ambos productos presentemos el siguiente


ejemplo: sea t el vector t = (1, 2, 3), un vector fila de 1 x 3. Utilizando el
producto habitual nos es factible hacer t * t y ser de 1 x 1, tambin podemos
hacer t * t que resultar de 3 x 3; con el producto punto asterisco, en cambio
podemos hacer t .* t ( y ser de 1 x 3 ) y tambin t .* t que resultar de 3x1.
Conviene finalmente notar que algunas propiedades se ven algo extraas con
este producto, como podra ser ( t .* t ) = ( t .* t ).

>> t = (1, 2, 3); a = t * t' , b= t' * t , c = t .* t , d = t' .* t


a=

14

b=

1 2 3

2 4 6

3 6 9

c=

1 4 9

d=

Si antes vimos que el comando plot aplicado a un argumento matricial grafica


las columnas contra su ndice, digamos ahora que cuando toma dos argumentos
[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 25 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 26 de 54

vectoriales de igual dimensin grafica el segundo en ordenadas frente al


primero en abscisas.

>> t = linspace (0 , 5 , 20) ; y = t .^ 2 4 * t + 3 ; plot (t , y);

% crea el vector t con 20 puntos equiespaciados entre 0 y 5

% y con l el vector y, luego pide el grfico de y vs. t

El grfico del polinomio resulta bastante aceptable con los 20 puntos


considerados; repitiendo la pareja de argumentos tantas veces como se quiera
matlab representa superpuestos los grficos distinguindolos con un color:

>> u = 3 * sin ( 2* t ) ; plot (t , y, t, u);

% u es un vector obtenido tomando el triple

% del doble del seno de cada elemento de t!

% representar juntos los vectores y e u frente a t

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 26 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 27 de 54

La sinusoide resulta de variaciones deasiado bruscas para una representacin


suave con slo 20 puntos; a menudo debe ajustarse la particin del intervalo a
representar slo una vez que se han hecho unas pruebas.

Conviene aqu resaltar que en general las funciones elementales se aplican


directamente sobre cada uno de los elementos de la matriz argumento, tal como
acabamos de ver sucedi con la funcin seno, de modo que es natural el
siguiente ejemplo.

>> A = [1+ i i ; 1 2]; F = angle (A)


% F es la matriz cuyos elementos son los argumentos de los de A

F=

0.7854 -1.5708

0 3.1416

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 27 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 28 de 54

Un ltimo ejemplo de plot : supongamos que pretendemos graficar una funcin


junto al simtrico respecto de la bisectriz del primer cuadrante:

>> plot ( t, y, y, t) ;

% grafica y vs. t a la vez que t vs. y

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

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 28 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 29 de 54

cual el comando >> a \ b indica que a divide a b tal como se exhibe en el


siguiente ejemplo:

>> a = 2 / 3 , b = 2 \ 3

% a es 2 dividido a la derecha por 3

% b es 3 dividido a la izquierda por 2

a=

0.66667

b=

1.5

Resulta claro que, tratndose de escalares, la divisin no se altera por hacerlo a


la izquierda o a la derecha, es decir que a \ b = b / a , toda vez que ambas
estn definidas.

Ahora bien, con las matrices, suponiendo primero que A es inversible,


podemos decir que C = A \ B es el producto de la inversa de A por B, de modo
que debe ser A * C = B, mientras que D = B / A es el producto de B por la
inversa de A, debiendo resultar D * A = B y es claro que no resulta necesario
C = D, tal como lo ilustra el ejemplo.

A = [ 1 2 ; 3 4] ; B = [ 5 6 ; 7 8]; C = A \ B , D = B / A

% las dos divisiones matriciales

C=

-3 -4

4 5

D=

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 29 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 30 de 54

-1 2

-2 3

Con la notacin introducida podemos decir que la solucin (nica!) del


sistema A*X = B es X = A\B, mientras que la del sistema X * A = B est dada
por X = B / A , todo de un modo muy natural.

No siendo A cuadrada, el sistema A*X = B admite an solucin en el sentido


de los mnimos cuadrados y es nica la de mnima norma; pues precisamente
tal solucin es la que matlab devuelve X = A\B, tal como en el siguiente
ejemplo:

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

La versin punto divisin, ./ y .\ naturalmente recobra la conmutatividad,


pues se hace la divisin elemento por elemento, por lo que las dimensiones
deben ser coincidentes, otra vez con la excepcin del caso en que se divide un
escalar por una matriz, lo que produce la matriz cada uno de cuyos elementos
es el escalar dividido por el correspondiente elemento de la matriz.

A = [ 1 2 ; 3 4] ; B = [ 5 6 ; 7 8]; C = A ./ B , D = 12 ./ A

% la divisin punto barra

C=

0.2 0.33333

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 30 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 31 de 54

0.42857 0.5
D=

12 6

4 3

Como un ejemplo de la punto divisin tomemos graficar la funcin f(x) que es


el cociente entre sen( 2x) y x. Es aqu donde ya vemos la necesidad de tener
habilitada la posibilidad de dividir vectores dado que, no olvidemos, matlab no
hace sino graficar un conjunto discreto de puntos unindolo con lneas.

t = .01: .1 : 10 ; f = sin ( 2* t ) ./ t ; plot (t , f) ;

% la divisin es elemento a elemento.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 31 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 32 de 54

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 ;

% define u y v en el intervalo entre 0 y 1.1

f = u ./ w ; % define f

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 32 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 33 de 54

Warning: Divide by zero.

plot(t,w,t,u,t,f); % grafica las tres funciones

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

El grfico ( manipulado con plot-options que an no tratamos) pretende


mostrarnos que falta un punto rojo; en verdad hemos sido afortunados, pues
al definir la variable t, en un dado momento alcanza el valor t 0 = 1, que en otro
caso nada nos hubiese sido advertido; basta para convencerse cambiar el
incremento 0.05 al valor 0.03, es decir una particin de menor norma, pero no
ms fina pues claramente deja fuera t0 .

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 = eye (2) , b=ones (2,3) , c =zeros(2, 5) , d=pascal(3) e = diag([2 3])

a=

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 33 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 34 de 54

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

Programa 4 : rotador plano. Se quiere una funcin que


permita ingresar un polgono definido por sus vrtices y el ngulo de rotacin
deseado para devolver un grfico que muestre el polgono original de un color
(digamos rojo) y el transformado de otro (amrillo); la funcin fill debera hacer
todo muy sencillo, aunque seguramente deber tambin acudir al comando
hold
[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 34 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 35 de 54

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.

A = [0 0;2 1;1 2]; x=A(:,1);y=A(:,2);fill(x,y,'r');

Bien, realmente result y al


2 pasar aprendimos la primera
1.8
opcin para los comados
grficos: tras la pareja de
1.6
vectores un tercer argumento
1.4
permite especificar el color,
1.2 en tanto que se lo encierre
1 entre comillas simples.
0.8
Sabemos entonces, que el
0.6
transformado del polgono
0.4
tambin ser un fill, pero con
0.2 la opcin de color puesta en
0 amarillo (yellow), esto es
0 0.5 1 1.5 2
y.

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.

r = 45; % supongamos que el argumento es de 45.

alfa = pi*r /180 % lo transformamos en radianes

alfa =

0.7854

De hecho sabemos cul es la matriz que representa la rotacin plana, de modo


que deberemos incluir alguna instruccin del tipo:

R= [cos(alfa) sin(alfa); sin(alfa) cos(alfa)]

% calcula la matriz de rotacin y la almacen en R

R=

0.70711 -0.70711

0.70711 0.70711

y para obtener en qu se transforma el polgono representado por A deberemos


aplicar la rotacin R a cada vrtice, o mejor, a todos juntos haciendo H = R*A
donde fue necesario trasponer A para que la operacin funcione como
queremos, resultando la matriz H que carga los vrtices del polgono
transformado, slo que no los tiene dispuestos segn nuestra convencin, de
modo que podemos trasponerlo nuevamente, o mejor an reemplazar la
expresin por su traspuesta, quedando entonces sencillamente definido el
polgono transformado T por la siguiente instruccin:

T = A * R ;

% T es el polgono transformado de A por la rotacin R

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 36 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 37 de 54

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');

2.5 En fin, parece estar


funcionando!, aunque an
2 resta un detalle, pues se
requera ver ambas figuras
1.5 en un mismo grfico, y
matlab pisa un grfico con
1 el nuevo, de modo que el
tringulo rojo est perdido
0.5 irremediablemente. Es aqu
donde nos auxilia la
0 funcin hold, pues un help
-1 -0.5 0 0.5 1
sobre la misma nos
informa que su funcin es
precisamente dibujar el nuevo grfico manteniendo el previo, activndose
mediante hold on y quitndose (para sucesivas aplicaciones) mediante hold off.

Con la opcin activada, entonces todo debera estar funcionando correctamente


ya que nos hemos ocupado de ir probando nuestras ideas, de modo que slo
queda ensamblarlas en un M-file.

Antes de hacerlo, valga la recomendacin de proceder a la construccin del


programa por segmentos, uno para resolver cada uno de los problemas, e ir
ejecutndolos en la pantalla de comandos para asegurarnos que funciona segn
lo esperado, tomando decisiones que nunca sern unvocas y con cierta
despreocupacin inicial por lograr una eficiencia extraordinaria, grabar el
archivo como versin punto cero y si lo necesitamos y disponemos del tiempo
luego podremos retomarlo para pulirlo en una versin punto 1 y as cunto se
necesitare.

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.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 37 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 38 de 54

% acerorota0 grafica rotaciones en el plano de polgonos de n lados

% su sintaxis es T=acerorota0(A, r) siendo A una matriz de n x 2, r escalar

% cada fila de A es un vrtice del polgono, r es la rotacin en grados

function acerorpta0 (A,r );

alfa = pi*r/180; R =[cos(alfa) -sin(alfa) ; sin(alfa) cos(alfa)] ;

% convierte r a radianes, define la matriz de rotacin R

T = A * R; % el paso clave, convierte el polgono A en T.

x=A(: , 1) ; y = A(: , 2) ; fill (x, y, r);

% dibuja el polgono ingresado de color rojo

hold on ; % mantiene el dibujo para recibir otro

x=T(: , 1) ; y = T(: , 2) ; fill (x, y, y);

% dibuja el polgono transformado de color amarillo sobre el anterior

hold off ; % desactiva el modo redibujar manteniendo anterior

En la figura vemos el resultado del programa tecleando (una vez grabado el M-


file) acerorota0(A,45),
2.5 donde A es la matriz
definida antes para el
2
polgono. Ya todo se halla
1.5
en orden y nos cercionamos
aadiendo algunas pruebas,
1 en general imprescindibles,
no sin antes repetir que
0.5 debemos mantener la
prctica de documentar con
0
-1 -0.5 0 0.5 1 1.5 2
comentarios, hasta los de

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 38 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 39 de 54

carcter ms obvios, todos nuestros programas: seguramente seremos los


primeros en necesitarlos una vez hayan transcurrido algunas semanas.

Probemos, pues, construyendo un polgono bandera materializado por la


matriz A=[0 0 ; 3 6 ; 5 5 ; 4 3 ; 2.1 4] y apliqumosle una rotacin horaria de
intensidad 60:

A=[0 0;3 6;5 5;4 3;2.1 4]; acerorota0(A, 60) ;

% definimos el polgono A y lo rotamos 60

El resultado ya nos deja


7
satisfechos, creemos que
6
funcionar en todos los
5 casos; sin embargo creemos
4 oportuno precisar que en
realidad nuestro programa
3
en verdad rota
2 adecuadamente los
1 polgonos pero en una
0
acepcin muy amplia que le
-4 -2 0 2 4 6 concede una mayor potencia
que la esperada. En verdad,
la rstriccin es que el comando fill sea aplicable, y dado que el comado acepta
cualquier matriz (de dimensin n x 2) vale esta reflexin: si todo polgono de n
lados est representado por una matriz de n x 2, vale la recproca?; es aqu
donde deberemos indagar
acerca del carcter de fill. 6

5
La figura obtenida ahora con
4
>>A=[0 0;6 3;1 5;4 -1]; 3
>>acerorota0(A,100);
2

es una muestra de que la figura 1


se dependiente del orden de los
0
vrtices, o dicho de otra
-1
[fernandoacero ] uso interno curso anlisis II fiuba 2010 -6 -4 -2 0 paraelcampusvirtual,
2 4 639 de 54
Fiuba/MatLab/elementalsimo Leccin 1 , 40 de 54

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.

Como un ltimo ejemplo consideremos se desee rotar 60 la elipse centrada en


el punto Po = (3,1) con semiejes a = 2, b=1 Pues basta considerar al modo de
Arqumedes la elipse como un polgono y nuestro programa se revelar
entonces un rotador de figuras con un carcter muy general.

t = linspace( 0, 2*pi , 50) ; x=3+2*cos(t) ; y=1+sin(t);

% define la elipse-polgono de 50 lados

A=[x', y']; acerorota0(A,60);

% define la matriz de 50 x 2 que representa la elipse y la rota 60.

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.

Rotador plano, centro de rotacin flexible. El


programa anterior est muy bien, pero lo cierto es que el eje de rotacin de la
figura est predefinido implcitamente: es el origen de coordenadas, pero ahora

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 40 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 41 de 54

queremos poder dejar al operador de la funcin la posibilidad de definirlo en


cada ejecucin. Pues entonces es claro que necesitamos aadir a nuestra
funcin implementada un tercer argumento, el centro C de la rotacin, esto es
un vector de, decidimos 1 x 2. Dado que es un adelanto sobre el anterior lo
nombraremos del mismo modo, pero cambiando el 0 a 1 para indicar versin
posterior.

Ahora bien, la lgica de la modificacin que debemos introducir es trivial: se


trata simplemente de trasladar el origen de coordenadas al punto C, aplicar la
rotacin y luego restituir el origen primitivo; sin embargo no debemos traducir
que una lgica sencilla tenga necesariamente una implementacin sencilla,
aunque s es ste el caso.

% acerorot1 grafica rotaciones en el plano de polgonos de n lados


% su sintaxis es T=acerorota0(A, r, C) siendo A una matriz de n x 2,

% r escalar que define la rotacin en , C el vector de 1 x 2 que define

% el centro de rotacin; cada fila de A es un vrtice del polgono

function acerorot1 (A , r ,C);

alfa = pi*r/180; R =[cos(alfa) -sin(alfa) ; sin(alfa) cos(alfa)] ;

% convierte r a radianes, define la matriz de rotacin R

x=A(: , 1) ; y = A(: , 2) ; fill (x, y, r); hold on;

% dibuja el polgono de rojo y mantiene abierto el grfico

xo = C(1); yo=C(2); x= xxo; y = y yo; A =[x, y];

% traslada y rearma A.

T = A * R; % el paso clave, rota el polgono .

x=T(: , 1) ; y = T(: , 2) ; x = x + xo; y = y + yo;

% desmonta T, y restituye las coordenadas

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 41 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 42 de 54

T =[x, y];
% rearma T con las coordenadas repuestas

fill (x, y, y); hold off ;

% dibuja el transformado, cancela dijujar sin borrar

Como prueba de nuestro cdigo rotaremos la bandera anteriomente definida


alrededor de un punto medio del mstil.

A=[0 0;3 6;5 5;4 3;2.1 4]; acerorot1(A, 60,[1 2]) ;

% define la bandera, la rota 60 alrededor del punto (1, 2).

0
-2 -1 0 1 2 3 4 5

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 42 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 43 de 54

Flexibilizacin de argumentos. En verdad, la versin uno del


programa anterior tiene derecho a llamarse as, pues de hecho es capaz de
realizar todo lo que la primera: basta que se asigne el tercer argumento como el
punto (0, 0) para estar en el mbito de la versin cero.

En este momento podramos decidir entonces que descartamos la versin cero


por limitada, pero podra ponerse como reparo que, para quien no est
pensando en otro centro de rotacin que el origen de coordenadas, es fastidioso
estar ingresando constantemente el tercer argumento toda vez se invoca la
funcin.

No podra hacerse que nuestra nueva funcin tolerara que el operador


ingresase eventualmente slo dos argumentos y entonces tomase
automticamente la decisin de rotar alrededor del origen? Si la respuesta fuese
s (lo es!), no cabra duda, descartaramos para siempre la versin cero que ya
no tendra siquiera la ventaja de la brevedad de sintaxis.

Lo que en verdad necesitamos es un comando que cuente la cantidad de


argumentos que el usuario ha ingresado en el momento de llamar a nuestra
funcin: nargin es tal comando ( por nmero de argumentos ingresados) y su
sintaxis no tiene complicacin, se reduce a escribirlo sin ms.

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.

En tal simplificacin digamos que el comando es un condicional que realiza


cuanto se encuentra entre if y end siempre que la condicin enunciada
inmediatamente despus del if se cumpla.

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:

% acerorot2 grafica rotaciones en el plano de polgonos de n lados

% su sintaxis es T=acerorota0(A, r, C) siendo A una matriz de n x 2,

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 43 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 44 de 54

% r escalar que define la rotacin en , C el vector de 1 x 2 que define


% el centro de rotacin; cada fila de A es un vrtice del polgono

% el argumento C es opcional, si no se ingresa se considera

% el origen de coordenadas

function acerorot2 (A , r ,C);

if nargin < 3, C = [0, 0] ; end

% predetermina el origen cuando el usuario no lo ingresa

% ... luego todo como en la versin 1

La versin 2, entonces es nuestro definitivo (hasta aqu!) programa, las


anteriores ya no presentan ventaja alguna y se abandonan.

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

Probamos la ltima versin dejando que aleatoriamente se genere un polgono


de 5 lados y lo rotamos 90 , con la lnea de comando

A=rand(15,2); acerorot2(A,90);

% aleatoriamete crea un polgono de 15 lados y lo rota 90

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 44 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 45 de 54

Naturalmente, el usuario que pruebe con el comando anterior no obtendr, casi


ciertamente, la misma figura
1
adjunta (como tampoco si lo
0.8 ejecuta repetidas veces cada vez)
pues precisamente los vrtices
0.6
del polgono son aleatoriamente
0.4 generados mediante el comando
rand, que es frecuentemente
0.2
utilizado por su rapidez de
0 generacin y porque podra
-1 -0.5 0 0.5 1
producir situaciones no previstas,
como un modo de poner a prueba nuestro programa.

Si ahora tecleamos un help sobre nuestra ltima funcin tendremos la


siguiente respuesta:

help acerorot2;

acerorot2 grafica rotaciones en el plano de polgonos de n lados

su sintaxis es T=acerorot2(A, r, C) siendo A una matriz de n x 2,

r escalar que define la rotacin en , C el vector de 1 x 2 que define

el centro de rotacin; cada fila de A es un vrtice del polgono

As ha quedado nuestra funcin incorporada plenamente al sistema de ayudas


como una ms de matlab; tambin observemos que el help reproduce todas las
lneas (no slo la H1) que incluimos como comentarios previos a la primera
lnea con una instruccin efectiva.

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

centro; la respuesta es el nombre de la funcin y la lnea de ayuda H1, pero la


bsqueda fue hecha en todas las help-lines.

lookfor centro -all

acerorot1 grafica rotaciones en el plano de polgonos de n lados

acerorot2 grafica rotaciones en el plano de polgonos de n lados

Esto nos recuerda por tercera vez la importancia de documentar nuestros


programas adecuadamente, introduciendo en el encabezado todas las palabras
mediante las cuales supongamos que podemos buscar nuestra funcin, cuyo
nombre olvidaremos pronto.

Los comentarios del cuerpo ya no son accesibles desde un reclamo externo


pero son seguramente todava ms importantes, pues nos permitir no slo
comprender el funcionamiento sino introducir rpidamente modificaciones que
produzcan versiones ms avanzadas.

Conclusiones. En nuestro recorrido hemos pretendido limitar al


mnimo la cantidad de informacin (no hemos visto ms de 40 comandos) a la
vez que avanzar al mximo en la programacin (la versin 3 del rotador utiliza
ya nociones fuera del nivel principiante).

El apartado de manipulacin y acceso a los elementos de una matriz (numrica


o de caracteres) es, lejos, el ms importante; aprendimos a hacer algunos
dibujos (muy rudimentarios y sin opciones).

En lo que a la programacin se refiere, en cambio, estamos avanzadsimos:


podemos abrir, editar, guardar, ejecutar, modificar y flexibilizar un M-File sea
del estilo Funcional o Script.

En el estilo funcional (esto es con el usuario pasando los argumentos en el


momento de invocacin de la funcin) no estamos tan mal, aunque
seguramente no podemos decir lo mismo en lo que a comunicacin con el
usuario se refiere en estilo Script.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 46 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 47 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.

El de los capicas no tiene la agresividad del anterior pero hemos de


resignarnos a aceptar que un usuario no enterado quedara medio perplejo ante
la respuesta a la frase que (otra vez sin explicacin) se le pide ingresar. Mucho
ms si casualmente ingresa una frase capica.

Deberemos mejorar mucho nuestra interfaz con el usuario, un tema de


importancia capital para que podamos lograr que nuestro trabajo pueda
interesar a alguien ms que a nuestros parientes y no provocar sopor a los
alumnos, clientela cautiva. Probablemente mejoraremos con nuestras lecciones
este aspecto, con certeza estaremos muy lejos de un nivel netamente atractivo,
puesto que una aproximacin al conjunto de herramientas para las interfaces
llamativas exige un curso completo.

En cuanto a los rotadores, estn ms que bien; aqu la interaccin con el


usuario reduce su gravitacin por un motivo sencillo: el usuario que ha logrado
teclear la funcin con todos sus argumentos correctamente ya sabe
precisamente qu pretende hacer y qu puede esperar.

Extraaramos a lo sumo algn ttulo en el grfico que indique el polgono


original y el transformado, quiz pudiese ser menos montono el juego rojo
amarillo, tal vez fuese bienvenida una flecha que indique el sentido e
intensidad de rotacin alrededor del identificado centro, en fin todas las ideas
que pueden ir acoplndose en posteriores versiones, pero en lo que a la lgica
del programa se refiere podemos estar satisfechos.

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.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 47 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 48 de 54

Los comandos encargados de dirigir el trnsito de las acciones se llaman


precisamente de control de flujo y a ellos deberemos prestar mucha ms
atencin en las siguientes lecciones.

En la leccin 2, el acento estar puesto en aumentar la cantidad de informacin


lateral en la brecha abierta por sta y explorar el terreno de algunas opciones,
todo siempre ante el reclamo de problemas a ser resueltos mediante la
programacin.

Ejercicios. La siguiente lista pretende sugerir algunos ejercicios, a modo


de un men, que permita practicar los comandos incluidos en esta leccin, pero
tambin aadir otros para los que un help sobre el mismo baste para aplicarlos
(en tales casos se indicar con celeste la novedad).

Los marcados con son ms bien proyectos abiertos donde se deben ejercer
decisiones para la implementacin de algn programa algo vagamente
definido.

1. Dados los vectores x = [1 2 3 4 5 6]; y = [ 0 7 8 9]; identifique el


significado de cada una de las instrucciones siguientes, anticipe el resultado
y verifquelo con matlab.
a. x( 2:4) + y( 1:3) y (3: 1:1) + 1
b. x (1:3)' * x (1:3) + x (1:3) * x (1:3)'15*ones(3)
c. diag ( x (1:3:6)) \ (eye ( 2) + 1)
d. diag ( x (1:3:6)) .\ (eye ( 2) + 1)
e. ( [x , y; y, x;] length ( y)*(ones(10,2)) )

f. Observacin: con frecuencia la sentencia que pretendemos escribir en


la pantalla de comandos excede el espacio visible, y en tal caso si
pretendemos pasar de lnea con la tecla Enter matlab evaluar la
expresin hasta entonces introducida, y como est incompleta enviar
un mensaje de error, de modo que es preciso advertirle antes de
cambiar de lnea que pretendemos continuar. Para tal fin est el
operador tres puntos . . . al final del prrafo que queremos proseguir.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 48 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 49 de 54

if x * x > y * y , disp(la norma de x es mayor que la de y); . . .

end; disp (la norma de x no supera la de y);

g. end cuidado, en un contexto diferente al if end, leer el help.

if x (end) > y (end 1) , disp(6 es mayor que 8); . . .

end; disp (6 no es mayor que 8);

h. sum sum(x) + sum(y) + sum([x , y; y, x;])

2. Como en el anterior, para las matrices A =[1:4;2:5;3:6]; B=[1 2;1 2;2 3]


a. A(3,3) + B(end) + B(end, 1) A(6)
b. det trace det (A(1:3, 2:4)) + trace(B(1:2,1:2))
c. sum(A) + sum(B) sum(A,2) sum(B , 2)
d. sum( A (:) ) + sum ( A, 2)
e. [A ;A(end, :)] + [B B;B(:,1)', B(3,2)]
f. H = [ [ A ; sum(A) ] [ sum(A,2) ; sum(A(:)) ] ]
g. C = A(1:3, 2:4) + eye(3)
h. det ( C ^2 ) det (C ) ^2
i. det ( C .^2 ) det (C ) ^2

3. Dados t = anu -necid omoc- areuf oeus le is;

h = etnem al ed osoper orup nu ,augerT ;

a. Guardar en la variable a las letras de t que ocupan posicin impar.


b. En b las de h que ocupan una posicin par numeradas desde la
derecha.
c. Crear una matriz versculo cuya primer fila sea t invertida, la segunda
h invertida.
d. Crear una matriz prosa de una fila cuya primera columna sea t
invertida, la segunda un espacio en blanco, la tercera h invertida.
e. para cualesquiera t, h puede crearse versculo?

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 49 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 50 de 54

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.

5. Indicar lo que las breves secuencias de comandos siguientes significan,


ejecutarlas.
a. t = 1:100; sum( t )
b. t = 1:100; sum( t .^2 )
c. t = 1:100; sum( t .^ (-1/4) )
d. t = (0: .01: 1); tabla = [t, t.^2, t.^3, exp(t)]
e. t = (0: .01: 1); cos(t).^2 + sin(t).^2
f. t = (0: .01: 1); cos(t.^2)+sin(t.^2)
g. t = (0: .01: 1); cos(t.^2) .^2+sin(t.^2).^2
h. t=linspace(0,2*pi,9); fill(cos(t) , sin(t) , b); % sern ocho o nueve
% los lados del polgono azul?
i. t=linspace(0,2*pi,200); fill(cos(t) , sin(t) , 'b');hold on; ...

fill (cos(4*t).*cos(t), cos(4*t).*sin(t), 'y');hold off; % margarita


boquense

j. % hacer un help sobre fill para ver argumentos extendidos

t=(0:.1:2*pi)';x=sin(t);y=cos(t); ...

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 50 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 51 de 54

fill( [x-1 x+2 (x+1) /2 ] , [y-2 y+1 2*y] , 'c' );

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.

f3. Bisectriz del primer cuadrante.

f4. Bisectriz del segundo cuadrante.

g. Graficar en una conveniente vecindad de 0 las funciones definidas por


f(x) = x sen(1/x) , g(x) = x2 sen (1/x), h(x) = x ln(x).
h. Graficar la funcin f:[5, 3) R dada por

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 51 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 52 de 54

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?

If x-1> =0,u=x-1; plot (x,u,r);end; u=1-x; plot (x,u,y); ...

i=1;t=0:.1:1;u=t.^i-sqrt(t)+1;plot(u,t); i=i+1; [t,u,u.^2];

fill(t,u,u,t,,u,u);h=esto es ilegible!; acerocapi0(h); disp(h);

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

9. Implementar una funcin 10

llamada miapellidoderiv0 que 5


reciba dos argumentos: un vector
t y un vector u de la misma 0

[fernandoacero ] uso interno curso anlisis II fiuba 2010 -5 paraelcampusvirtual, 52 de 54

-10
0 0.5 1 1.5 2 2.5 3
Fiuba/MatLab/elementalsimo Leccin 1 , 53 de 54

longitud. La respuesta es un grfico como el de la figura en el que se


represente u, su derivada u y su derivada segunda u vs. t, entendiendo
desde luego la derivada como una derivacin numrica implementada en el
mismo programa. As, si en particular se ejecutara, a modo de prueba, la
funcin implementada sobre los vectores dados por t = 0: .01 : 3; u = t .^3
3*t .^ 2 + 1; debiera producir un grfico semejante al de la figura tras el
comando miapellidoderiv0 ( t, u). Adoptar todas las decisiones convenientes
y explicitarlas en los comentarios del programa. Ayuda: con similar tcnica
a la utilizada para la funcin de desplazamiento es fcil construir un vector
delta de uno dado (esto es el que carga el incremento, para cada punto,
entre un punto y el siguiente ) y luego habr que pensar en una punto
divisin.

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.

Ciertamente ser necesario tomar una decisin: como el centro de rotacin


es fijado por el usuario una vez que ha ingresado la figura (mediante A),
podra ser que su intencin fuese pensarlo como anclado a ella, o bien que
est pensando en un centro absoluto; segn lo que se interprete el centro
deber moverse o no con la traslacin inicial previa a la rotacin. Creo que
se pensara en un centro absoluto con mayor naturalidad, lo que no es sino
una opinin.

En cualquier caso explicitar el funcionamiento del programa en las lneas


que encabezan el M-file para que el usuario pueda, con esa ayuda, ingresar
lo que realmente pretende.

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

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 53 de 54


Fiuba/MatLab/elementalsimo Leccin 1 , 54 de 54

flecha indicativa del sentido e intensidad de la rotacin ingresada por el


usuario, y posiblemente sea preferible diferir el intento.

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.

[fernandoacero ] uso interno curso anlisis II fiuba 2010 paraelcampusvirtual, 54 de 54

También podría gustarte