Читатели като вас помагат в подкрепа на MUO. Когато правите покупка чрез връзки на нашия сайт, ние може да спечелим комисионна за партньор. Прочетете още.

Матриците играят жизненоважна роля в много различни области, включително компютърна графика, криптография и безжична комуникация. Матрицата е правоъгълен масив от числа, подредени в редове и колони, използвани за представяне на математически обект или негово свойство.

Една от операциите, които може да се наложи да извършите върху тях, е умножението на матрицата. Това намира приложение в много области като аеродинамични изчисления, обработка на сигнали, обработка на изображения и сеизмичен анализ. Но как точно се умножават матрици?

Как да умножим две матрици

Вие представяте реда на матрица като произведение на броя на редовете (m) и броя на колоните (n). За да умножите две матрици, броят на колоните на първата матрица трябва да бъде равен на редовете на втората матрица.

Ако имате две матрици, матрица A от ред m × n и B от ред n × p, редът на матрицата на продукта ще бъде m × p. Да предположим например, че имате матрица A, съдържаща два реда (m) и три колони (n) и матрица B, съдържаща три реда (n) и две колони (p). Получената матрица ще се състои от два реда и две колони:

instagram viewer

Вие умножавате две матрици, като използвате точковия продукт. За да получите стойността на първия елемент от резултантната матрица, умножете и добавете елементите от първия ред на първата матрица и първия ред от втората матрица елемент по елемент като:

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

По същия начин, за втория елемент, умножете първия ред на първата матрица и втората колона на втората матрица като:

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

За третия елемент умножете втория ред на първата матрица и първата колона на втората матрица като:

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

За четвъртия елемент умножете втория ред на първата матрица и втората колона на втората матрица като:

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

Така получената матрица е:

Можете да изследвате и създавате различни програми за различни операции върху матрици като:

  • събиране и изваждане на две матрици
  • намиране на транспонирането на матрица
  • проверка дали две матрици са идентични

Алгоритъм за умножение на две матрици

Следвайте този алгоритъм, за да изградите програмата за умножение на произволни две матрици:

  1. Започнете програмата.
  2. Въведете редовете и колоните на първата матрица.
  3. Въведете редовете и колоните на втората матрица.
  4. Ако матриците са несъвместими за умножение, отпечатайте грешка и излезте.
  5. Дефинирайте матрица и въведете числата в първата матрица.
  6. Дефинирайте друга матрица и въведете числото във втората матрица.
  7. Дефинирайте матрица за съхраняване на резултата от умножението на двете матрици.
  8. Задайте цикъл за итерация през реда на първата матрица.
  9. Настройте вътрешен цикъл за итериране на колоната на втората матрица.
  10. Задайте друг вътрешен цикъл за итерация върху колоната на първата матрица.
  11. Умножете и съберете елементите с помощта на формулата mul[i][j] += m1[i][k] * m2[k][j] и съхранява резултата от умножението в получената матрица.
  12. Покажете получената матрица.
  13. Излезте от програмата.

Как да извършите матрично умножение с помощта на C

Целият изходен код за умножение на матрици с помощта на C присъства в това GitHub хранилище и е безплатен за използване.

Импортирайте библиотеката stdio за въвеждане на числа и показване на изхода съответно. Декларирайте основен и помолете потребителя да въведе броя на колоните и броя на редовете за двете матрици, като използва печат () функция.

Използвай scanf() функция за получаване на вход. е спецификаторът на десетичен формат, който гарантира, че програмата чете входа като число.

#включват
#включват

вътросновен()
{
вътр r1, r2, c1, c2;

printf(„Въведете броя на редовете за първата матрица:\n");
сканиране("%d", &r1);

printf(„Въведете броя на колоните за първата матрица:\n");
сканиране("%d", &c1);

printf(„Въведете броя на редовете за втората матрица:\n");
сканиране("%d", &r2);

printf(„Въведете броя на колоните за втората матрица:\n");
сканиране("%d", &c2);

Проверете дали умножението на матрицата е възможно. Ако броят на колоните на първата матрица не е равен на броя на редовете на втората матрица, покажете грешка и излезте.

if (c1 != r2) {
printf("Матриците не могат да се умножават заедно");
изход(-1);
}

Ако всичко е наред, дефинирайте два многомерни масива, m1 и м2, с предоставения от потребителя размер. Помолете потребителя да въведе елементите на двете матрици един по един. Използвайте вложено за цикъл, за да вземе входа както за реда, така и за колоната на матрицата. Външният for цикъл итерира през редовете на матрицата, а вътрешният цикъл през колоната на матрицата.

вътрm1[r1][c1], м2[r2][c2];
printf("Въведете елементите на първата матрица\n");

за (вътр аз = 0; i < r1; i++) {
за (вътр j = 0; j < c1; j++) {
scanf("", &m1[i][j]);
}
}

printf("Въведете елементите на втората матрица\n");

за (вътр аз = 0; i < r2; i++) {
за (вътр j = 0; j < c2; j++) {
scanf("",&m2[i][j]);
}
}

Дефинирайте трета матрица, мул, от ред r1 * c2 за съхраняване на резултата. Използвайте вложено за цикъл за извършване на умножението. Най-външният for цикъл итерира през редовете, следващият вътрешен цикъл итерира през колоните, а най-вътрешният изпълнява умножението. Използвайте формулата mul[i][j] += m1[i][k] * m2[k][j] за умножаване на елементите на матрицата.

Формулата използва съкратения оператор += добавям много[i][j] към изчисления израз и го съхранете. Не забравяйте да инициализирате резултата до нула, преди да добавите към него.

вътрмул[r1][c2];

за (вътр аз = 0; i < r1; i++) {
за (вътр j = 0; j < c2; j++) {
mul[i][j] = 0;

за (вътр k = 0; k < c1; k++) {
mul[i][j] += m1[i][k] * m2[k][j];
}
}
}

Покажете умножената матрица с помощта на вложен for цикъл, който обхожда редовете и колоните на получените матрици. Използвайте знака за нов ред (\n), за да покажете всеки от редовете на отделен ред. Върнете 0, за да излезете от основната функция и програмата.

printf("Умножената матрица е: \n");

за (вътр аз = 0; i < r1; i++) {
за (вътр j = 0; j < c2; j++) {
printf("%d\t", mul[i][j]);
}

printf("\н");
}

връщане0;
}

Резултатът от програмата за умножение на матрици

Трябва да видите нещо като следния изход, когато стартирате програмата за умножение на матрици:

Ако въведете невалиден вход, умножението на матрицата е неуспешно и ще видите нещо подобно:

Матриците имат много приложения

Различни области използват матрици като наука, търговия, икономика, геология, роботика и анимация. Ще използвате главно матрици в математиката за решаване на линейни уравнения и представяне на трансформации като ротация или транслация. Матриците могат да изчисляват степента на отражение и пречупване, както и да решават уравнения на AC мрежа в електрически вериги.

Освен образователни приложения, можете да използвате матрици за анализ на данни от проучвания, данни от гласуване, изчисляване на списъци с елементи и други набори от данни.