Перемножение квадратных матриц

Май 8, 2009 / Автор AlexR / Рубрики Статьи, Программирование / Комментировать

Теоретическая часть:

Для того чтобы решить эту алгебраическую задачу вспомним что такое перемножение квадратных матриц.

Даны матрицы A и B, C=A*B, где

Матрица AМатрица B

Посчитаем элементы матрицы C:

c{11}=a{11}*b{11}+a{12}*b{21}+...+a{1n}*b{n1},

Таким образом:

Матрица CБлок-схема программы перемножения матриц

В программе вместо n — g, а вместо m — n.

t1, t2, t3 — матрицы A, B, C соответственно. S используется как накопитель суммы.

Алгоритм программы:

Блок-схема программы

Листинг программы:

var i,j,m,n,g:integer;
S:real;
t1,t2,t3:array [1..100,1..100] of real;
Begin
write (‘Введите размер матрицы gxg, g<101:'); readln (g); {Ввод матрицы A} for i:=1 to g do begin for j:=1 to g do begin write ('Введите элемент а[',i,',',j,'] матрицы А:'); readln (t1[i,j]); end; end; writeln ('Матрица А='); for i:=1 to g do begin for j:=1 to g do write (t1[i,j],' '); writeln (''); end; {Ввод матрицы B} for m:=1 to g do begin for n:=1 to g do begin write ('Введите элемент b[',m,',',n,'] матрицы B:'); readln (t2[m,n]); end; end; writeln ('Матрица B='); for m:=1 to g do begin for n:=1 to g do write (t2[m,n],' '); writeln (''); end; {Подсчет матрицы C} for i:=1 to g do begin for n:=1 to g do begin S:=0; for j:=1 to g do S:=S+t1[i,j]*t2[j,n]; t3[i,n]:=S end end; {Вывод на экран матрицы C} writeln ('C=A*B='); for i:=1 to g do begin for n:=1 to g do write (t3[i,n],' '); writeln ('') end; readkey end.[/source] Советую воспользоваться для правильной работы программы — PascalABC 3. Почему? О PascalABC

Ссылка для скачивания: Программа по перемножению квадратных матриц
Вернуться назад

11 комментариев к “Перемножение квадратных матриц”

Комментарии

  1. AlexR

    Перемножение квадратных матриц мало где используется. А так часто пользуются возведением в степень матриц. А возведение в степень, как известно, это перемножение матрицы саму на себя.

  2. Дмитрий

    Здравствуйте, а что физически означает перемножение матриц? Связь с опредилителями исхлдных и полученных матриц? И вообще, где это применяется?

  3. Александр

    о, спасибо)) как то мне это в голову не дошло))) учусь)

  4. AlexR

    Александр, это достаточно просто. Если с общим принципом ты разобрался, то с этим уж нечего разбираться.
    Задаешь цикл for, который будет выполняться от 1 и до n (где n — это степень введенная с клавиатуры).
    Затем берешь тело цикла, как я тебе описал. Если в общем виде это делать, то примерно так получается:

    B:=A;
    for i:=1 to n do begin
    C:=B*A; //В этом месте надо брать, часть моей проги…
    B:=C; //Приравнивание матриц это тоже непростое дело, надо будет тоже создавать двойной цикл for (как при вводе матрицы, только использовать не i и j, а, например, j и k. либо использовать процедуры или функции)
    end;
    вот и все, осталось только вывести либо массив B, либо C.

  5. Александр

    нет нет=))матрица пятого порядка — это матрица 5×5. мне нужно поднести матрицу в степень которая вводится с клавиатуры. С общим принципом я то разобрался. Но как задать такой цикл, который перемножал бы матрицу А саму на себя необходимое число раз??

  6. AlexR

    То есть Вам надо возвести матрицу A в пятую степень. Таким образом, следует пять раз перемножить матрицу A саму на себя.
    Для этого надо организовать цикл, который будет совершаться 5 раз (например цикл for). При этом понадобится матрица B, которая будет изначально копировать матрицу A, а затем в вышеназванном цикле будет вычисляться следующим образом C:=B*A, B:=C. Именно в этом моменте Вам понадобится моя программа, при этом не вся, а только ее часть, а именно, после комментария (//Подсчет матрицы C) и до вывода этой матрицы C на экран.
    Затем, главное не забыть приравнивать в общем цикле (который я написал выше) B:=C, иначе A просто возведется в квадрат.
    Это самый легкий вариант.

  7. Александр

    вот задание:

    9.7. Программа. Даны натуральное п и (построчно) элементы квадратной вещественной матрицы А 5-го порядка. Вычислить n-ю степень этой матрицы (А2=А А, А3=А2 А и т. д.).

  8. AlexR

    Александр, сформулируйте свой вопрос четче. Не понятно как вообще можно матрицу подносить к степени..

  9. Александр

    а как матрицу A поднести к степени n?

  10. AlexR

    Нет, все перемножается хорошо. Только что проверил на матрице 4×4.
    Единственное здесь упущение мое в том, что это не самый оптимизированный вариант программы по перемножению.

  11. Миха

    А разве не одна и та же строка А перемножается поочередно на столбцы В, и формирует строку С. У вас получается что после пермножения матриц будет не матрица а вектор.

Комментарии