【问题标题】:How to find the Inverse of a Matrix in SQL Server如何在 SQL Server 中找到矩阵的逆矩阵
【发布时间】:2018-04-19 03:15:12
【问题描述】:

我有一个包含多行/多列的矩阵。列数总是等于行数,但我不知道确切的数字,因为它们是另一个查询的结果。

这是一个有 2 列/行的简单示例

      ID1  ID2
1     4    7
2     2    6

我从一个看起来像这样的表中得到这个矩阵:

ID1 ID2 Value
1   1   4
1   2   7
2   1   2
2   2   6

现在我想要那个矩阵的逆矩阵。

矩阵中的结果如下所示:

    ID1    ID2
1   0.6    -0.7
2   -0.2   0.4

或者像这样在表格中:

ID1 ID2 Value
1   1   0.6
1   2   -0.7
2   1   -0.2
2   2   0.4

基本上就是 SQL Server 中的 Excel 公式 ={MINVERSE(Array)}

在我的数据库中,我同时拥有 Table 和 Matrix,因此我可以使用最适合的方法来找到它的倒数。

【问题讨论】:

  • 我认为在 SQL 中这样做是个坏主意。使用您拥有的模式将其存储在数据库中似乎是合理的,但尝试在 RDBMS 中对其进行操作......这是一个延伸,因为您正在考虑数据本身中定义的关系。在旨在处理矩阵数据的程序中,在数据库之外执行此操作似乎更合适。
  • @JNevill 你认为你是什么软件来处理这样的大型矩阵(200X200)?我所做的工作基本上是金融工程、风险回报计算。
  • 我不确定,因为我不经常使用矩阵数据。我想像 R 这样更适合分析和统计的语言将是一个很好的起点。 This tutorial 似乎暗示 R 会很合适。

标签: sql-server matrix


【解决方案1】:

这是一个 2x2 矩阵的实现。这很丑陋,因为矩阵不是关系,就 RDBMS 是关系而言。但也许它会让你足够接近。

SELECT
   CASE WHEN id1=id2 THEN CASE WHEN id1=1 THEN 2 ELSE 1 END ELSE ID1 END as ID2,
   CASE WHEN id1=id2 THEN CASE WHEN id2=1 THEN 2 ELSE 1 END ELSE ID2 END as ID2,
   CASE WHEN id1<>id2 THEN -1 ELSE 1 END * matrix.value/(determinate1.value-determinate2.value) as inverse_value
FROM
  (SELECT EXP(SUM(LOG(value))) as value FRom matrix where id1=id2) as determinate1,
  (SELECT EXP(SUM(LOG(value))) as value FROM matrix WHERE id1<>id2) as determinate2,
  matrix;

这里是sqlfiddle

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-08
    • 2012-04-21
    • 1970-01-01
    相关资源
    最近更新 更多