在 GAMS 中将矩阵与向量相乘
Multiply matrix with vector in GAMS
考虑 GAMS 中的以下 table:
Set i /i1*i4 /;
Table a(i,j) 'original matrix'
i1 i2 i3 i4
i1 2 0 0 0
i2 0.272727 2 0.727273 0
i3 0 0.8 2 0.2
i4 0 0 0 2;
我想将 a
的逆矩阵与以下向量相乘:
parameters v(i) /
i1 0
i2 -0.03413
i3 -0.01174
i4 0 /;
所以我将得到以下向量:
parameters B(i) /
i1 0
i2 -0.01747
i3 0.001116
i4 0
我试过以下方法:
Alias (i,j);
Parameter inva(i,j) 'inverse of a';
execute_unload 'a.gdx', i, a;
execute '=invert.exe a.gdx i a b.gdx inva';
execute_load 'b.gdx', inva;
parameter B(i);
loop(j,
loop(i,
B(i) = inva(i,j)*v(i)
)
);
我的倒矩阵看起来不错,但是 matrix/vector 乘法出了点问题。
只是简单地查看了您的代码,在我看来您希望最后一个循环为:
loop(j,
B(i) = inva(i,j)*v(j)
);
因为您只想对矩阵的列求和。
考虑 GAMS 中的以下 table:
Set i /i1*i4 /;
Table a(i,j) 'original matrix'
i1 i2 i3 i4
i1 2 0 0 0
i2 0.272727 2 0.727273 0
i3 0 0.8 2 0.2
i4 0 0 0 2;
我想将 a
的逆矩阵与以下向量相乘:
parameters v(i) /
i1 0
i2 -0.03413
i3 -0.01174
i4 0 /;
所以我将得到以下向量:
parameters B(i) /
i1 0
i2 -0.01747
i3 0.001116
i4 0
我试过以下方法:
Alias (i,j);
Parameter inva(i,j) 'inverse of a';
execute_unload 'a.gdx', i, a;
execute '=invert.exe a.gdx i a b.gdx inva';
execute_load 'b.gdx', inva;
parameter B(i);
loop(j,
loop(i,
B(i) = inva(i,j)*v(i)
)
);
我的倒矩阵看起来不错,但是 matrix/vector 乘法出了点问题。
只是简单地查看了您的代码,在我看来您希望最后一个循环为:
loop(j,
B(i) = inva(i,j)*v(j)
);
因为您只想对矩阵的列求和。