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

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

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

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

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

Кто-нибудь это уже делал?
...
Рейтинг: 0 / 0
Перемножение матриц в MS SQL
    #33730541
Фотография optimizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может так?
Код: 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
Перемножение матриц в MS SQL
    #33730562
muk07
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверное, только динамический SQL. Но TSQL крайне неудобен для таких задач.
Второй вариант - выбросить в файл, вызвать внешнюю программу и подобрать результат
Третий - то же самой, но с extended proc.
И вообще, если электробритвой чистить картошку, то она будет плохо шинковать капусту.
...
Рейтинг: 0 / 0
Перемножение матриц в MS SQL
    #33730597
iap
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вроде вот рабочий пример:
Код: 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
Перемножение матриц в MS SQL
    #33734620
Фотография optimizer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, просуммировать позабыл
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Перемножение матриц в MS SQL
    #39881725
studieren
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iap,

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

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


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