Текущий архив: 2005.10.23;
Скачать: CL | DM;
ВнизПомогите перемножить две матрицы Найти похожие ветки
← →
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
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 "ђҐ§г«мв в ¬ ваЁж 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;
Скачать: CL | DM;
Память: 0.51 MB
Время: 0.04 c