У меня есть функция, которая инициализирует массив:
def array(dim):
return np.zeros((dim,dim), float)
и у меня также есть функция граничного условия, которая указывает BC для конкретной системы (поскольку она может измениться):
def boundcond(v, K):
"""
v is some value
K is an array
"""
for k in range(10, 31, 1):
K[k, 18] = v #these are boundary conditions that I want for this
K[k, 22] = -v #particular scenario
return K
для которых оба я хочу использовать в моем итеративном алгоритме:
def iteration(K, v, BC):
"""
K is an initialised array fed in
v is again a scalar value from boundcond(v, K)
BC is what I'd want a boundary condition FUNCTION to put in
"""
for i in range(1, dim-1):
for j in range(1, dim-1):
K[i, j] = (1/4)*(K[i+1, j]+K[i-1, j]+K[i, j+1]+K[i, j-1])
boundcond(v, K) # I want every intermediate K[i, j] during the iteration
# to run through boundcond(v, K), such that some K[i, j] gets
# changed to the BC values
return K # so that in the end it returns K
Однако моя проблема возникает, когда я пытаюсь вызвать свою функцию итерации с входными данными в ней, поскольку, запустив ее, скажем, для массива 50x50, v имеет некоторое скалярное значение, скажем, 10 и вставив мою функцию граничного условия.
iteration(array(40), 10, boundcond(10, K))
Здесь, если я запускаю строку выше, начальный K определяется как массив (40), а мой промежуточный K в boundcond (10, K) не определяется до тех пор, пока мой начальный K не будет повторен в циклах i, j for. Если он уберет это, это означает, что я не могу поместить свою связанную условие (10, K) в свою итерацию (K, v, BC).
У кого-нибудь есть способ обойти это?
Я делаю это таким образом, потому что у меня есть другие сценарии с другим BC, которые я хочу передать в эту итерацию (K, v, BC). Например, у меня может быть еще один BC с именемboundcond2().
iteration(array(40), 10, boundcond)
и внутри вызова функцииBC(v,K)
- person Patrick Artner   schedule 03.03.2019