Skip to content

Instantly share code, notes, and snippets.

@JuniorPolegato
Created September 9, 2016 14:19
Show Gist options
  • Save JuniorPolegato/6bc5c0cf05f1c51348aa22e9acd75eb3 to your computer and use it in GitHub Desktop.
Save JuniorPolegato/6bc5c0cf05f1c51348aa22e9acd75eb3 to your computer and use it in GitHub Desktop.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from __future__ import print_function
import numpy
# Teorema de Laplace
# Pegando sempre a primeira linha, i = 0
# Cofator: (-1)^(i+j) * MC_ij
# (-1)^(i+j) => 1 se i+j for par e -1 se for ímpar, mas aqui i+j=j
# Menor complementar MC_ij aqui será o determinante da matriz menor formada
# pelas linhas sem a primeira e sem a coluna em análise, assim, da matriz
# transposta sem a primeira linha, "mt", tira-se a linha em análise,
# transpõe novamente e calcula o determinante, multiplicando-o pelo elemento
# correspondente da primeira linha, chegando dessa forma a cada elemento de
# Laplace, e então soma-se tudo para chegar ao determinante por Laplace.
def d(m):
if len(m) == 1:
return m[0][0]
mt = zip(*m[1:])
return sum(map(lambda (j, e): e * (1,-1)[j%2] * d(zip(*(mt[:j]+mt[j+1:]))),
enumerate(m[0])))
m2 = [[ 1, 2],
[-5, -3]]
print("d(m2) =", d(m2), "|", numpy.linalg.det(m2))
m3 = [[ 5, 0, 1],
[-2, 3, 4],
[ 0, 2, -1]]
print("d(m3) =", d(m3), "|", numpy.linalg.det(m3))
m4 = [[ 5, 0, 1, 1],
[-2, 3, 4, 2],
[ 0, 2, -1, 3],
[ 1, 2, 3, 4]]
print("d(m4) =", d(m4), "|", numpy.linalg.det(m4))
m5 = [[ 5, 0, 1, 1, 10],
[-2, 3, 4, 2, 13],
[ 0, 2, -1, 3, 25],
[ 1, 2, 3, 4, 18],
[ 5, 3, 6, 4, -8]]
print("d(m5) =", d(m5), "|", numpy.linalg.det(m5))
m10 = [[ 1.00, -0.50, 0.00, 0.00, -0.50, 0.00, 0.00, 0.00, 0.00, 0.00],
[-0.33, 1.00, -0.33, 0.00, 0.00, -0.33, 0.00, 0.00, 0.00, 0.00],
[ 0.00, -0.33, 1.00, -0.33, 0.00, 0.00, -0.33, 0.00, 0.00, 0.00],
[ 0.00, 0.00, -0.33, 1.00, 0.00, 0.00, 0.00, -0.33, 0.00, 0.00],
[-0.33, 0.00, 0.00, 0.00, 1.00, -0.33, 0.00, 0.00, 0.00, 0.00],
[ 0.00, -0.25, 0.00, 0.00, -0.25, 1.00, -0.25, 0.00, 0.00, 0.00],
[ 0.00, 0.00, -0.25, 0.00, 0.00, -0.25, 1.00, -0.25, 0.00, 0.00],
[ 0.00, 0.00, 0.00, -0.25, 0.00, 0.00, -0.25, 1.00, -0.25, 0.00],
[ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.25, 1.00, -0.25],
[ 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, 0.00, -0.25, 1.00]]
print("d(m10) =", d(m10), "|", numpy.linalg.det(m10))
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment