2017-01-22 12 views
0

私はA^n * b = e = cの式を持ちます。ここで、Aは行列、b &cは列ベクトルです。行列のパワーを含む方程式

nは、定数で決まるモデルの固定数です。多くの場合、数百になり、さまざまなソリューションに変更されます。

Aは変数の行列です。b &cは定数です。

ガムでA^n * b = e = cをどのように定式化できますか?

オプションで、私にこれを導くモデルは、xとx2が接続されているときのxとx2との間の接続性を表す接続行列con(x、x2)を持つグラフがあるということです。 2つの任意のノード間の接続を計算したいと思います.2つのノードxとx2の間の接続は、xからx2までのすべてのパスの接続の合計です。パスの接続性は、パスに沿ったすべての接続の結果です。行列のべき乗を行う必要がないように、この制約式を定式化するよりスマートな方法がありますか?

Aは対称または可逆ではありませんが、半正定です。

答えて

0

まず、データをセットとパラメータの観点から定義する必要があります。 GAMS内のデータ構造の詳細については、このリンクをクリックしてください:あなたの問題のセットとパラメータを定義することによってhttp://www.gams.com/latest/docs/userguides/userguide/_u_g__data_entry.html

スタート、あなたは100個の頂点を持っていると仮定、あなたは、例えば、このようxを宣言することができます。

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

マトリックス内で同じセットを2回使用する必要があるため、aliasを定義して、x2がGAMSによってモデル内でxと解釈されるようにする必要があります。

その後、あなたはこのようにそれを行うことができ、パラメータとしてnbを宣言:

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

parametersと複数の値を持つvariables(即ちベクトルまたは行列)は、以前に上で定義する必要がありますGAMSにsetと定義されています。これはbがセットxで定義され、xがあなたのベクトル/行列のインデックスを好んでいると考えている理由です。

Aの宣言は、フォームを持っています:

Variable A(x,x2); 

は今、あなたはこれらのセット、パラメータおよび変数を使用して式を定義することができます。もちろん

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

を、あなたはまだ選択する必要があります適切なソルバ(NLP)と目的関数を定義しますが、これはあなたが望む方程式とその変数をモデル化する方法です。

+0

Aは実際に行列の乗算を行うのではなく、A_(x、x2)^ nのように冪乗を行うだけでは、大きな違いはありませんか? – Bomaz

+0

はい、それは絶対に真です。 GAMSは実際に行列乗算AFAIKを行うのに理想的ではありませんが、行列反転や固有ベクトルなどの役に立つユーティリティがいくつかあります。私はあなたがそれらを見ていない場合には、私はそれらを言及すると思った。 https://www.gams。com/latest/docs/userguides/mccarl/matrix_utilities.htm 私はあなたが求めているものは可能だと確信していますが、私はどのように考えているのかわかりません。 –

+0

"2つのノードxとx2との間の接続は、xからx2までのすべてのパスの接続の合計です。行列累乗を行う必要がないように、この制約式を定式化するよりスマートな方法はありますか? これは、ループとサムの組み合わせで簡単に達成できると思います。 –

関連する問題