Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перемножение матриц в MS SQL / 7 сообщений из 7, страница 1 из 1
16.05.2006, 15:58
    #33730271
blacksun
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц в MS SQL
Добрый день!

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

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

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

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

Кто-нибудь это уже делал?
...
Рейтинг: 0 / 0
16.05.2006, 17:12
    #33730541
optimizer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц в MS SQL
может так?
Код: plaintext
1.
select a.i, b.j, a.value * b.value from table1 a inner join table1 b on a.j = b.i
...
Рейтинг: 0 / 0
16.05.2006, 17:18
    #33730562
muk07
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц в MS SQL
Наверное, только динамический SQL. Но TSQL крайне неудобен для таких задач.
Второй вариант - выбросить в файл, вызвать внешнюю программу и подобрать результат
Третий - то же самой, но с extended proc.
И вообще, если электробритвой чистить картошку, то она будет плохо шинковать капусту.
...
Рейтинг: 0 / 0
16.05.2006, 17:28
    #33730597
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц в MS SQL
Вроде вот рабочий пример:
Код: plaintext
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.
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
*/
...
Рейтинг: 0 / 0
18.05.2006, 10:20
    #33734620
optimizer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц в MS SQL
да, просуммировать позабыл
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
25.10.2019, 18:27
    #39881725
studieren
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц в MS SQL
iap,

Большое спасибо за идею. Очень помогли.
...
Рейтинг: 0 / 0
25.10.2019, 19:10
    #39881744
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перемножение матриц в MS SQL
studiereniap,

Большое спасибо за идею. Очень помогли.Я тогда ещё сравнительно молодой был...
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Перемножение матриц в MS SQL / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]