Listas y tablas vs matrices y vectores

Anuncio
Listas y tablas vs matrices y vectores
Autor José Luis Gómez Muñoz
http://homepage.cem.itesm.mx/jose.luis.gomez
Listas
Aquí creamos una lista y la guardamos en la variable "miLista". Nótese que en el nombre de la variable
estamos usando mayúsculas, pero que no le pusimos mayúscula a la primera letra. Esto es una buena
idea para distinguir los nombres que el usuario define de los nombres que ya tiene Mathematica
definidos, ya que estos últimos siempre comienzan con mayúsculas:
In[1]:=
Out[1]=
miLista = Table@2 ^ i, 8i, 10<D
82, 4, 8, 16, 32, 64, 128, 256, 512, 1024<
Aquí obtenemos el quinto elemento de la lista:
In[2]:=
Out[2]=
miLista@@5DD
32
Otra vez obtenemos el quinto elemento de la lista:
In[3]:=
Out[3]=
Part@miLista, 5D
32
Aquí obtenemos el quinto y el octavo elementos de la lista
In[4]:=
Out[4]=
miLista@@85, 8<DD
832, 256<
Aquí obtenemos el quinto, sexto, séptimo y octavo elementos de la lista
In[5]:=
Out[5]=
miLista@@5 ;; 8DD
832, 64, 128, 256<
Otra vez obtenemos el quinto, sexto, séptimo y octavo elementos de la lista
In[6]:=
Out[6]=
Take@miLista, 85, 8<D
832, 64, 128, 256<
Aquí obtenemos los tres primeros elementos de la lista:
2
FEM00250matrices.nb
In[7]:=
Out[7]=
Take@miLista, 3D
82, 4, 8<
Ahora creamos una lista cuyos elementos son listas:
In[8]:=
Out[8]=
listaDeListas = 88a, b, c<, 8d, e<, 8f, g, h<, 8i, j<<
88a, b, c<, 8d, e<, 8f, g, h<, 8i, j<<
Aquí obtenemos el tercer elemento:
In[9]:=
Out[9]=
listaDeListas@@3DD
8f, g, h<
Aquí obtenemos el primer elemento del tercer elemento de la lista:
In[10]:=
Out[10]=
listaDeListas@@3, 1DD
f
Aquí obtenemos los segundos elementos de todos los elementos de la lista
In[11]:=
Out[11]=
listaDeListas@@All, 2DD
8b, e, g, j<
Aquí desplegamos la lista en forma tabular:
In[12]:=
TableForm@listaDeListasD
Out[12]//TableForm=
a
d
f
i
b
e
g
j
c
h
Aquí desplegamos la lista en forma de Grid:
In[13]:=
Out[13]=
Grid@listaDeListas, Dividers → AllD
a
d
f
i
b c
e
g h
j
Aquí formamos una grid con los primeros dos renglones y las primeras dos columnas
FEM00250matrices.nb
In[14]:=
Out[14]=
3
Grid@Take@listaDeListas, 2, 2D, Dividers → AllD
a b
d e
Aquí formamos una tabla con todos los renglones y las primeras dos columnas
In[15]:=
Out[15]=
Grid@Take@listaDeListas, All, 2D, Dividers → AllD
a
d
f
i
b
e
g
j
Aquí creamos una nueva lista, que consiste en añadir a listaDeListas el renglón {x,y,z}
In[16]:=
Out[16]=
nuevaLista = Append@listaDeListas, 8x, y, z<D
88a, b, c<, 8d, e<, 8f, g, h<, 8i, j<, 8x, y, z<<
Aquí desplegamos la nuevaLista en forma de Grid
In[17]:=
Out[17]=
Grid@nuevaLista , Dividers → AllD
a
d
f
i
x
b c
e
g h
j
y z
Si usamos nuevaLista como argumento de la función Cos[ ], entonces se genera una nueva lista con
los cosenos de cada elemento:
In[18]:=
Out[18]=
In[19]:=
Out[19]=
cosLista = Cos@nuevaListaD
88Cos@aD, Cos@bD, Cos@cD<, 8Cos@dD, Cos@eD<,
8Cos@fD, Cos@gD, Cos@hD<, 8Cos@iD, Cos@jD<, 8Cos@xD, Cos@yD, Cos@zD<<
Grid@cosLista, Dividers → AllD
Cos@aD
Cos@dD
Cos@fD
Cos@iD
Cos@xD
Cos@bD Cos@cD
Cos@eD
Cos@gD Cos@hD
Cos@jD
Cos@yD Cos@zD
Operaciones con listas y tablas
4
FEM00250matrices.nb
Operaciones con listas y tablas
Aquí creamos una lista de listas a la que llamamos tabla1. Nótese el uso de paréntesis para forzar que
primero se lleve a cabo la asignación y despues el formateo (Grid). Si no los hubieramos usado,
entonces tabla1 sería igual al formato (Grid), en lugar de ser igual a la lista de listas.
In[20]:=
Out[20]=
Grid@tabla1 = 88a, b, c<, 8d, e, f<, 8f, g, h<< , Dividers → AllD
a b c
d e f
f g h
Aquí creamos otra lista de listas a la que llamamos tabla2.
In[21]:=
Out[21]=
Grid@tabla2 = 88x, y, z<, 8u, v, w<, 8r, s, t<< , Dividers → AllD
x y z
u v w
r s t
Aquí multiplicamos la tabla1 por la tabla2. Nótese que NO es la multiplicación de dos matrices. Por el
contrario, simplemente se multiplican elemento por elemento.
In[22]:=
Out[22]=
Grid@tabla1 ∗ tabla2 , Dividers → AllD
ax by cz
du ev fw
fr gs ht
Aquí sumamos un número a la tabla, lo cual se traduce en sumar el número a cada elemento de la
tabla.
In[23]:=
Out[23]=
Grid@tabla1 + 7 , Dividers → AllD
7+a 7+b 7+c
7+d 7+e 7+f
7+f 7+g 7+h
Aquí elevamos a la cuarta potencia cada elemento de la tabla
In[24]:=
Out[24]=
Grid@tabla1 ^ 4, Dividers → AllD
a4 b4 c4
d4 e4 f4
f4 g4 h4
Listas como matrices
Vamos a utilizar las tablas que definimos en la sección anterior como matrices. Para mostrar una tabla
FEM00250matrices.nb
5
Vamos a utilizar las tablas que definimos en la sección anterior como matrices. Para mostrar una tabla
como una matriz utilizamos la "envoltura" (wrapper) MatrixForm. Esto NO cambia el contenido de
tabla1, sólo lo muestra como matriz.
In[25]:=
MatrixForm@tabla1 D
Out[25]//MatrixForm=
a b c
d e f
f g h
Tabla1 sigue siendo una lista de listas. El desplegarla como matriz NO la cambió.
In[26]:=
Out[26]=
tabla1
88a, b, c<, 8d, e, f<, 8f, g, h<<
Para multiplicar dos matrices, debemos escribir entre ellas un punto en lugar de un asterisco:
In[27]:=
Out[27]=
tabla1.tabla2
88c r + b u + a x, c s + b v + a y, c t + b w + a z<,
8f r + e u + d x, f s + e v + d y, f t + e w + d z<, 8h r + g u + f x, h s + g v + f y, h t + g w + f z<<
Aquí está otra vez el producto de matrices, usando un punto en lugar de un asterisco, y desplegando el
resultado en forma de matriz:
In[28]:=
[email protected] D
Out[28]//MatrixForm=
c r+b u+a x c s+b v+a y c t+b w+a z
f r+e u+d x f s+e v+d y f t+e w+d z
h r+g u+f x h s+g v+f y h t+g w+f z
Aquí definimos un vector.
In[29]:=
Out[29]=
vector = 8m, n, p<
8m, n, p<
Aquí multiplicamos la matriz tabla1por el vector. Nótese que usamos punto en lugar de asterisco:
In[30]:=
[email protected]
Out[30]//MatrixForm=
a m+b n+c p
d m+e n+f p
f m+g n+h p
Nótese que si usamos el asterísco, entonces NO es la multiplicación de matriz por vector, sino una
multiplicación de elementos de tablas:
6
FEM00250matrices.nb
In[31]:=
MatrixForm@tabla1 ∗ vectorD
Out[31]//MatrixForm=
am bm cm
dn en fn
fp gp hp
Aquí hay una tercera matriz, ahora con números:
In[32]:=
Out[32]=
tabla3 = 881, 2, 3<, 84, 5, 6<, 87, 8, 9<<
881, 2, 3<, 84, 5, 6<, 87, 8, 9<<
Para elevar una MATRIZ a la potencia 4 usamos MatrixPower. Este es el resultado de hacer
tabla3.tabla3.tabla3.tabla3 con puntos.
In[33]:=
MatrixForm@MatrixPower@tabla3, 4D D
Out[33]//MatrixForm=
7560
9288 11 016
17 118 21 033 24 948
26 676 32 778 38 880
Elevar una TABLA a la cuarta potencia es como hace tabla3*tabla3*tabla3*tabla3. Esta NO es una
operación de matrices, por el contrario, es una operación elemento por elemento:
In[34]:=
MatrixForm@tabla3 ^ 4D
Out[34]//MatrixForm=
1
16
81
256 625 1296
2401 4096 6561
Uso de la opción "Table/Matrix" del menú Insert
Utiliza el menu Insert, opción Table/Matrix, New, para crear la siguiente matriz en 10 segundos:
FEM00250matrices.nb
In[35]:=
Out[35]=
miMatriz =
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
0
0
0
0
0
0
0
0
0
1
0
7
0
0
0
0
0
0
0
0
0
1
881, 0, 0, 0, 0, 0, 0, 0, 0, 0<, 80, 1, 0, 0, 0, 0, 0, 0, 0, 0<,
80, 0, 1, 0, 0, 0, 0, 0, 0, 0<, 80, 0, 0, 1, 0, 0, 0, 0, 0, 0<,
80, 0, 0, 0, 1, 0, 0, 0, 0, 0<, 80, 0, 0, 0, 0, 1, 0, 0, 0, 0<,
80, 0, 0, 0, 0, 0, 1, 0, 0, 0<, 80, 0, 0, 0, 0, 0, 0, 1, 0, 0<,
80, 0, 0, 0, 0, 0, 0, 0, 1, 0<, 80, 0, 0, 0, 0, 0, 0, 0, 0, 1<<
Un tipo de suma que no está definido
Aquí tenemos una lista de vectores 2D
In[36]:=
Out[36]=
listaDeVectores = 880, 0<, 81, 3<, 82, 3<, 82, 1<<
880, 0<, 81, 3<, 82, 3<, 82, 1<<
Aquí tenemos un vector:
In[37]:=
Out[37]=
miVector = 810, 20<
810, 20<
Ahora quisieramos sumar miVector a cada vector de la listaDeVectores. Pero Mathematica nos
responde con un mensaje de error y no realiza la operación que queremos
In[38]:=
listaDeVectores + miVector
Thread::tdlen : Objects of unequal length in 880, 0<, 81, 3<, 82, 3<, 82, 1<< + 810, 20< cannot be combined. à
Out[38]=
810, 20< + 880, 0<, 81, 3<, 82, 3<, 82, 1<<
Abajo se muestra una forma de realizar la operación deseada. El comando MAP aplica a cada elemento de listaDeVectores la función.
In[40]:=
Out[40]=
Map@Function@m, m + miVectorD, listaDeVectoresD
8810, 20<, 811, 23<, 812, 23<, 812, 21<<
Abajo se muestra una forma de realizar la operación deseada. El comando MAP aplica a cada elemento de listaDeVectores el comando #+miVector&. En este último comando, el & indica que el
comando es una función y el # corresponde al elemento que se está usando como argumento de esa
8
FEM00250matrices.nb
función
In[41]:=
Out[41]=
Map@ + miVector &, listaDeVectoresD
8810, 20<, 811, 23<, 812, 23<, 812, 21<<
Ejemplo de uso de matrices
Aquí tenemos una colección de puntos en 2D
In[42]:=
Out[42]=
misPuntos = 880, 0<, 81, 2.5<, 81, 1<, 82, 1<<
880, 0<, 81, 2.5<, 81, 1<, 82, 1<<
Aquí graficamos el polígono que se forma al unir los puntos:
In[43]:=
Graphics@Polygon@misPuntosD, Axes → True, AspectRatio → AutomaticD
2.5
2.0
1.5
Out[43]=
1.0
0.5
0.5
1.0
1.5
2.0
Ahora definimos una matriz de rotación. Los elementos de esta matriz son función del parámetro q
In[44]:=
matrizRotacion@θ_D := K
Cos@θD − Sin@θD
O
Sin@θD Cos@θD
Este es un ejemplo del uso de la matriz. Al multiplicar el vector {1,2.5}, obtenemos otro vector que es
FEM00250matrices.nb
9
Este es un ejemplo del uso de la matriz. Al multiplicar el vector {1,2.5}, obtenemos otro vector que es
de hecho el resultado de rotar el vector alrededor del origen un ángulo q.
In[45]:=
Out[45]=
matrizRotacion@45 °D.81, 2.5<
8− 1.06066, 2.47487<
Utilizando el comando MAP como en la sección anterior, podemos aplicar la matriz de rotación a cada
uno de los vectores en la lista misPuntos. La lista resultante se guarda en la variable nuevosPuntos:
In[46]:=
Out[46]=
nuevosPuntos = Map@ matrizRotacion@45 °D. &, misPuntosD
:80, 0<, 8− 1.06066, 2.47487<, 90,
2 =, :−
1
2
+
1
2 ,
2
+
2 >>
Al dibujar el polígono de los nuevosPuntos se obtiene el mismo polígono que con misPuntos pero
rotado 45° alrededor del origen:
In[47]:=
Graphics@Polygon@nuevosPuntosD, Axes → True, AspectRatio → AutomaticD
2.5
2.0
1.5
Out[47]=
1.0
0.5
-1.0
-0.5
0.5
10
FEM00250matrices.nb
Animación usando matrices
In[48]:=
misPuntos = 880, 0<, 81, 2.5<, 81, 1<, 82, 1<<;
Cos@θD − Sin@θD
matrizRotacion@θ_D := K
O;
Sin@θD Cos@θD
Manipulate@
nuevosPuntos = Map@ matrizRotacion@anguloD. &, misPuntosD ;
Graphics@Polygon@nuevosPuntosD, Axes → True,
AspectRatio → Automatic, PlotRange → 88− 3, 3<, 8− 3, 3<<D,
8angulo, 0 °, 360 °<
D
angulo
3
2
1
Out[50]=
-3
-2
-1
1
2
3
-1
-2
-3
Ejercicios y Preguntas
1.- De un sólo comando multiplica cada elemento de la lista {2,3,4} por cada elemento de la lista
{1,0,3} (la respuesta que debes obtener es la lista {2,0,12})
2.- De un sólo comando calcula el producto punto del vector {2,3,4} por el vector {1,0,3} (la respuesta
que debes obtener es el número 14)
3.- Explica completa y claramente como es
x[4] diferente de x[[4]].
FEM00250matrices.nb
m[3,5]?
5.- ¿Que signfica m[[3,5]]?
6.- ¿Que signfica m[[3]][[5]]?
7.- ¿Que signfica Part[m,3,5]?
8.- ¿Que signfica Part[ Part[m,3], 5]?
4.- ¿Que signfica
Autor José Luis Gómez Muñoz
http://homepage.cem.itesm.mx/jose.luis.gomez
In[51]:=
Out[51]=
In[52]:=
Out[52]=
$Version
9.0 for Microsoft Windows H64−bitL HNovember 20, 2012L
DateString@D
Fri 17 May 2013 18:54:29
11
Descargar