Отлично!


Давай ускорим нашу анимацию, чтобы процесс выглядел более динамично. Интервал смены кадров уменьшать уже некуда, давай просто в каждом кадре делать не один tick(), а 20.

Этого просто добиться уже знакомым нам циклом for.





































%matplotlib tk
import matplotlib.pyplot as plt #Функции рисования графиков
import matplotlib.animation as animation #Функции анимации
import numpy as np #Для создания массивов в модели

ρ=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

def animate(i):
for t in range(20): #20 раз
tick() #Проводим вычисления
line.set_ydata(ϕ) #Передаем линии новые данные
return line,

tick()

fig, ax = plt.subplots() #Создадим изображение (fig) и график (ax)
line, = ax.plot(ϕ) #А теперь саму линию, отображающую наш массив ϕ (первоначально).
ani = animation.FuncAnimation(fig, animate, interval=1, blit=True) #Создаем анимацию

Вот, теперь и красиво, и быстро.

Как ты думаешь, на самом деле это так же происходит?