Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Вниз

Помогите перемножить две матрицы   Найти похожие ветки 

 
Pass[word] ©   (2005-09-26 19:14) [0]

Нужно в Delphi умножить друг на друга две матрицы. Подскажите, как это сделать. Есть ли для Delphi модули, облегчающие работу с матрицами. Кто знает?


 
Loginov Dmitry   (2005-09-26 19:33) [1]

Насколько помню, строки первой матрицы перемножаются на столбцы второй матрицы.
Модули для работы с матрицами можешь скачать на сайте

http:\\delphimatrix.narod.ru

Там представлена самая мощная библиотека для Delphi, предназначенная для работы с матрицами.


 
Pass[word] ©   (2005-09-26 20:14) [2]

Фух, еле скачал этот архив. Кто догадался метровый архив разместить в народе?.
... Распаковал, и че дальше? Куча всяких файлов, ничего не понятно.


 
Сайбель Алексей ©   (2005-09-26 20:26) [3]

Поисковики отменили чтоли?
http://www.yandex.ru/yandsearch?text=Delphi+%F3%EC%ED%EE%E6%E5%ED%E8%E5+%EC%E0%F2%F0%E8%F6&stype=www
прям первая ссылка


 
TUser ©   (2005-09-26 20:33) [4]

Ищи по ключевому слову алгоритм Штрассена.


 
IJ   (2005-09-26 20:52) [5]

Лезь на http:\\delphimatrix.narod.ru.
Я сам прогер. Данный модуль позволяет создавать динамические
матрицы и проводить с ними математические операции.
Фактически тот же Matlab, только у тебя на форме )


 
IJ   (2005-09-26 20:54) [6]

Удалено модератором


 
Loginov Dmitry   (2005-09-26 21:06) [7]


> Pass[word] писал:
> ... Распаковал, и че дальше? Куча всяких файлов, ничего
> не понятно.


А ты информацию по установке читал? Там написано "После распаковки прочтите раздел справки "Система Matrix". Для этого в папке Help следует запустить программу HelpViewer.exe". Вопросы есть?


 
Loginov Dmitry   (2005-09-26 21:08) [8]

Удалено модератором


 
Pass[word] ©   (2005-09-26 21:28) [9]

Matrix, конечно, очень навороченная штука, но как, я не пойму, в нем можно перемножить мои матрицы?


 
Loginov Dmitry   (2005-09-26 21:45) [10]


> Pass[word] писал:
> Matrix, конечно, очень навороченная штука, но как, я не
> пойму, в нем можно перемножить мои матрицы?

Допустим, у тебя есть матрицы A (5х4) и B (4х6), заполненные случайными числами от 0 до 1. В результате тебе нужно получить матрицу C (5х6). Подключаешь в Uses модуль Matrix и пишешь следующий код:

 with Base do begin
   // Создаем матрицы
   NewArray("A", 5, 4);
   NewArray("B", 4, 6);

   // Заполняем случайными числами
   RandomAr("A");
   RandomAr("B");

   // Перемножаем матрицы
   MulMatrix("A", "B", "C")
 end;


Вот и все


 
Pass[word] ©   (2005-09-26 22:08) [11]

С умножением все ясно, но в моих матрицах не случайные элементы, а конкретные значения. Как мне их ввести в Matrix"е. Во-вторых, необходимо вывести элементы полученной матрицы в Memo.Что для этого надо сделать?


 
MBo ©   (2005-09-26 22:16) [12]

>Pass[word]
Ты знаешь принцип перемножения матриц?

Сij=Sum(over k) Aik*Bkj

Разве трудно написать соответствующий код?


 
Loginov Dmitry   (2005-09-26 22:20) [13]

Для таких как ты, Pass[word], в Matrix"е есть отличная справочная система. Почитай, там все написано. Все необходимое для первого времени есть в разделе справки "Функции ядра".
Измененный код будет выглядеть следующим образом:


...........................
var
 I, J: Integer;
 S: String;
begin
 with Base do begin
   // Создаем матрицы
   NewArray("A", 5, 4);
   NewArray("B", 4, 6);

   // Заполняем массив А
   for I := 1 to 5 do
     for J := 1 to 4 do
       Elem["A", I, J] := I * J;

   // Заполняем массив В
   for I := 1 to 4 do
     for J := 1 to 6 do
       Elem["B", I, J] := I + J;

   // Перемножаем матрицы
   MulMatrix("A", "B", "C");

   // Сохраняем весь массив
   SaveArrayToString(S, "C");

   // Или только его элементы
   //SaveArrayToValues(S, "C");
 end;
 // Выводим результат в Memo
 Memo1.Text := S;
end;


 
Loginov Dmitry   (2005-09-26 22:22) [14]

MBo, ты не въехал в тему?


 
Сайбель Алексей ©   (2005-09-26 22:37) [15]

Он просто хочет добиться просветления у отдельно взятого индивидума.


 
Eraser ©   (2005-09-26 22:52) [16]


> Pass[word] ©   (26.09.05 19:14)

Вот пример на QBasic"e в котором есть всё что нужно для перемножения матриц.
Код конечно не супер, на 1 курсе делал, почти не зная QBasic.

DECLARE SUB mult (a(), b(), r())
DECLARE SUB transp (a(), r())
DECLARE SUB obr (a(), r())
DECLARE SUB getad (a(), i, j, ad)
OPTION BASE 1
CLS
n = 3
m = 3
l = 3
DIM a(3, 3)
DIM b(3, 3)
DIM c(3), rs(3)
DIM x(3, 3)
DIM r(3, 3), sm1(3, 3), sm2(3, 3)
COLOR 15
" 1 matrix
"DATA 1,2,3,4, 5,6,7,8, 9,1,0,2, 3,7,1,5
"DATA 12,22,32,24, 75,96,87,88, 90,11,10,22, 23,47,41,55
"FOR j = 0 TO 3
"        READ a(0, j), a(1, j), a(2, j), a(3, j)
"NEXT j
" 2 matrix
"DATA 3,2,1,2, 1,3,4,3, 0,4,3,6, 7,1,0,9
"DATA 31,22,31,42, 51,39,48,37, 0,24,33,76, 57,41,30,19
"FOR j = 0 TO 3
"        READ b(0, j), b(1, j), b(2, j), b(3, j)
"NEXT j
FOR j = 1 TO 3
FOR i = 1 TO 3
 a(i, j) = INT(RND(1) * 100)
NEXT i
NEXT j
"
FOR j = 1 TO 3
FOR i = 1 TO 3
 b(i, j) = INT(RND(1) * 100)
NEXT i
NEXT j
"
FOR i = 1 TO 3
 c(i) = INT(RND(1) * 100)
NEXT i
" printing...
PRINT "Њ ваЁж  A:"
FOR j = 1 TO 3
       PRINT a(1, j), a(2, j), a(3, j)
NEXT j
PRINT "Њ ваЁж  B:"
FOR j = 1 TO 3
       PRINT b(1, j), b(2, j), b(3, j)
NEXT j
PRINT "Њ ваЁж  C:"
FOR i = 1 TO 3
PRINT c(i),
NEXT i
PRINT
CALL transp(a(), r())
CALL obr(b(), sm1())
FOR j = 1 TO 3
 FOR i = 1 TO 3
       sm2(i, j) = r(i, j) + sm1(i, j)
 NEXT i
NEXT j
CALL obr(sm2(), sm1())
CALL mult(c(), sm1(), rs())
PRINT
PRINT "ђҐ§г«мв в ¬ ваЁж  X:"
PRINT rs(1), rs(2), rs(3)

SUB getad (a(), i, j, ad)
DIM mx(2, 2)
curi = 1
curj = 1
FOR j1 = 1 TO 3
FOR i1 = 1 TO 3
IF (i1 <> i) AND (j1 <> j) THEN
mx(curi, curj) = a(i1, j1)
  IF (curi = 1) AND (curj = 1) THEN
  curi = 2
  GOTO m
  END IF
  IF (curi = 2) AND (curj = 1) THEN
  curi = 1
  curj = 2
  GOTO m
  END IF
  IF (curi = 1) AND (curj = 2) THEN
  curi = 2
  GOTO m
  END IF
m:
END IF
NEXT i1
NEXT j1
ad = mx(1, 1) * mx(2, 2) - mx(2, 1) * mx(1, 2)
END SUB

SUB mult (a(), b(), rs())
"FOR i = 1 TO 3
FOR j = 1 TO 3
s = 0
FOR k = 1 TO 3
s = s + a(k) * b(j, k)
NEXT k
rs(j) = s
NEXT j
"NEXT i
END SUB

SUB obr (a(), r())
dt = -a(2, 1) * (a(1, 2) * a(3, 3) - a(1, 3) * a(3, 2)) + a(2, 2) * (a(1, 1) * a(3, 3) - a(1, 3) * a(3, 1)) - a(2, 3) * (a(1, 1) * a(3, 2) - a(1, 2) * a(3, 1))
FOR j = 1 TO 3
FOR i = 1 TO 3
 CALL getad(a(), i, j, ad1)
 r(j, i) = ad1 / dt
 opr = (-1) ^ (i + j)
 IF opr < 0 THEN
 opr = -r(j, i)
 r(j, i) = opr
 END IF
NEXT i
NEXT j
END SUB

SUB transp (a(), r())
FOR j = 1 TO 3
FOR i = 1 TO 3
 r(j, i) = a(i, j)
NEXT i
NEXT j
END SUB



 
MBo ©   (2005-09-26 23:00) [17]

>Loginov Dmitry   (26.09.05 22:22) [14]
>MBo, ты не въехал в тему?

Ну что поделаешь, не все же такие сообразительные :(


 
Pass[word] ©   (2005-09-27 01:08) [18]

Ура! Получилось. Matrix - супер!. С меня пиво :)


 
Jeer ©   (2005-09-27 10:08) [19]

MBo ©   (26.09.05 23:00) [17]

Потерянные дети - утерянные знания:(


 
Student2006   (2005-09-27 23:12) [20]

Доброго всем времени суток. Я только что прочитал тему. Скажите, кто знает, что можно делать с этим матриксом и что это, вообще такое (библиотека, компонент?). Мне нужна хорошая реализация работы с матрицами большого размера, операций с ними. Заранее спасибо.


 
_111_   (2005-09-28 00:16) [21]


> Скажите, кто знает, что можно делать с этим матриксом...

HELP почитай. Много воды, но что-то понять можно.
Вроде здоровые матрицы перемножает :)

а вообще Matrix лучше чем MatLab, хотя бы по тому что в Delphi...


 
Student2006   (2005-09-28 22:29) [22]

Спасибо _111_. Только я еще не скачал архив, связь вчера была слишком поганая. Но то, что он лучше МатЛаба, ты загнул.


 
IJ   (2005-10-01 23:42) [23]

Удалено модератором


 
Loginov Dmitry   (2005-10-02 00:37) [24]

Удалено модератором



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2005.10.23;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.51 MB
Время: 0.039 c
3-1126093577
stud
2005-09-07 15:46
2005.10.23
сортировка в dxMemData


1-1128184001
igor456
2005-10-01 20:26
2005.10.23
Прочитать файл


2-1127917286
slaga
2005-09-28 18:21
2005.10.23
Проблемы с почтовым клиентом


14-1128424032
syte_ser78
2005-10-04 15:07
2005.10.23
avi в vob


1-1128237120
тт
2005-10-02 11:12
2005.10.23
Как програмно создать Word-документ и вставить рисунок по центру?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский