Lezers zoals jij steunen MUO. Wanneer u een aankoop doet via links op onze site, kunnen we een aangesloten commissie verdienen. Lees verder.

Matrices spelen een cruciale rol op veel verschillende gebieden, waaronder computergraphics, cryptografie en draadloze communicatie. Een matrix is ​​een rechthoekige reeks getallen gerangschikt in rijen en kolommen, gebruikt om een ​​wiskundig object of zijn eigenschap weer te geven.

Een van de bewerkingen die u mogelijk moet uitvoeren, is matrixvermenigvuldiging. Dit vindt toepassingen op veel gebieden, zoals aerodynamicaberekeningen, signaalverwerking, beeldverwerking en seismische analyse. Maar hoe vermenigvuldig je matrices precies?

Hoe twee matrices te vermenigvuldigen

Je stelt de volgorde van een matrix voor als het product van het aantal rijen (m) en het aantal kolommen (n). Om twee matrices te vermenigvuldigen, moet het aantal kolommen van de eerste matrix gelijk zijn aan het aantal rijen van de tweede matrix.

Als je twee matrices hebt, matrix A van orde m × n en B van orde n × p, dan is de orde van de productmatrix m × p. Stel dat u een matrix A heeft met twee rijen (m) en drie kolommen (n) en een matrix B met drie rijen (n) en twee kolommen (p). De resulterende matrix bestaat uit twee rijen en twee kolommen:

instagram viewer

Je vermenigvuldigt twee matrices met het puntproduct. Om de waarde van het eerste element van de resulterende matrix te krijgen, vermenigvuldigt en voegt u de elementen van de eerste rij van de eerste matrix en de eerste rij van de tweede matrix element voor element toe als:

(1, 2, 3) • (7, 9, 11) = 1×7 + 2×9 + 3×11 = 58

Vermenigvuldig op dezelfde manier voor het tweede element de eerste rij van de eerste matrix en de tweede kolom van de tweede matrix als:

(1, 2, 3) • (8, 10, 12) = 1×8 + 2×10 + 3×12 = 64

Vermenigvuldig voor het derde element de tweede rij van de eerste matrix en de eerste kolom van de tweede matrix als:

(4, 5, 6) • (7, 9, 11) = 4×7 + 5×9 + 6×11 = 139

Vermenigvuldig voor het vierde element de tweede rij van de eerste matrix en de tweede kolom van de tweede matrix als:

(4, 5, 6) • (8, 10, 12) = 4×8 + 5×10 + 6×12 = 154

De resulterende matrix is ​​dus:

U kunt verschillende programma's verkennen en bouwen voor verschillende bewerkingen op matrices, zoals:

  • twee matrices optellen en aftrekken
  • het vinden van de getransponeerde matrix
  • controleren of twee matrices identiek zijn

Een algoritme om twee matrices te vermenigvuldigen

Volg dit algoritme om het programma te bouwen voor de vermenigvuldiging van twee willekeurige matrices:

  1. Begin het programma.
  2. Voer de rijen en kolommen van de eerste matrix in.
  3. Voer de rijen en kolommen van de tweede matrix in.
  4. Als de matrices niet compatibel zijn voor vermenigvuldiging, drukt u een fout af en sluit u af.
  5. Definieer een matrix en voer de getallen in de eerste matrix in.
  6. Definieer een andere matrix en voer het getal in de tweede matrix in.
  7. Definieer een matrix om het resultaat van de vermenigvuldiging van de twee matrices op te slaan.
  8. Stel een lus in om de rij van de eerste matrix te herhalen.
  9. Stel een binnenste lus in om de kolom van de tweede matrix te herhalen.
  10. Stel nog een binnenste lus in om de kolom van de eerste matrix te herhalen.
  11. Vermenigvuldig en tel de elementen op met behulp van de formule mul[i][j] += m1[i][k] * m2[k][j] en sla het resultaat van de vermenigvuldiging op in de resulterende matrix.
  12. Geef de resulterende matrix weer.
  13. Verlaat het programma.

Matrixvermenigvuldiging uitvoeren met behulp van C

Hierin is de volledige broncode voor matrixvermenigvuldiging met C aanwezig GitHub-opslagplaats en is gratis te gebruiken.

Importeer de stdio-bibliotheek om getallen in te voeren en geef de uitvoer dienovereenkomstig weer. Verklaar de voornaamst functie en vraag de gebruiker om het aantal kolommen en het aantal rijen voor beide matrices in te voeren met behulp van de afdrukken() functie.

Gebruik de scannen() functie om input te ontvangen. %D is de decimale formaatspecificatie die ervoor zorgt dat het programma invoer leest als een getal.

#erbij betrekken
#erbij betrekken

intvoornaamst()
{
int r1, r2, c1, c2;

printf("Voer het aantal rijen in voor de eerste matrix:\n");
scannen("%d", &r1);

printf("Voer het aantal kolommen in voor de eerste matrix:\n");
scannen("%d", &c1);

printf("Voer het aantal rijen in voor de tweede matrix:\n");
scannen("%d", &r2);

printf("Voer het aantal kolommen in voor de tweede matrix:\n");
scannen("%d", &c2);

Controleer of matrixvermenigvuldiging mogelijk is. Als het aantal kolommen van de eerste matrix niet gelijk is aan het aantal rijen van de tweede matrix, geef dan een foutmelding weer en sluit af.

als (c1 != r2) {
printf("De matrices kunnen niet met elkaar worden vermenigvuldigd");
Uitgang(-1);
}

Als alles goed is, definieer dan twee multidimensionale arrays, m1 En m2, met de grootte die de gebruiker heeft opgegeven. Vraag de gebruiker om de elementen van beide matrices één voor één in te voeren. Gebruik een geneste voor lus om de invoer voor zowel de rij als de kolom van de matrix te nemen. De buitenste for-lus itereert over de rijen van de matrix en de binnenste lus over de kolom van de matrix.

intm1[r1][c1], m2[r2][c2];
printf("Voer de elementen van de eerste matrix\n in");

voor (int ik = 0; ik < r1; ik++) {
voor (int j = 0; j < c1; j++) {
scannen("%D", &m1[i][j]);
}
}

printf("Voer de elementen van de tweede matrix\n in");

voor (int ik = 0; ik < r2; ik++) {
voor (int j = 0; j < c2; j++) {
scannen("%D",&m2[i][j]);
}
}

Definieer een derde matrix, mul, van orde r1 * c2 om het resultaat op te slaan. Gebruik een geneste voor lus om de vermenigvuldiging uit te voeren. De buitenste for-lus itereert over de rijen, de volgende binnenste lus itereert over de kolommen en de binnenste voert de vermenigvuldiging uit. Gebruik de formule mul[i][j] += m1[i][k] * m2[k][j] om de elementen van de matrix te vermenigvuldigen.

De formule gebruikt de steno-operator += toevoegen mul[i][j] naar de berekende uitdrukking en sla deze op. Vergeet niet om het resultaat op nul te initialiseren voordat u eraan toevoegt.

intmul[r1][c2];

voor (int ik = 0; ik < r1; ik++) {
voor (int j = 0; j < c2; j++) {
mul[i][j] = 0;

voor (int k = 0; k < c1; k++) {
mul[i][j] += m1[i][k] * m2[k][j];
}
}
}

Geef de vermenigvuldigde matrix weer met een geneste for-lus die de rijen en kolommen van de resulterende matrices herhaalt. Gebruik het teken voor een nieuwe regel (\n) om elk van de rijen op een afzonderlijke regel weer te geven. Retourneer 0 om de hoofdfunctie en het programma te verlaten.

printf("De vermenigvuldigde matrix is: \n");

voor (int ik = 0; ik < r1; ik++) {
voor (int j = 0; j < c2; j++) {
printf("%d\t", mul[i][j]);
}

printf("\N");
}

opbrengst0;
}

De uitvoer van het matrixvermenigvuldigingsprogramma

U zou zoiets als de volgende uitvoer moeten zien wanneer u het matrixvermenigvuldigingsprogramma uitvoert:

Als u ongeldige invoer invoert, mislukt de matrixvermenigvuldiging en ziet u zoiets als dit:

Matrices hebben veel toepassingen

Verschillende velden gebruiken matrices zoals wetenschap, commercie, economie, geologie, robotica en animatie. Je zult voornamelijk matrices in de wiskunde gebruiken om lineaire vergelijkingen op te lossen en transformaties zoals rotatie of translatie weer te geven. Matrices kunnen de hoeveelheid reflectie en breking berekenen en AC-netwerkvergelijkingen in elektrische circuits oplossen.

Naast educatieve toepassingen kunt u matrices gebruiken voor de analyse van enquêtegegevens, stemgegevens, lijsten met rekenitems en andere gegevenssets.