Помощь - Поиск - Пользователи - Календарь
Полная версия: перемножение двух матриц
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
AlexPS
Чуваки, помогите пжалуйста.
Мне нужна процедура перемнодения двух матриц разного порядка,
например 5Х3 на 3Х5. А везде, где искал, только перемножение квадратных матриц. sad.gif
volvo
AlexPS
Правила для кого?
Цитата
4. Прежде чем задавать вопрос, см. "FAQ",если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!


Даже поиском пользоваться не надо - см. ФАК - "Массивы. Матрицы. Типичные задачи" - последний пост, я выкладывал функцию для перемножения "сцепленных" матриц...
AlexPS
Пасиба чувак. Я это искал 2 месяца!!! :molitva:
AlexPS
volvo, у меня этот модуль не компилируется, а понять в нем я ниче не могу. Если не сложно напиши мне процедуруперемножения этих матриц.
BlackNightFear
AlexPS
ты сам алгоритм перемножения знаешь?
Jahnerus
AlexPS
Код
type ma3x=array[1..50,1..50] of integer;
............
procedure pr_ma3x(m1,t,n2:integer;a1,a2:ma3x;var pr:ma3x);
{n1=m2=t}
var i,j,k:integer;
begin
 for i:=1 to m1 do begin
   for j:=1 to n2 do begin
     for k:=1 to t do pr[i,j]:=pr[i,j]+a1[i,k]*a2[k,j]
   end
 end
end;

Процедура перемножения 2 матриц a1(m1,n1) и a2(m2,n2) напоминаю, что чтобы матрицы можно было перемножить необходимо чтобы n1=m2, поэтому процедура принимает только три параметра размерности(а больше и не надо! :D )
volvo
AlexPS
Что значит "не компилируется?" Чем пытался скомпилировать?
Jahnerus
volvo
Цитата
AlexPS
Что значит "не компилируется?" Чем пытался скомпилировать?

:D Калькулятором может !
Run: calc c:\Unit1.pas :D :D :D
AlexPS
А че, калькулятором нельзя??? :o
volvo
AlexPS
Так чем все-таки? Турбо Паскаль? Дельфи? FPC?
Altair
AlexPS, присоединяюсь к вопросу: "Чем вы пробовали компилировать?"
AlexPS
Delphi 7
Jahnerus
Короче не компилиться только в одном случае !
Если компилить через TPC и без поддержки 8087!
На FPC всё и так замечательно, потому что FPC - гуд! :D
AlexPS
Так я ничего и не понял, что мне делать??? huh.gif
volvo
AlexPS
А я не понял, почему у всех компилится, а у тебя - нет... Вот тебе процедура перемножения матриц (правда, я не понимаю, зачем тогда ФАК...)
Код

Const
 sizeX = 5;
 sizeY = 3;

Type
 TOneMatrix =
   Array[1 .. sizeX, 1 .. sizeY] Of Real;
 TTwoMatrix =
   Array[1 .. sizeY, 1 .. sizeX] Of Real;
 TResult =
   Array[1 .. sizeX, 1 .. sizeX] Of Real;

(* matrix multiplication *)
Procedure matrixMult(Var m: TResult;
         a: TOneMatrix; b: TTwoMatrix);
 Var
   i, j, k: Integer;
 Begin
   For i := 1 To sizeX Do
     For j := 1 To sizeX Do
       Begin
         m[i, j] := 0;
         For k := 1 To sizeY Do
           m[i, j] := m[i, j] + a[i, k] * b[k, j]
       End;
 End;

Var
 m1: TOneMatrix;
 m2: TTwoMatrix;
 r: TResult;
Begin
 {заполняешь матрицу m1(5x3)}
 {заполняешь матрицу m2(3x5)}
 matrixMult(r, m1, m2);
 {получаешь матрицу r(5x5)}

End.
Guest
А по-моему эта процедура не подойдет для случая, например
3Х2 и 2Х5.
volvo
Guest
А по-моему, эта процедура писалась для случая 5Х3 на 3Х5. Общую процедуру ищите в ФАКе.
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.