Download Document

Document related concepts

Matriz (matemáticas) wikipedia , lookup

Teorema de Laplace wikipedia , lookup

Modelo de ecuaciones simultáneas wikipedia , lookup

Multiplicación de matrices wikipedia , lookup

Matriz ortogonal wikipedia , lookup

Transcript
Arreglos
Arreglos Bidimensionales.
● Análogo a una matriz. Una lista de listas
o mejor aún un vector de vectores.
● Ya no es suficiente especificar un elemento
de una matriz sino que es necesario 2
índices. El primer elemento es el renglón y
el segundo elemento es la columna.
A=[[1,2],[3,4],[5,6]]
para indicar el elemento A[0][0], A[1][0]
● Generar un arreglo de 3x2, donde cada elemento es 4
A=[[0,0],[0,0],[0,0]]
for i in range(3):
for j in range(2):
A[i][j]=4
● Hacer un arreglo de 3x4 con puros ceros, empezando
con una lista vacía.
A=[ ]
for i in range(3):
A.append([0]*4)
● Llenar la matriz A con valores dados por el usuario.
for i in range(m):
for j in range(n):
A[i][j]=float(raw_input('da la componente (%d,%d)'%
(i,j)))
Cuadrados mágicos
● Consiste en una distribución de números en filas y
columnas, formando un cuadrado. Tal que los números
de una fila y/o columna suman lo mismo.
6
1
8
7
5
3
2
9
4
● Cuadros mágicos tienen su origen en China. Según
cuenta una leyenda, el primer cuadrado mágico fue
revelado al emperador Yu (siglo XII A.C) por una
tortuga divina que apareció en el río Lu, la cual lo
llevaba en su caparazón.
● El primer cuadrado mágico documentado en Europa
aparece en el grabado Melancolía de Alberto Durero
Propiedades de los cuadrados mágicos
● Sumar un escalar (c) y obtener otro cuadrado mágico
(N'=N+o·c), donde o es el orden del cuadrado mágico. Lo
mismo para la resta de un escalar (N'=N-o·c),
multiplicación (N'=(o·c)N) y división (N'=N/(c·o))
7
2
3
0
4
8
5
6
1
+2 =
9
4
5
2
6
10
7
8
3
● Suma y Resta de cuadrados mágicos regresa otro
cuadrado mágico. N1+N2=N3 (12+36=48)
7
2
3
0
4
8
5
6
1
+
15
0
21
18
12
6
3
24
9
=
22
2
24
18
16
14
8
30
10
Se pueden intercambiar entre sí 2 filas junto con 2 columnas
simétricas en bloque.
Ejemplo: Intercambio de la primera fila con la cuarta, junto con
la primera y cuarta columna.
8
4
3
15
6
10
13
1
1
10
13
6
5
9
2
14
5
9
2
14
14
9
2
5
11
7
12
0
11
7
12
0
0
7
12
11
6
10
13
1
8
4
3
15
15
4
3
8
Para los cuadrados mágicos de 4x4, casillas en vértices de
rectángulos concéntricos paralelos al cuadrado suman N.
8
4
3
15
8
-
-
15
-
-
-
-
-
-
-
-
-
4
3
-
5
9
2
14
-
-
-
-
-
9
2
-
5
-
-
14
-
-
-
-
11
7
12
0
-
-
-
-
-
7
12
-
11
-
-
0
-
-
-
-
6
10
13
1
6
1
-
-
-
-
-
-
-
-
-
10
13
-
● Determinar el valor de la casilla central sólo
conociendo el valor N.
a
b
c
K
d
e
f
a+b+c=N; a+K+f=N; b+k+e=N; c+K+d=N: d+e+f=N
Sumando las ecuaciones que tienen K
(a+b+c) + 3K+(d+e+f) = 3N
N+3K+N=3N
K=N/3
Una posible forma para construir cuadrados mágicos de orden
3
a+b
a-(b+c)
a+c
a-(b-c)
a
a+b(b-c)
a-c
a+(b+c)
a-b
Con a, b, y c números enteros cualesquiera. Dando N y 2
casillas se puede determinar cualquier cuadrado mágico.
No existen métodos generales para construir cuadrados
mágicos, sobre todo para los de orden par.
Hacer el código en Python para el cuadrado
mágico con n=15
6
1
8
7
5
3
2
9
4
Código en Python
n=float(raw_input('Cual es el valor de n'))
casilla11=float(raw_input('da la casilla 1,1'))
casilla23=float(raw_input('da la casilla 2,3'))
a=n/3.0
b=casilla11-a
c=a+b-casilla23
cuadro_magico=[[a+b,a-(b+c),a+c],[a-(b-c),a,a+(b-c)],[a-c,a+
(b+c),a-b]]
print cuadro_magico
Probar con el cuadrado mágico
n=5.1
2.6
1.1
1.4
0.5
1.7
2.9
2
2.3
0.8
Matrices
● Dos matrices de m x n, se definen iguales si
y sólo si sus elementos correspondientes
son iguales
Aij=Bij
● Al conjunto de todas las matrices de m x n,
se puede definir las siguientes operaciones
○ La suma de dos matrices da como
resultado una tercera matriz.
(A+B)ij=Aij+Bij
○ Un escalar por una matriz regresa otra
matriz.
(cAij)=cAij
● Para saber el número de renglones de un
arreglo, se puede usar
len(A)
● Para conocer el número de columnas de un
arreglo, le pregunto a Python cuantos
elementos tiene el primer elemento de la
lista
len(A[0])
● Para hacer la suma de 2 matrices dadas, se
puede utilizar el pedazo de código
for i in range(len(A)):
for j in range(len(A[0])):
suma[i][j]=A[i][j]-B[i][j]
● Multiplicar un escalar a un matrices:
for i in range(len(A)):
for j in range(len(A[0])):
C[i][j]=5.*A[i][j]
● Multiplicación entre matrices. Sólo se pueden multiplicar
matrices si el número de columnas de la primera es
igual al número de renglones de la segunda.
Cij=AikBkj
a11
a12
a13
a21
a22
a23
b11
b12
b21
b22
b31
b32
=
a11b11+a12b21+a13b31
a11b12+a12b22+a13b32
a21b11+a22b21+a23b32
a21b12+a22b22+a23b32
for i in range(m):
for j in range(p):
s=0.0
for k in range(n):
s+=A[i][k]*B[k][j]
C[i][j]=s
m= renglones primera matriz
n=columnas de la primera.
matriz y renglones de la
segunda.
p=número de columnas de
segunda matriz
Módulo Numpy
● Librería de Python que facilita la creación de arreglos
multidimensionales.
● Acrónimo de Python numérico
● Existe la función array, que recibe una lista de listas y la
regresa como arreglo.
a=array([[1,2,3],[4,5,6],[7,8,9]],float)
● Puedo generar un arreglo consecutivo de números con
la función arange
b=arange(0.1,1,0.1)
print b
[0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9]
● Los argumentos de la función arange(origen, final,
tamaño del paso). El default del tamaño del paso es 1
y del origen es cero.
● Se puede definir arreglos de puros ceros y
unos.
b=zeros(10).reshape(2.5)
print b
array([[0., 0. , 0., 0., 0.]
[0., 0., 0., 0., 0.])
b=ones(10)
print b
array([1., 1., 1., 1., 1., 1., 1., 1., 1., 1.])
● También puedo decir la forma del arreglo sin
usar reshape
c=ones([5,7])
Diversas funciones de Numpy
● b.ndim Regresa las dimensiones del arreglo
● b.size Indica el número de elementos que contiene el
arreglo
● b.shape Regresa un tuple con el número de renglones y
columnas.
● b.transpose() Da la transpuesta del arreglo b.
● b.ravel() Reordena el arreglo en una sola fila.
● linspace(start,stop,num=50,endpoint=True,
retstep=False) Regresa una muestra de números
igualmente espaciados en un intervalo específico. Num
indica el número de muestras a generarse, el default=50.
El endpoint es booleano (opcional), si False no se incluye
el número final y el paso serán más uniformes.Si
retsteo=True me imprime el tamaño de paso usado.
Algebra lineal con Numpy
Importar la librería linalg, que está en numpy
● dot(a,b) Regresa el producto de dos matrices, siempre y
cuando se cumpla la condición para que exista la
multiplicación. Si a y b son vectores, regresa el producto
punto.
● inv(A) Regresa la matriz inversa de A. Si A no es una
matriz cuadrada o es singular regresa un error.
● trace(A) Regresa la traza de una matriz (La suma de los
elementos en la diagonal principal).
c=array([[1,2],[3,4]])
linalg.inv(c)
array([[-2. , 1. ],
[ 1.5, -0.5]])
● Calcular los eigen-cosas de algo. Regresa
los eigen-valores y luego los eigen-vectores.
linalg.eig(c)
(array([-0.37228132, 5.37228132]),
array([[-0.82456484, -0.41597356],
[ 0.56576746, -0.90937671]]))
Solución de un sistema de Ecuaciones
Lineales.
La ecuación matricial AX=B es una manera abreviada de
expresar un sistema de ecuaciones lineales. Ejemplo, sea el
sistema de 3 ecuaciones lineales con 3 incógnitas
36w+51y+13z=3
52w+34y+74z=45
7y+1.1z=33
En forma matricial se representa.
36
51
13
w
52
34
74
y
45
0
7
1.1
z
33
=
3
En el módulo numpy.linalg, la función solve resuelve este
sistema de ecuaciones y entrega la solución de los valores w,
y, z a partir de la matriz A y B.
a=array([[36,51,13],[52,34,74],[0,7,1.1]],float)
b=array([3.,45.,33.])
x=solve(a,b)
print x
array([-7.10829222, 4.13213834, 3.70457422])
Para comprobar, multiplicamos la matriz A por el vector x
encontrado. Con esta multiplicación obtendremos el vector
B.
dot(a,x)
array([ 3., 45., 33.])
print b
array([ 3., 45., 33.])