【问题标题】:Equation containing a matrix power包含矩阵幂的方程
【发布时间】:2017-01-22 21:48:14
【问题描述】:

我有一个形式为 A^n*b =e= c 的方程,其中 A 是矩阵,b & c 是列向量。

n 是我的模型的固定数字,由常数确定。它很可能有数百个,并且会针对不同的解决方案进行更改。

A 是变量矩阵,b & c 是常数。

如何在游戏中制定 A^n*b =e= c?

可选:导致我这样做的模型是,我有一个带有连接矩阵 con(x,x2) 的图,表示当 x 和 x2 连接时 x 和 x2 之间的连接性。我想计算 2 个任意节点之间的连接,2 个节点 x 到 x2 之间的连接是从 x 到 x2 的所有路径的连接的总和。一条路径的连通性是该路径上所有连接的乘积。有没有更聪明的方法来制定这个约束,这样我就不必做矩阵求幂了?

A 不是对称的或可逆的,而是半正定的。

【问题讨论】:

    标签: matrix gams-math


    【解决方案1】:

    您需要首先根据集合和参数定义数据。点击此链接了解更多关于 GAMS 中数据结构的信息:http://www.gams.com/latest/docs/userguides/userguide/_u_g__data_entry.html

    首先定义问题的集合和参数,假设你有 100 个顶点,你可以像这样声明x 例如:

    Set x /x1*x100/;
    alias(x,x2);
    

    因为您需要在矩阵中使用相同的集合两次,所以您必须定义一个 alias 以便 GAMS 将 x2 解释为与模型中的 x 相同。

    然后,将nb 声明为参数,你可以这样做:

    Parameter 
     n /200/
     c /100/;
    Parameter b(x)
    /
    x1 3
    x2 43
    ...
    x100 23
    /;
    

    请注意,具有多个值(即向量或矩阵)的parametersvariables 必须在 GAMS 中先前定义的set 上定义。这就是为什么 b 在集合 x 上定义的原因,将 x 视为向量/矩阵的索引。

    A 的声明格式为:

    Variable A(x,x2);
    

    现在您可以使用这些集合、参数和变量来定义您的方程式:

    eq(x,x2) .. power(A(x,x2),n) * B(x2) =e=  c;
    

    当然,您仍然需要选择一个合适的求解器 (NLP) 并定义一个目标函数,但这就是您为想要的方程和变量建模的方式。

    【讨论】:

    • 幂不只是做幂运算,也就是 A_(x,x2)^n,而不是实际对所有 A 执行矩阵乘法,这是一个截然不同的结果?
    • 是的,这绝对是真的。 GAMS 对于进行矩阵乘法 AFAIK 来说确实不理想,但是有一些实用程序可能会有所帮助,例如矩阵求逆和特征向量。我想我会提到他们,以防你没有看到他们。 gams.com/latest/docs/userguides/mccarl/matrix_utilities.htm我确定你的要求是可能的,但我不知道怎么做。
    • "我想计算 2 个任意节点之间的连接,2 个节点 x 到 x2 之间的连通性是从 x 到 x2 的所有路径的连通性之和。路径的连通性是路径上所有连接的乘积。有没有更聪明的方法来制定这个约束,这样我就不必做矩阵求幂了?听起来这可以通过循环和求和的组合很容易地完成。
    猜你喜欢
    • 2015-12-09
    • 2013-09-24
    • 2015-04-26
    • 2022-01-25
    • 1970-01-01
    • 2018-08-01
    • 2015-12-30
    • 2016-05-30
    • 2021-12-25
    相关资源
    最近更新 更多