Capítulo 1

Matrices y Sistemas de Ecuaciones

1.1 Sistemas de Ecuaciones Lineales

Un sistema de m ecuaciones con n incógnitas se escribe como:

(a11a1nam1amn)(x1xn)=(b1bm)\begin{pmatrix} a_{11} & \cdots & a_{1n} \\ \vdots & \ddots & \vdots \\ a_{m1} & \cdots & a_{mn} \end{pmatrix} \begin{pmatrix} x_1 \\ \vdots \\ x_n \end{pmatrix} = \begin{pmatrix} b_1 \\ \vdots \\ b_m \end{pmatrix}

O más compacto: Ax=bA\mathbf{x} = \mathbf{b}.

1.2 Operaciones Matriciales

Suma

(A+B)ij=aij+bij(A + B)_{ij} = a_{ij} + b_{ij}

Mismo tamaño, elemento a elemento.

Multiplicación

(AB)ij=kaikbkj(AB)_{ij} = \sum_k a_{ik} b_{kj}

A(m×n) · B(n×p) = C(m×p).

Transpuesta

(AT)ij=aji(A^T)_{ij} = a_{ji}

Intercambia filas y columnas.

python
import numpy as np

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])

print("A + B:
", A + B)
print("A @ B:
", A @ B)  # multiplicación matricial
print("A.T:
", A.T)      # transpuesta

# Resolver Ax = b
b = np.array([5, 11])
x = np.linalg.solve(A, b)
print("Solución:
", x)

# Verificar
print("A @ x =
", A @ x)  # debería dar b

1.3 Eliminación Gaussiana

Algoritmo para resolver sistemas transformando la matriz a forma escalonada:

  1. Hacer pivote = 1 (dividiendo la fila)
  2. Eliminar la columna bajo el pivote (restar múltiplos)
  3. Repetir para la siguiente columna/fila
  4. Sustitución hacia atrás para encontrar la solución
python
import numpy as np

A = np.array([[2, 1, -1],
              [-3, -1, 2],
              [-2, 1, 2]], dtype=float)
b = np.array([8, -11, -3])

# Eliminación Gaussiana con numpy
_, pivots = np.linalg.vector_norm(A, axis=1), ... 
# numpy ya tiene solve, pero veamos los pasos:

# Matriz aumentada
aug = np.hstack([A, b.reshape(-1, 1)])
print("Forma escalonada:")
# Usando eliminación con librería sympy para ver pasos
from sympy import Matrix, pprint
M = Matrix(np.hstack([A, b.reshape(-1, 1)]))
pprint(M.rref()[0])  # forma reducida

1.4 Matriz Inversa

Si A1A=IA^{-1}A = I, entonces la solución es x=A1b\mathbf{x} = A^{-1}\mathbf{b}. Solo existe si A es cuadrada y det(A)0\det(A) \neq 0.

python
A = np.array([[1, 2], [3, 4]])
A_inv = np.linalg.inv(A)
print("A^{-1}:
", A_inv)
print("A @ A^{-1}:
", A @ A_inv)  # ≈ identidad

# Para sistemas sobredeterminados (más ecuaciones que incógnitas)
# Solución de mínimos cuadrados: x = (A^T A)^{-1} A^T b
A_over = np.array([[1, 1], [1, 2], [1, 3]])
b_over = np.array([2, 3, 4])
x_ls, *_ = np.linalg.lstsq(A_over, b_over, rcond=None)
print("Mínimos cuadrados:", x_ls)