inhoud vorige volgende

6. Arrays en matrices

Spreadsheets zijn bij uitstek geschikt om bewerkingen met numerieke tabellen of matrices te maken.

Hierna worden de volgende bewerkingen behandeld:

Sommige van deze bewerkingen kunnen door Excel worden uitgevoerd op een rechthoekige (of vierkante) tabel met getallen, waarbij je het resultaat uiteraard op een vrije plaats in het werkblad plaatst. Voor andere bewerkingen moet je met arrays werken. Dit zijn eveneens rechthoekige tabellen met getallen, waarbij de tabel getallen als één geheel wordt opgevat en je geen bewerkingen (zoals het opnemen in een formule) met individuele elementen doen.

In de rest van dit hoofdstuk wordt met een tabel getallen een tabel bedoeld waarin de getallen individueel kunnen worden behandeld; anders wordt de term array gebruikt.

Je zal in dit hoofdstuk werken met een werkboek Matrix.xls. Oprn dit bestand vanuit P:\Excel 97 openen en bewaar het op je I: schijf.

6.1 Bewerkingen met een tabel met getallen

Vooreerst zal je twee tabellen getallen en een scalair getal aanbrengen en een naam geven. Verderop zal je er een aantal bewerkingen mee uitvoeren. Dit zal uiteindelijk leiden tot het werkblad Bewerkingen met matrices (figuur 1). Geef vooraf de naam aan het werkblad door zijn sheet tab te dubbelklikken en de naam in te vullen.

Je voert de getalwaarden in de 2 x 3 matrices A en B het gemakkelijkst in door eerst de matrix te selecteren en vervolgens de waarden in te typen per kolom. Met ENTER ga je naar het volgende element in de kolom. Wanneer je de matrices per rij wilt invullen, moet je na elk element op tab drukken in plaats van op ENTER. Je kan het kader vóór of na het intypen van de waarden aanbrengen met de 11de knop van de Borders lijst. Geef verder sheet-level namen:

B3:D4: Insert, Name, Define..., 'Bewerkingen met matrices'!A
B6:D7: Insert, Name, Define..., 'Bewerkingen met matrices'!B
B9: Insert, Name, Define..., 'Bewerkingen met matrices'!n

6.1.1 Som en verschil van een tabel getallen

Je kan de matrix A+B op twee manieren berekenen:

H17 {=MMULT(B6:D7,B12:C14)}
figuur 1: Het werkblad 'Bewerkingen met matrices'

Gebruik de copy and paste special methode om A+B te berekenen:

  1. Selecteer tabel A (B3:D4).
  2. Kopieer met de Copy knop naar het clipboard.
  3. Selecteer de nog lege tabel A+B (G3:I4).
  4. Plak de inhoud van het clipboard met ENTER of de Paste knop.
  5. Selecteer tabel B (B6:D7).
  6. Kopieer met de Copy knop naar het clipboard.
  7. Selecteer tabel A+B (G3:I4).
  8. Plak de inhoud van het clipboard met het commando
    Paste All except borders, Operation None
    figuur 2: Het Paste Special dialoogvenster

    Edit, Paste Special...

    Kies in het Paste Special dialoogvenster (figuur 2) de opties Paste All except borders en Operation: Add. De te plakken celinhouden worden opgeteld bij de celinhouden die er reeds staan. Druk eventueel op esc om de stippellijn rond tabel B te verwijderen.

Gebruik de methode met formules om A–B te berekenen:

  1. Selecteer tabel A–B (G6:I7).
  2. Typ de formule voor de eerste cel (G6), =B3+B6 in en beëindig met CTRL+ENTER of sleep de fill handle naar G6:I7.
  3. Breng (pas) achteraf het kader aan met de 11de knop uit de Borders lijst.

Opmerkingen:

6.1.2 Een tabel getallen met een scalair (getal) vermenigvuldigen

In cel B9 staat het getal n (waarde 5) waarmee de matrix A moet worden vermenigvuldigd tot het resultaat in G9:I10.

Het berekenen van de matrix n.A kan eveneens op twee wijzen gebeuren:

Bij de copy and paste special methode voer je de volgende acties uit:

  1. Selecteer tabel A (B3:D4).
  2. Kopieer met de Copy knop naar het clipboard.
  3. Selecteer de nog lege tabel n.A (G9:I10).
  4. Plak de inhoud van het clipboard met ENTER of de Paste knop.
  5. Selecteer n (B9).
  6. Kopieer met de Copy knop naar het clipboard.
  7. Selecteer tabel n.A (G9:I10).
  8. Plak de inhoud van het clipboard met het commando

    Edit, Paste Special..., Paste All except borders, Operation: Multiply

    De reeds aanwezige celinhouden worden vermenigvuldigd met de geplakte waarde.

Bij de methode met de formules voer je de volgende acties uit:

  1. Selecteer tabel n.A (G9:I10).
  2. Typ de formule voor de eerste cel (G9), =B3*$B$9 of =B3*n in en beëindig met CTRL+ENTER of sleep de fill handle naar G9:I10.
  3. Breng (pas) achteraf het kader aan met de 11de knop van de Borders lijst.

Opmerkingen:

6.1.3 Een tabel getallen transponeren

Transponeer nu de matrices in de vorm van de getallentabellen A en A+B (verwissel rijen en kolommen). Hierbij is enkel nog de copy en paste special methode mogelijk:

  1. Selecteer tabel A (B3:D4).
  2. Kopieer met de Copy knop naar het clipboard.
  3. Selecteer de nog lege tabel trans(A) (B12:C14) of zijn eerste cel (B12).
  4. Plak de inhoud van het clipboard met het commando
  5. Edit, Paste Special..., Paste All except borders, Operation: None, kruis Transpose aan

    Bij het plakken wordt de tabel getransponeerd.

  6. Klik de 11de knop in de Borders lijst om het kader aan te brengen.

Opmerkingen:

6.2 Arrays

Met de hierboven gebruikte methodes is het niet mogelijk matrices te vermenigvuldigen (de laatste bewerkingen in figuur 1) of vierkante matrices te inverteren. Daarvoor zijn functies nodig die niet één resultaat opleveren maar een hele tabel aan resultaten. Zulke tabellen, die steeds in hun geheel worden behandeld, worden arrays genoemd. Het zijn steeds formules (die beginnen met een = teken), die voor alle cellen uit de tabel gelijk zijn. Dit houdt in dat de formule eigenlijk maar éénmaal voorkomt. Het berekende en getoonde resultaat kan echter in alle cellen van de array verschillen.

Een array formule wordt onderscheiden van een gewone formule doordat ze tussen accolades staat { }. Deze worden aangebracht door het intypen van de formule niet te beëindigen met ENTER, maar wel met SHIFT+CTRL+ENTER. De formule zal dan in elke cel worden aangebracht.

6.2.1 Array constanten en array formules

Ook constanten (getallen, teksten) kunnen in een array voorkomen. In dat geval worden ze als een formule aangebracht door ze na het = teken tussen { } te plaatsen, waarbij de waarden in een rij door komma's worden gescheiden en de rijen door kommapunten. Zo kan je de 2 x 3 matrix

123
456

in B3:D4 invoeren door eerst de 2 x 3 matrix te selecteren, daarna de formule ={1,2,3;4,5,6} in te typen en deze met SHIFT+CTRL+ENTER te beëindigen. Dit wordt dan in de formulebalk genoteerd als

B3:D4:

{={1,2,3;4,5,6}}

Deze werkwijze biedt nochtans weinig voordelen t.o.v. het intypen van een getal in elke cel.

Je kan een gewone formule in een geselecteerde tabel omvormen tot een array formule op de volgende wijze:

  1. Selecteer de tabel.
  2. Klik in de formulebalk. De formule van de eerste cel wordt getoond.
  3. Druk op SHIFT+CTRL+ENTER om de formule tot een array formule en de tabel tot een array om te vormen. In de formulebalk worden { } rond de formule geplaatst.

Opmerking:

Omgekeerd kan je een array met formules in een gegevenstabel omvormen op de volgende wijze:

  1. Selecteer de tabel.
  2. Klik in de formulebalk.
  3. Druk op CTRL+ENTER om de array tot een gewone tabel om te vormen. Nu staat de eerste waarde uit de array in elke cel. De { } rond de formule in de formulebalk werden verwijderd.

Opmerking:

Array formules hebben meestal dezelfde gedaante als gewone formules. Het onderscheid met gewone formules is:

6.2.2 Bewerkingen met arrays die je ook met gewone tabellen getallen kan uitvoeren

Je kan de volgende bewerkingen zowel met gewone tabellen getallen als met arrays uitvoeren:

Bekijk opnieuw de lay-out van Bewerkingen met matrices (figuur 1). De formules zijn in array gedaante:

B3:D4: getalwaarden 1 tot 6
(per rij)
of {={1,2,3;4,5,6}} (matrix A)
B6:D7: getalwaarden 7 tot 12
(per kolom)
of {={7,9,11;8,10,12}} (matrix B)
B9: 5   (getal n)
G3:I4: {=B3:D4+B6:D7} of {=A+B}  
G6:I7: {=B3:D4-B6:D7} of {=A-B}  
G9:I10 {=B9*B3:D4} of {=n*A}
B12:C14: {=TRANSPOSE(B3:D4)} of {=TRANSPOSE(A)}  
F12:H14: {=TRANSPOSE(G3:I4)} of {=TRANSPOSE(A+B)}  

De eerste drie formules, die constanten weergeven, vergen geen verduidelijking. Je kan de matrices met constante waarden zowel in de vorm van een tabel getallen opgeven als in de vorm van een array. Omdat deze laatste werkwijze meer typwerk vergt en kans op typfouten meebrengt, en daarenboven het verwijzen naar individuele cellen niet mogelijk is, is het aan te bevelen arrays die zuiver uit getalconstanten bestaan niet te gebruiken.

Je bekomt de formule voor A+B als volgt bekomen vooraf de namen A en B zijn gedefinieerd:

  1. Selecteer de range voor de array A+B.
  2. Typ de formule in: =A+B.
  3. Beëindig de formule met SHIFT+CTRL+ENTER.

Op een analoge wijze verkrijg je de formule voor het verschil van twee matrices (A–B) en de vermenigvuldiging van de matrix met een scalair getal (n.A).

Bij het transponeren van een matrix gebruik je de functie TRANSPOSE(array):

  1. Selecteer de range voor de array trans(A) of trans(A+B).
  2. Klik de Paste Function knop. Zoek de TRANSPOSE functie in het Paste Function dialoogvenster in de Lookup & Reference categorie.
  3. Typ het argument in (A of A+B) in het TRANSPOSE dialoogvenster en beëindig de formule met SHIFT+CTRL+ENTER.

Bij deze werkwijze blijft het verband tussen de oorspronkelijke cellen met waarden en de cellen met formules bestaan. Ze is daarenboven eenvoudiger dan de methode met tabellen getallen.

Opmerkingen:

6.2.3 Arrays vermenigvuldigen

Je vermenigvuldigt matrices met de functie MMULT(array1,array2).

De MMULT heeft twee argumenten die in het algemeen beide arrays moeten zijn. Daarenboven moeten de regels die geldig zijn bij de vermenigvuldiging van matrices worden gerespecteerd:

Maak als voorbeeld de producten trans(A) . B en B . trans(A). De formules voor het product van matrices zijn:

B16:D18: {=MMULT(TRANSPOSE(A),B)}
G16:H17: {=MMULT(B,TRANSPOSE(A))}

Opmerkingen:

Wanneer je in het View tabblad van het Options dialoogvenster Formulas aankruist, zie je de formules (figuur 4), maar de {} worden enkel in de formulebalk getoond.

B18  {=MMULT(TRANSPOSE(A),B)}
figuur 4: De formules in het werkblad 'Bewerkingen met matrices'

6.2.4 Een matrix inverteren

Je kan eveneens de inverse van een matrix berekenen, wanneer deze althans bestaat. Hiervoor moet de matrix vierkant zijn (evenveel rijen als kolommen hebben) en een van nul verschillende determinant hebben. Je gebruikt hierbij de functies MDETERM(array) en MINVERSE(array).

A, det(A), inv(A), inv(A)
figuur 5: Het werkblad 'Stelsel van Cramer'

Stel als voorbeeld het werkblad Stelsel van Cramer (figuur 5) op. Drie matrices hebben sheet-level namen gekregen: A (B3:D5), b (G3:G5) en x (G9:G11). De formules zijn:

B7: =MDETERM(A)
B9:D11: {=MINVERSE(A)}, Format, Cells…, Number tabblad, Category: Number, Decimal places: 4, verwijder de aankruising bij Use 1000 separator, Negative numbers: -1234.3210
B13:D15: {=MINVERSE(A)}, Format, Cells…, Number tabblad, Category: Fraction, Type: Up to two digits (21/25)

Je kan een stelsel van Cramer oplossen (stelsel met evenveel lineaire vergelijkingen als onbekenden en juist één oplossing) met behulp van deze functies. Het stelsel vergelijkingen kan worden geschreven in de gedaante

A . x = b

De oplossing van het stelsel wordt bekomen door

x = A-1 . b

of met de array formule:

G9:G11: {=MMULT(MINVERSE(A),b)} of {=MMULT(B8:D10,b)}

6.3 Bewerkingen met vectoren

Wanneer je vectoren definieert als matrices die bestaan uit één kolom (of één rij), dus als kolomvectoren (of rijvectoren), dan kan je hierop ook enkele bewerkingen uitvoeren, die steeds één enkel getal als resultaat hebben. De vectoren moeten steeds dezelfde dimensie hebben (zelfde type – rij of kolom – en evenveel elementen). Deze formules zijn geïllustreerd in het werkblad Bewerkingen met vectoren (figuur 6).

B20  =SUMXMY2(x,y)
figuur 6: Het werkblad 'Bewerkingen met vectoren'

De formules zijn:

B14: =SUMPRODUCT(x,y) scalair produkt van de vectoren x en y
B15: =SUMSQ(x) kwadraat van de vector x
B16: =SUMSQ(y) kwadraat van de vector y
B17: =SUMX2MY2(x,y) som van het verschil van de kwadraten van x en y
B18: =SUMX2PY2(x,y) som van de som van de kwadraten van x en y
B19: =SUMXMY2(x,y) kwadraat van de vector x – y

Opmerkingen:


inhoud vorige volgende