Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/16: Рейтинг темы: голосов - 16, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 79

Умножение матриц (не квадратных)

22.09.2011, 17:43. Показов 3159. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте реализовал программу для умножения квадратных матриц
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button7Click(Sender: TObject);
begin
// формирование матрицы D
      for k:=1 to N do
           for i:=1 to N do
               D[k,i]:=0;
 vivod;
 for k:=1 to N do
 for i:=1 to N do
 begin
  for j:=1 to N do
  D[k,i]:=D[k,i]+A[k,j]*B[j,i];
  end;
  for i:=1 to N do
  for j:=1 to N do
  Matrix_C.Cells[j-1,i-1]:=FloatTostr(D[i,j]);
end;
не знаю как реализовать умножение неквадратных матриц например матрицу
(3,n)умножить на (n,n)?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.09.2011, 17:43
Ответы с готовыми решениями:

Перемножение матриц, умножение матриц на вектор, сложение матриц
Помогите пожалуйста написать программу, которая производит основные действия с матрицами произвольных размеров (перемножения 2х матриц,...

Умножение матриц с интерфейсом и возможность заполнения исходных матриц из файла
Здравствуйте. Я сделал программу, которая умножает матрицы с интерфейсом, только проблема в том что необходимо заполнять сами матрицы...

Сумма квадратных динамических матриц
Помогите пажалуйста, есть ошибки в коде, можете предложить свои варианты. Задание дословно: сформировать квадратные динамические матрицы А...

8
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
22.09.2011, 18:16
Delphi
1
2
3
4
5
6
7
8
9
//матрица А(m,n)
//матрица B(n,k)
for p:=1 to m do
for j:=1 to k do
   begin
     c[p,j]:=0;
     for i:=1 to n do
     c[p,j]:=c[p,j]+a[p,i]*b[i,j];
   end;
1
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 79
22.09.2011, 23:14  [ТС]
а как умножить 3 матрицы подряд??
0
ComfyMobile
 Аватар для DedBoroda
89 / 89 / 8
Регистрация: 04.11.2010
Сообщений: 376
23.09.2011, 00:47
в две итерации, слева на право
0
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 79
23.09.2011, 07:13  [ТС]
а можно примерчик?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.09.2011, 11:12
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//матрица А(m,n)
//матрица B(n,k)
//C=A*B
for p:=1 to m do
for j:=1 to k do
   begin
     c[p,j]:=0;
     for i:=1 to n do
     c[p,j]:=c[p,j]+a[p,i]*b[i,j];
   end;
//матрица C(m,k)
//матрица D(k,q)
//E=C*D
for p:=1 to m do
for j:=1 to q do
   begin
     e[p,j]:=0;
     for i:=1 to k do
     e[p,j]:=e[p,j]+c[p,i]*d[i,j];
   end;
А лучше умножение описать процедурой, чтобы 2 раза не писать одно и тоже.
1
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 79
23.09.2011, 17:58  [ТС]
а это как?
0
Почетный модератор
 Аватар для Puporev
64314 / 47610 / 32743
Регистрация: 18.05.2008
Сообщений: 115,167
23.09.2011, 19:08
Pascal
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
type matr=array[1..10,1..10] of integer;
procedure Umn(a,b:matr;var c:matr;m,n,k:byte);
var p,j,i:byte;
begin
for p:=1 to m do
for j:=1 to k do
   begin
     c[p,j]:=0;
     for i:=1 to n do
     c[p,j]:=c[p,j]+a[p,i]*b[i,j];
   end;
end;
var a,b,c,d,e:matr;
    m,n,k,q:byte;
begin
//создаем матрицу А(m,n)
//матрицу B(n,k)
//матрицу C(k,q)
Umn(a,b,d,m,n,k);
Umn(d,c,e,m,k,q);
//вывод матрицы E
readln
end.
1
0 / 0 / 0
Регистрация: 28.06.2011
Сообщений: 79
23.09.2011, 20:18  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids, StdCtrls, XPMan;
 
type
  TForm1 = class(TForm)
    Button1: TButton;
    Matrix_A: TStringGrid;
    Matrix_B: TStringGrid;
    Matrix_C: TStringGrid;
    Matrix_D: TStringGrid;
    Button2: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    XPManifest1: TXPManifest;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
    procedure vivod;
  private
    { Private declarations }
  public
    { Public declarations }
  end;
  const max=10;
 
 type Matrix= array[1..max,1..max] of Real;
var
  Form1: TForm1;
  p,m,j,k,n,i,q:Integer;
  A,B,C,D,E:Matrix;
 
implementation
 
{$R *.dfm}
 procedure TForm1.vivod;
begin
// формирование матрицы А
      for i:=1 to m do
           for j:=1 to n do
           try
               A[i,j]:=strToFloat(Matrix_A.Cells[j-1,i-1]);
               except
               showmessage('Матрица А записанна не верно');
                Matrix_A.Cells[j-1,i-1]:='';
                end;
 
 
 // формирование матрицы B
      for i:=1 to n do
           for j:=1 to k do
           try
               B[i,j]:=strToFloat(Matrix_B.Cells[j-1,i-1]);
               except
               showmessage('Матрица B записанна не верно');
                Matrix_B.Cells[j-1,i-1]:='';
                end;
               
   // формирование матрицы D
      for i:=1 to n do
           for j:=1 to m do
           try
               D[i,j]:=strToFloat(Matrix_C.Cells[j-1,i-1]);
               except
               showmessage('Матрица D записанна не верно');
                Matrix_C.Cells[j-1,i-1]:='';
                end;
               end;
 
procedure TForm1.Button1Click(Sender: TObject);
begin
vivod;
for p:=1 to m do
for j:=1 to k do
   begin
     c[p,j]:=0;
     for i:=1 to n do
     c[p,j]:=c[p,j]+a[p,i]*b[i,j];
   end;
   //матрица C(m,k)
//матрица D(n,m)
//E=C*D
for p:=1 to m do
for j:=1 to q do
   begin
     e[p,j]:=0;
     for i:=1 to k do
     e[p,j]:=e[p,j]+c[p,i]*d[i,j];
   end;
   for i:=1 to m  do
  for j:=1 to m do
  Matrix_D.Cells[j-1,i-1]:=FloatTostrF(E[i,j],ffFixed,5,1);
end;
 
procedure TForm1.Button2Click(Sender: TObject);
begin
m:=StrToInt(Edit1.Text);
n:=StrToInt(Edit2.Text);
k:=StrToInt(Edit3.Text);
Matrix_A.RowCount:=m;
Matrix_A.ColCount:=n;
Matrix_B.RowCount:=n;
Matrix_B.ColCount:=k;
Matrix_C.RowCount:=n;
Matrix_C.ColCount:=m;
Matrix_D.RowCount:=m;
Matrix_D.ColCount:=m;
 
end;
 
end.
вот замутил что то программа запускается ток ответ нули выдает!c чем этоможет быть связанно

Добавлено через 17 минут
Все,спасибо!!нашел ошибку
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.09.2011, 20:18
Помогаю со студенческими работами здесь

Составить программу для нахождения произведения двух квадратных матриц произвольного размера
Надо сделать в консоли Составить программу для нахождения произведения двух квадратных матриц произвольного размера.

Умножение матриц
Написал програмку для умножения двух разных матриц, но она не правильно умножает. Помогите пожалуйста. Задаю размер матриц так: ...

Умножение матриц
Здравствуйте..помогите пожалуйста найти ошибку в коде..перепробовал уже кучу вариантов ни чего не получается(.....значение матриц берутся с...

Умножение матриц
Помогите плиз Завтра последний срок сдачи лабы! Задание: Задано дві матриці розміром 3*3. Перемножити їх по правилу "рядок...

умножение матриц
Добрый день,столкнулся с проблемой перемножением двух матриц помогите подправить (134 строка) program metodvrashenija; {$APPTYPE...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru