包含矩阵幂的方程式



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

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

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

如何在gams中公式化A^n*b=e=c?

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

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

首先需要根据集合和参数定义数据。有关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)并定义一个目标函数,但这就是你想要的方程和变量的建模方式。

最新更新