Перемножение квадратных матриц
Теоретическая часть:
Для того чтобы решить эту алгебраическую задачу вспомним что такое перемножение квадратных матриц.
Даны матрицы A и B, C=A*B, где


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

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


В программе вместо n – g, а вместо m – n.
t1, t2, t3 – матрицы A, B, C соответственно. S используется как накопитель суммы.
Алгоритм программы:

Листинг программы:
program matrixmn;
uses crt; //В Pascal ABC. NET данную строчку следует убрать
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 //В Pascal ABC. NET данную строчку следует убрать
end.
Советую воспользоваться для правильной работы программы – PascalABC 3. Почему? О PascalABC
Ссылка для скачивания: Программа по перемножению квадратных матриц
Вернуться назад
Перемножение квадратных матриц мало где используется. А так часто пользуются возведением в степень матриц. А возведение в степень, как известно, это перемножение матрицы саму на себя.
Здравствуйте, а что физически означает перемножение матриц? Связь с опредилителями исхлдных и полученных матриц? И вообще, где это применяется?
о, спасибо)) как то мне это в голову не дошло))) учусь)
Александр, это достаточно просто. Если с общим принципом ты разобрался, то с этим уж нечего разбираться.
Задаешь цикл 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. мне нужно поднести матрицу в степень которая вводится с клавиатуры. С общим принципом я то разобрался. Но как задать такой цикл, который перемножал бы матрицу А саму на себя необходимое число раз??
То есть Вам надо возвести матрицу A в пятую степень. Таким образом, следует пять раз перемножить матрицу A саму на себя.
Для этого надо организовать цикл, который будет совершаться 5 раз (например цикл for). При этом понадобится матрица B, которая будет изначально копировать матрицу A, а затем в вышеназванном цикле будет вычисляться следующим образом C:=B*A, B:=C. Именно в этом моменте Вам понадобится моя программа, при этом не вся, а только ее часть, а именно, после комментария (//Подсчет матрицы C) и до вывода этой матрицы C на экран.
Затем, главное не забыть приравнивать в общем цикле (который я написал выше) B:=C, иначе A просто возведется в квадрат.
Это самый легкий вариант.
вот задание:
9.7. Программа. Даны натуральное п и (построчно) элементы квадратной вещественной матрицы А 5-го порядка. Вычислить n-ю степень этой матрицы (А2=А А, А3=А2 А и т. д.).
Александр, сформулируйте свой вопрос четче. Не понятно как вообще можно матрицу подносить к степени..
а как матрицу A поднести к степени n?
Нет, все перемножается хорошо. Только что проверил на матрице 4×4.
Единственное здесь упущение мое в том, что это не самый оптимизированный вариант программы по перемножению.
А разве не одна и та же строка А перемножается поочередно на столбцы В, и формирует строку С. У вас получается что после пермножения матриц будет не матрица а вектор.