我必须使用以下代码形成一个雅可比矩阵。雅可比的行是函数残差.残差的值。并且对于每个外部循环,列被添加到雅可比。问题是我不知道如何在变量"Rop"上使用索引。
我在 matlab 中使用了给定的索引,它在那里工作正常。 但我想我需要为 python 更改它。
for i1 in range(1,nxt-1):
for j1 in range(1,nyt-1):
Rop=();Rsp=();Rsgp=()
pit[i1,j1]=pit[i1,j1]+ep;
sit[i1,j1]=sit[i1,j1]+es;
sgit[i1,j1]=sgit[i1,j1]+es;
for i in range(1,nxt-1):#inner loop to calculate perturbed residual
for j in range(1,nyt-1):
if (index[i,j]!=0):
rop,rwp,rgp=residual.residual(pit,sw,sg,i,j,boold,bwold,bgold,
swold,sgold,rsoold,rswold,index,
delx, dely, depth, phi, kx, ky,
ax, ay, h, delt, qo, nxt, nyt, welin,
Vb, pvtgas, pvtoil, pvtw, relpermgo,
relpermow, time, it,fmult)
Rop[count:count+2,col]+=(rop/ep,rwp/ep,rgp/ep)
rop,rwp,rgp=residual.residual(po,sit,sg,i,j,boold,bwold,bgold,
swold,sgold,rsoold,rswold,index,
delx, dely, depth, phi, kx, ky,
ax, ay, h, delt, qo, nxt, nyt, welin,
Vb, pvtgas, pvtoil, pvtw, relpermgo,
relpermow, time, it,fmult)
Rop[count:count+2,col+1]+=(rop/es,rwp/es,rgp/es)
rop,rwp,rgp=residual.residual(po,sw,sgit,i,j,boold,bwold,bgold,
swold,sgold,rsoold,rswold,index,
delx, dely, depth, phi, kx, ky,
ax, ay, h, delt, qo, nxt, nyt, welin,
Vb, pvtgas, pvtoil, pvtw, relpermgo,
relpermow, time, it,fmult)
Rop[count:count+2,col+2]+=(rop/es,rwp/es,rgp/es)
MATLAB 使用基于 1 的索引,而 Python 使用基于 0 的索引。
尝试将所有范围从形式更改为range(1,nxt-1)
range(nxt)
,这将为您提供从 0
到 nxt-1
的序列,包括。长形式是range(0, nxt)
.
代码判断要停止的位置,但是如果您想在nxt-1
之前停止,只需相应地调整范围的最后一个参数即可。
我不确定如何就Rop[count:count+2,col]
为您提供建议,因为您还没有展示如何定义count
。