Питон. ОптимизацияPython

Программы на Python
Ответить
Anonymous
 Питон. Оптимизация

Сообщение Anonymous »

Я полный новичок в программировании, и мне нужно оптимизировать алгоритм, чтобы он работал намного быстрее.
У меня есть система дифференциальных уравнений для функций u, i, v с четырьмя параметрами beta, delta , п, в. Сначала я задал значения коэффициентов и численным методом получил значения всех трех функций, записанных в трех соответствующих массивах. Затем я пытаюсь решить обратную задачу: у нас есть три массива значений функции, и по этим значениям мы пытаемся найти коэффициенты. Для этого я написал функцию get_coefficients(u_values, i_values, v_values, t_end). Я реализовал самый глупый способ. Я установил 4 сегмента, внутри которых могут меняться параметры. И я тупо перебирал значения коэффициентов за четыре цикла while и с постоянным шагом.
Код:

Код: Выделить всё

EPSILON = 1*pow(10, -8)

# Задаем параметры
beta = 1.59*pow(10, -8)
delta = pow(10, -6)
p = 23.91
c = pow(10, -8)

# Задаем начальные условия
u = 70000
i = 0
v = 7000

# Задаем временной интервал и шаг
t = 0
t_end = 100
dt = 0.01

# Создаем списки для сохранения значений u,i,v и времени
time = []
u_values = []
i_values = []
v_values = []

while t < t_end:
# Подсчет инкрементов для u, i, v
du1 = dt * (- beta * u * v)
di1 = dt * (beta * u * v - delta * i)
dv1 = dt * (p * i - c * v)

du2 = dt * (- beta * (u + du1/2) * (v + dv1/2))
di2 = dt * (beta * (u + du1/2) * (v + dv1/2) - delta * (i + di1/2))
dv2 = dt * (p * (i + di1/2) - c * (v + dv1/2))

du3 = dt * (- beta * (u + du2/2) * (v + dv2/2))
di3 = dt * (beta * (u + du2/2) * (v + dv2/2) - delta * (i + di2/2))
dv3 = dt * (p * (i + di2/2) - c * (v + dv2/2))

du4 = dt * (- beta * (u + du3) * (v + dv3))
di4 = dt * (beta * (u + du3) * (v + dv3) - delta * (i + di3))
dv4 = dt * (p * (i + di3) - c * (v + dv3))

# Обновляем значения u, i, v
u += (du1 + 2*du2 + 2*du3 + du4) / 6
i += (di1 + 2*di2 + 2*di3 + di4) / 6
v += (dv1 + 2*dv2 + 2*dv3 + dv4) / 6

# Сохраняем текущие значения
time.append(t)
u_values.append(u)
i_values.append(i)
v_values.append(v)

# Обновляем время
t += dt

def get_coefficients(u_values, i_values, v_values, t_end):
n = 5

coeff = []

points = []
u_val = []
i_val = []
v_val = []

beta_begin = 1.59*pow(10, -8)
delta_begin = 0.1*pow(10, -6)
p_begin = 20
c_begin = 0.1*pow(10, -8)

beta_end = 1.69*pow(10, -8)
delta_end = 1.1*pow(10, -6)
p_end = 24.91
c_end = 1.1*pow(10, -8)

dbeta = 1*pow(10, -10)
ddelta = 1*pow(10, -7)
dp = 0.01
dc = 1*pow(10, -9)

beta_f = beta_begin
delta_f = delta_begin
p_f = p_begin
c_f = c_begin

previous = 0
for i in range(n):
points.append(previous + t_end/5)
previous = points[-1]

while beta_f 

Подробнее здесь: [url]https://stackoverflow.com/questions/79197670/python-optimization[/url]
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»