Echte uitvoer van de code:
import numpy as np
def matrix(knopen, staven, reacties):
rij = {k: 2 * i for i, k in enumerate(knopen)}
A = np.zeros((2 * len(knopen), len(staven) + len(reacties)))
for j, (p, q) in enumerate(staven):
e = np.subtract(knopen[q], knopen[p])
e = e / np.linalg.norm(e)
A[rij[p]:rij[p] + 2, j] += e
A[rij[q]:rij[q] + 2, j] -= e
for j, (k, r) in enumerate(reacties):
A[rij[k]:rij[k] + 2, len(staven) + j] += r
return A
knopen = {"A": (0, 0), "B": (0.5, 0), "C": (0.5, 0.5), "D": (0, 0.5)}
reacties = [("A", (1, 0)), ("A", (0, 1)), ("B", (0, 1))]
rand = [("A", "B"), ("B", "C"), ("C", "D"), ("D", "A")]
for naam, staven in (("vierkant", rand), ("met diagonaal AC", rand + [("A", "C")]),
("met twee diagonalen", rand + [("A", "C"), ("B", "D")])):
A = matrix(knopen, staven, reacties)
print(f"{naam:20s}: {A.shape[0]} vergelijkingen, {A.shape[1]} onbekenden, rang {np.linalg.matrix_rank(A)}")vierkant : 8 vergelijkingen, 7 onbekenden, rang 7
met diagonaal AC : 8 vergelijkingen, 8 onbekenden, rang 8
met twee diagonalen : 8 vergelijkingen, 9 onbekenden, rang 8