Это было бы самое логичное, только вот компьютер не может ничего делать одновременно. Он всегда работает последовательно, хотя и очень быстро. А это - сам видишь - вовсе не одно и то же. Думаю, лучше всего - составить список токов во всех парах, а потом их вычесть и прибавить где нужно.


Так ячейки друг на друга повлиять не должны - ведь обмен электричеством произойдет уже после завершения последней step().

Осуществим эту идею. В массиве I условимся под номером a хранить ток, идущий из a в a+1 (тот же трюк, что мы проелали с сопротивлением). Если ток будет отрицательным, значит он пойдет в обратную сторону (ϕ[a+1] будет уменьшаться, а ϕ[a] - увеличиваться).




















ρ=np.full(100,10)
ϕ=np.full(100,0.0)
I=np.full(100,0.0)
def battery():
ϕ[0]=-4.5
ϕ[99]=4.5

def step(a):
Δϕ = ϕ[a]-ϕ[a+1] #Считаем разность потенциалов между клетками a и a+1
I[a]=Δϕ/ρ[a] #Найдем силу тока I(a)

def tick():
battery() #Батарея задает потенциалы на концах
for a in range(99): #Для каждой клетки
step(a) #Рассчитываем обмен потенциалами клетки a (со следующей)
for a in range(99): #Для каждой клетки
ϕ[a]-=I[a] #Потенциал утекает из клетки a
ϕ[a+1]+=I[a] #Потенциал притекает в клетку a+1
print(ϕ) #Печататем состояние проводника

tick()









[-4.05 -0.45  0.    0.    0.    0.    0.    0.    0.    0.    0.    0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0.45 4.05]

Вот! Другое дело!


tick()










[-4.095 -0.81  -0.045  0.     0.     0.     0.     0.     0.     0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0.045 0.81 4.095]
tick()












[-4.131  -1.1025 -0.117  -0.0045  0.      0.      0.      0.      0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0. 0. 0.
0. 0. 0. 0. 0. 0. 0.0045 0.117 1.1025
4.131
]

Потенциалы распространются симметрично. Что ж, настало время, запустить цикл и посмотреть, что случится в конце концов.

Только вот print(ϕ) в tick() будет мешать - заполонит весь экран. Перепределим эту функцию без print(ϕ)








def tick():
battery() #Батарея задает потенциалы на концах
for a in range(99): #Для каждой клетки
step(a) #Рассчитываем обмен потенциалами клетки a (со следующей)
for a in range(99): #Для каждой клетки
ϕ[a]-=I[a] #Потенциал утекает из клетки a
ϕ[a+1]+=I[a] #Потенциал притекает в клетку a+1

И... поехали!




for t in range(1000):
tick()
print(ϕ)

























[-4.47466211e+00 -4.24674721e+00 -3.99475344e+00 -3.74525896e+00
-3.49946697e+00 -3.25852625e+00 -3.02351511e+00 -2.79542703e+00
-2.57515836e+00 -2.36349822e+00 -2.16112095e+00 -1.96858096e+00
-1.78631025e+00 -1.61461833e+00 -1.45369462e+00 -1.30361291e+00
-1.16433786e+00 -1.03573310e+00 -9.17570705e-01 -8.09541700e-01
-7.11267221e-01 -6.22310078e-01 -5.42186367e-01 -4.70376863e-01
-4.06337943e-01 -3.49511842e-01 -2.99336051e-01 -2.55251751e-01
-2.16711185e-01 -1.83183925e-01 -1.54162026e-01 -1.29164083e-01
-1.07738253e-01 -8.94642950e-02 -7.39547281e-02 -6.08552067e-02
-4.98442080e-02 -4.06321466e-02 -3.29600163e-02 -2.65976602e-02
-2.13417567e-02 -1.70136056e-02 -1.34567810e-02 -1.05347109e-02
-8.12822787e-03 -6.13312587e-03 -4.45774615e-03 -3.02060565e-03
-1.74807257e-03 -5.72086357e-04 5.72086357e-04 1.74807257e-03
3.02060565e-03 4.45774615e-03 6.13312587e-03 8.12822787e-03
1.05347109e-02 1.34567810e-02 1.70136056e-02 2.13417567e-02
2.65976602e-02 3.29600163e-02 4.06321466e-02 4.98442080e-02
6.08552067e-02 7.39547281e-02 8.94642950e-02 1.07738253e-01
1.29164083e-01 1.54162026e-01 1.83183925e-01 2.16711185e-01
2.55251751e-01 2.99336051e-01 3.49511842e-01 4.06337943e-01
4.70376863e-01 5.42186367e-01 6.22310078e-01 7.11267221e-01
8.09541700e-01 9.17570705e-01 1.03573310e+00 1.16433786e+00
1.30361291e+00 1.45369462e+00 1.61461833e+00 1.78631025e+00
1.96858096e+00 2.16112095e+00 2.36349822e+00 2.57515836e+00
2.79542703e+00 3.02351511e+00 3.25852625e+00 3.49946697e+00
3.74525896e+00 3.99475344e+00 4.24674721e+00 4.47466211e+00
]

Не очень понятно. Построим график.




from matplotlib import pyplot as plt
plt.plot(ϕ) # Рисуем линию по данным из списка ϕ
plt.show() # Показываем его в отдельном окошке программы


А.. он вовсе не прямой...