import numpy as np
z = 10
p = 21
phi = np.zeros((p, z))
po = 1.0
for po in range(p):
i = 0
while i <= 20:
a = phi[po + (po - 1), 0]
b = 1 + ((po - 1)/(2))
c = phi[po - (po - 1), 0]*(1 - ((po - 1)/(2)))
d = phi[po, 0]
e = phi[po, 0]
phi = (1/4)*(a * b + c + d + e)
print("po:", po, 'phi:', phi, 'a-e:', a,b,c,d,e) # Added to show the problem.
i = i + 1
po = po + 1
[Out]
po: 0 phi: 0.0 a-e: 0.0 0.5 0.0 0.0 0.0
phi теперь является float со значением 0.0.Поэтому на второй итерации:
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-1-427fc8d0764c> in <module>()
10 i = 0
11 while i <= 20:
---> 12 a = phi[po + (po - 1), 0]
13 b = 1 + ((po - 1)/(2))
14 c = phi[po - (po - 1), 0]*(1 - ((po - 1)/(2)))
IndexError: invalid index to scalar variable.
Как показывают некоторые комментарии, в коде есть несколько проблем.например, «po - (po-1)» упрощается до 1. Я бы добавил несколько операторов трассировки печати, чтобы отладить его и получить ожидаемые результаты.