- Je bouwt de inverse van een omkeerbare 2×2-matrix.
- Je controleert een gevonden oplossing met Ax − b in plaats van haar blind te vertrouwen.
Twee onbekende gewichten leveren samen bekende totalen. Bijvoorbeeld: tweemaal het eerste gewicht plus het tweede is 5, en het eerste min het tweede is 1. Zulke relaties terugrekenen is een klein voorproefje van het zoeken naar modelparameters.
Verdubbelen kun je ongedaan maken door te halveren. Ook een matrix kan een omgekeerde bewerking hebben: de inverse (inverse matrix). Na heen en terug wil je precies je oorspronkelijke invoer terugkrijgen.
1. Een matrixbewerking ongedaan maken
De matrix [[2, 0], [0, 4]] verandert (3, 2) in (6, 8). De matrix [[0.5, 0], [0, 0.25]] maakt daarvan weer (3, 2): iedere as krijgt zijn eigen omgekeerde schaalfactor. Dit is meer dan elk matrixgetal los omkeren; bij gemengde componenten moeten ook de bijdragen worden ontward.
Voor een 2×2-matrix noemen we de bovenste rij (p, q) en de onderste (r, s). Haar determinant D is p maal s min q maal r. Als D niet nul is, werkt deze inverseformule:
Het superscript −1 benoemt de inverse; de factor 1/D deelt ieder getal in de matrix door D. Je wisselt p en s, en keert de tekens van q en r om. Vermenigvuldigen met de oorspronkelijke matrix levert de identiteitsmatrix uit de vorige les.
Noem onze onbekenden u en v. De twee relaties uit de opening worden:
De matrix A is [[2, 1], [1, -1]]: de eerste kolom hoort bij u, de tweede bij v. D is 2 × −1 − 1 × 1 = −3. Verwisselen en tekens omkeren geeft [[-1, -1], [-1, 2]]; delen door −3 geeft rijen (1/3, 1/3) en (1/3, −2/3).
A = [[2, 1], [1, -1]]
p = A[0][0]
q = A[0][1]
r = A[1][0]
s = A[1][1]
D = p * s - q * r
inv = [[s / D, -q / D], [-r / D, p / D]]
print(D) # -3
print(inv[0][0]) # ongeveer 0.333333
Controleer bijvoorbeeld de cel linksboven van A maal inv: 2 × 1/3 + 1 × 1/3 = 1. Rechtsboven krijg je 2 × 1/3 + 1 × −2/3 = 0. Dat zijn precies de eerste twee cellen van de identiteitsmatrix.
Bouw inverse2(A), maar controleer D vóór de deling. if abs(D) <= 1e-10: betekent “kleiner dan of gelijk aan de drempel”; geef dan None terug. Net als hiervoor is dit een praktische oefenafspraak die ook een heel klein maar niet-nul D kan weigeren.
2. Van totalen naar onbekenden
De bekende totalen vormen de vector b = (5, 1). De gezochte vector x bevat (u, v), in die vaste volgorde. De formule vat heenrekenen en terugrekenen samen:
De pijl betekent “dus”, onder de voorwaarde dat de inverse bestaat. De eerste rij van inv geeft u = (5 + 1)/3 = 2. De tweede geeft v = (5 − 2)/3 = 1.
b = [5, 1]
u = inv[0][0] * b[0] + inv[0][1] * b[1]
v = inv[1][0] * b[0] + inv[1][1] * b[1]
print([u, v]) # ongeveer [2.0, 1.0]
Door afronding van een derde kan Python bijvoorbeeld 1.9999999999999998 tonen waar exact 2 hoort. De matrix-vectorlussen uit de eerste matrixles doen dezelfde berekening voor iedere rij.
In los_op2(A, b) roep je eerst je eigen inverse2(A) aan. Controleer if inv is None:: is None vraagt of er geen inverse is teruggegeven; geef dan ook None terug, anders bereken je de twee inproducten.
Veelgemaakte fout: bij mislukken de nulvector teruggeven. Die lijkt een geldige oplossing, terwijl None eerlijk meldt dat deze methode geen antwoord heeft. Een matrix met determinant nul kan geen of juist oneindig veel oplossingen hebben; deze functie probeert dat onderscheid niet te maken.
3. Past je antwoord terug in beide relaties?
Vul (2, 1) terug in: 2 × 2 + 1 = 5 en 2 − 1 = 1. Trek de verwachte totalen (5, 1) af en je krijgt (0, 0). Deze verschilvector heet het residu (residual).
Probeer nu het foute antwoord (2, 0). De berekende totalen zijn (4, 2), dus de verschillen zijn (−1, 1). Optellen zou nul geven en de fout verbergen; daarom zoeken we de grootste absolute afwijking, hier 1.
verschillen = [-1, 1]
grootste = 0
for i in range(len(verschillen)):
afwijking = abs(verschillen[i])
if afwijking > grootste:
grootste = afwijking
print(grootste) # 1
Bouw max_residu(A, x, b) door per rij eerst het inproduct met x te berekenen en b[i] af te trekken. Vergelijk de absolute afwijking met de grootste tot nu toe. Hier kan A rechthoekig zijn: er is voor elke rij één bekend totaal; vormen passen en A is niet leeg.
Een klein residu controleert de totalen, maar garandeert niet altijd nauwkeurige onbekenden. Sommige stelsels veranderen sterk bij een kleine verstoring van de gegevens; bij zulke stelsels blijft voorzichtigheid nodig. Voor grotere stelsels bestaan daarnaast efficiëntere oplosmethoden dan eerst de inverse berekenen; onze expliciete inverse is bedoeld om het idee te leren.
03Wat neem je mee?
- Een inverse maakt een matrixbewerking ongedaan, zolang terugrekenen mogelijk is.
- Houd kolommen, onbekenden en totalen in een vaste volgorde; geef bij weigering
Noneterug. - Controleer het antwoord door vooruit te rekenen en de grootste absolute afwijking te meten.
Hiermee sluit je de matrixmodule af. In de volgende module onderzoek je hoe een kleine verandering in de invoer de uitvoer verandert: de stap naar afgeleiden en later modeltraining.