Mostrando entradas con la etiqueta producto de matrices. Mostrar todas las entradas
Mostrando entradas con la etiqueta producto de matrices. Mostrar todas las entradas

jueves, 8 de junio de 2023

Algoritmo de multiplicación de dos matrices cuadradas de orden 3. Implementación en lenguaje Python

ENUNCIADO. Sean dos matrices cuadradas de orden $3$: $A=(a_{ij})_{3 \times 3}$ y $B=(b_{ij})_{3 \times 3}$. Sabemos que el producto $A\,B$, viene dado por $\displaystyle A\,B=(c_{ij})_{3 \times 3}=\sum_{k=1}^{3} a_{ik}\cdot b_{kj}$ para $i=1,2,3$ y $j=1,2,3$. Escríbase un programa en Python para multiplicar dos de esas matrices, elegidas libremente.

SOLUCIÓN

def multiplicar_matrices(A, B):
    C = [[0, 0, 0], [0, 0, 0], [0, 0, 0]]
    
    for i in range(3):
        for j in range(3):
            for k in range(3):
                C[i][j] += A[i][k] * B[k][j]
    
    return C

# Ejemplo de matrices de orden 3
A = [[1, 0, -1],
           [2, 1, 3],
           [-2, 0, -1]]

B = [[4, 1, 0],
           [5, -5, 0],
           [3, 2, 1]]

# Llamada a la función para multiplicar las matrices
C = multiplicar_matrices(A, B)

# Imprimir el resultado C
for fila in C:
    print(fila)

Puesta en marcha del programa y resultado:

>>> %Run multiplicardosmatricesdeorden3.py
[1, -1, -1]
[22, 3, 3]
[-11, -4, -1]
$\diamond$

-oOo-

Utilidades:

  [1] El software básico para trabajar con Python: https://www.python.org/
  [2] Un entorno de trabajo: https://thonny.org/
  [3] Un compilador en línea: https://www.tutorialspoint.com/online_python_compiler.php

martes, 6 de junio de 2023

Un ejercicio con matrices del tipo triangular inferior

ENUNCIADO. Sean $a,b,c,d$ números reales, la matriz triangular inferior $A=\begin{pmatrix}a&0\\ b&a\end{pmatrix}$ no nula y la matriz triangular inferior $B=\begin{pmatrix}c&0\\ d&c\end{pmatrix}$ no nula (nótese que los elementos de las diagonales principales son tales que $A_{11}=A_{22}=a$ y $B_{11}=B_{22}=c$). Compruébese que, así definidas, las matrices $A$ y $B$ conmutan.

SOLUCIÓN. Los cálculos simbólicos los he realizado con ayuda de la herramienta CAS, GNU MAXIMA [1]

(%i28)	A:matrix( [a,0],[b,a]   ); /* Defino una matriz genérica A */
(%o28)	matrix(
		[a,	0],
		[b,	a]
	)
(%i29)	B:matrix( [c,0],[d,c]   ); /* Defino una matriz genérica B */
(%o29)	matrix(
		[c,	0],
		[d,	c]
	)
(%i30)	is(A.B=B.A); /* Compruebo si conmutan. Nótese que en MAXIMA 
                      es necesario usar el punto bajo (.)
                      para la multiplicación de matrices 
                      en lugar del punto elevado (·), pues éste
                      multiplica elemento a elemnto; tal cosa
                      da lugar a muchas confusiones */
(%o30)	true /* en efecto, así es */


(%i31)	A.B; /* Observo el por qué */
(%o31)	matrix(
		[a*c,	0],
		[a*d+b*c,	a*c]
	)
(%i32)	B.A;
(%o32)	matrix(
		[a*c,	0],
		[a*d+b*c,	a*c]
	)
(%i33)	A.B-B.A;
(%o33)	matrix(
		[0,	0],
		[0,	0]
	)
$\diamond$

-oOo-

Utilidades:

  [1] GNU MAXIMA