Нет. График потенциала будет некрасивый: что это за график из двух точек? Давай-ка сделаем 100 клеток.


Теперь нам надо удлинить список сопротивлений всех клеток. Писать вручную 100 раз цифру 10 - не самое интересное занятие. Поэтому мы импортируем библиотеку numpy:


import numpy as np

И применим ее функцию full (по английски - "полный")


ρ=np.full(100,10) #Создать массив из 100 клеток, заполненный числами "10"

Проверяем:


ρ





array([10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10,
10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10, 10])

Как видишь, ничего сложного. Зададим также всем ста клеткам нулевой потенциал:



ϕ = np.full(100,0.0)  
ϕ





array([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., 0., 0., 0.])

Пришлось написать 0.0 вместо просто "0", а то python норовил создать масив целых чисел, тогда как нам для расчета потенциалов нужны дробные, с плавающей точкой.


Теперь создадим функцию, обеспечивающую работу батарейки. Она будет у нас просто всегда поддерживать в самой левой (нулевой) ячейке -4.5 а в правой (99-й) +4.5 вольта.




def battery():
ϕ[0]=-4.5
ϕ[99]=4.5

Наша старая функция step() не требует изменений.







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

Только теперь мы собираемся применять ее к каждой паре соседних ячеек. Печатать состояние проводника каждый раз при этом совершенно ни к чему, а значит, имеет смысл убрать "print (ϕ)".

Кроме того, мы все чаще работаем с переменными и прибавляем к ним что-то или вычитаем. Я хочу показать тебе способ сокращенной записи этих операций. Ничего сложного:












a=5
a+=2 # a=a+2
print(a)
a-=2 # a=a-2
print(a)
a*=2 # a=a*2
print(a)
a/=2 # a=a/2
print(a)
a**=2 # a=a**2
print(a)





7
5
10
5.0
25.0

В этом примере мы выигрываем в каждой строчке всего один символ, но как правило, выигрыш больше, хотя бы в той же функции step():






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

Тут уже в двух строках мы сэкономили 10 символов, а главное - сделали функцию более удобной для понимания. Это в пргограммировании - самое главное. Потому что когда программа растет, человек быстро перестает ее понимать и именно это ограничивает скорость и качество программирования. Самые опытные и эффективные программисты - мастера в том, чтобы делать программы понятными - в первую очередь, для самих себя. Ну и для других, если в работе над программой участвует кто-то еще. Это же самое относится и к техническим системам и к научным теориям.


А полный шаг во времени модель делает при выполнении функции, которую я так и назвал - tick. Она очень проста:






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

Что ж, запустим нашу функцию (не забудь сначала запустить ячейки с предыдущими команадами! А то python не найдет каких-нибудь переменных или функций и будет ругаться.).


tick()















[-4.05e+00 -4.05e-01 -4.05e-02 -4.05e-03 -4.05e-04 -4.05e-05 -4.05e-06
-4.05e-07 -4.05e-08 -4.05e-09 -4.05e-10 -4.05e-11 -4.05e-12 -4.05e-13
-4.05e-14 -4.05e-15 -4.05e-16 -4.05e-17 -4.05e-18 -4.05e-19 -4.05e-20
-4.05e-21 -4.05e-22 -4.05e-23 -4.05e-24 -4.05e-25 -4.05e-26 -4.05e-27
-4.05e-28 -4.05e-29 -4.05e-30 -4.05e-31 -4.05e-32 -4.05e-33 -4.05e-34
-4.05e-35 -4.05e-36 -4.05e-37 -4.05e-38 -4.05e-39 -4.05e-40 -4.05e-41
-4.05e-42 -4.05e-43 -4.05e-44 -4.05e-45 -4.05e-46 -4.05e-47 -4.05e-48
-4.05e-49 -4.05e-50 -4.05e-51 -4.05e-52 -4.05e-53 -4.05e-54 -4.05e-55
-4.05e-56 -4.05e-57 -4.05e-58 -4.05e-59 -4.05e-60 -4.05e-61 -4.05e-62
-4.05e-63 -4.05e-64 -4.05e-65 -4.05e-66 -4.05e-67 -4.05e-68 -4.05e-69
-4.05e-70 -4.05e-71 -4.05e-72 -4.05e-73 -4.05e-74 -4.05e-75 -4.05e-76
-4.05e-77 -4.05e-78 -4.05e-79 -4.05e-80 -4.05e-81 -4.05e-82 -4.05e-83
-4.05e-84 -4.05e-85 -4.05e-86 -4.05e-87 -4.05e-88 -4.05e-89 -4.05e-90
-4.05e-91 -4.05e-92 -4.05e-93 -4.05e-94 -4.05e-95 -4.05e-96 -4.05e-97
4.50e-01 4.05e+00
]

О, смотри-ка что произошло! Отрицательный потенциал (хоть и ничтожно малый) сразу пробежал по всему проводнику, а положительный распространился за тот же шаг всего на одну клетку влево. Что же это значит?