Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Перемножение матриц в MS SQL  [new]
blacksun
Member

Откуда: Moscow
Сообщений: 506
Добрый день!

Нужно перемножить матрицы. А точнее одну и ту же матрицу возвести в квардрат. Матрица вида (n x m, реально n = m - т.е. матрица квадратная) хранится в базе в виде таблицы:

(размер1 int,
размер2 int,
значение int)

Есть формула для перемножение двух матриц. См. http://alglib.sources.ru/matrixops/mul.php

Но как это сделать в MS SQL? Без последовательного перебора?

Кто-нибудь это уже делал?
16 май 06, 15:58    [2670058]     Ответить | Цитировать Сообщить модератору
 Re: Перемножение матриц в MS SQL  [new]
optimizer
Member

Откуда: НКР
Сообщений: 1029
может так?
select a.i, b.j, a.value * b.value from table1 a inner join table1 b on a.j = b.i
16 май 06, 17:12    [2670549]     Ответить | Цитировать Сообщить модератору
 Re: Перемножение матриц в MS SQL  [new]
muk07
Member

Откуда: Челябинск
Сообщений: 1835
Наверное, только динамический SQL. Но TSQL крайне неудобен для таких задач.
Второй вариант - выбросить в файл, вызвать внешнюю программу и подобрать результат
Третий - то же самой, но с extended proc.
И вообще, если электробритвой чистить картошку, то она будет плохо шинковать капусту.
16 май 06, 17:18    [2670586]     Ответить | Цитировать Сообщить модератору
 Re: Перемножение матриц в MS SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
Вроде вот рабочий пример:
USE tempdb;
GO
SET NOCOUNT ON;
GO
IF OBJECT_ID('T1') IS NOT NULL DROP TABLE T1;
GO
IF OBJECT_ID('T2') IS NOT NULL DROP TABLE T2;
GO
CREATE TABLE T1
(
 I INT NOT NULL,
 J INT NOT NULL,
 V INT NOT NULL
 CONSTRAINT pkT1 PRIMARY KEY(I,J)
);
GO
CREATE TABLE T2
(
 I INT NOT NULL,
 J INT NOT NULL,
 V INT NOT NULL
 CONSTRAINT pkT2 PRIMARY KEY(I,J)
);
GO
INSERT T1(I,J,V) VALUES(1,1,0);
INSERT T1(I,J,V) VALUES(1,2,17);
INSERT T1(I,J,V) VALUES(1,3,11);
INSERT T1(I,J,V) VALUES(2,1,-1);
INSERT T1(I,J,V) VALUES(2,2,-1);
INSERT T1(I,J,V) VALUES(2,3,2);
INSERT T1(I,J,V) VALUES(3,1,1);
INSERT T1(I,J,V) VALUES(3,2,0);
INSERT T1(I,J,V) VALUES(3,3,0);
GO
INSERT T2(I,J,V) VALUES(1,1,0);
INSERT T2(I,J,V) VALUES(1,2,50);
INSERT T2(I,J,V) VALUES(1,3,1);
INSERT T2(I,J,V) VALUES(2,1,1);
INSERT T2(I,J,V) VALUES(2,2,0);
INSERT T2(I,J,V) VALUES(2,3,10);
INSERT T2(I,J,V) VALUES(3,1,1);
INSERT T2(I,J,V) VALUES(3,2,-3);
INSERT T2(I,J,V) VALUES(3,3,5);
GO
SELECT * FROM T1;
SELECT * FROM T2;
GO
SELECT T1.I, T2.J, SUM(T1.V*T2.V)
FROM T1 JOIN T2 ON T1.J = T2.I
GROUP BY T1.I, T2.J
ORDER BY T1.I, T2.J;
GO
/*
 0  17 11     0  50   1       28 -33 225
-1  -1  2  X  1   0  10   =    1 -56  -1
 1   0  0     1  -3   5        0  50   1
*/
16 май 06, 17:28    [2670645]     Ответить | Цитировать Сообщить модератору
 Re: Перемножение матриц в MS SQL  [new]
optimizer
Member

Откуда: НКР
Сообщений: 1029
да, просуммировать позабыл
18 май 06, 10:20    [2677517]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: Перемножение матриц в MS SQL  [new]
studieren
Member

Откуда: Tashkent, Uzbekistan
Сообщений: 2834
iap,

Большое спасибо за идею. Очень помогли.
25 окт 19, 18:27    [22002959]     Ответить | Цитировать Сообщить модератору
 Re: Перемножение матриц в MS SQL  [new]
iap
Member

Откуда: Москва
Сообщений: 46954
studieren
iap,

Большое спасибо за идею. Очень помогли.
Я тогда ещё сравнительно молодой был...
25 окт 19, 19:10    [22002985]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить