Регуляция уровня глюкозы в организме человека
Регуляция уровня глюкозы в организме человека
Введение
В данном примере рассматривается система регуляции уровня глюкозы. Когда уровень глюкозы в плазме повышен, секреция инсулина стимулируется. Это повышает уровень инсулина в крови, что увеличивает поглощение глюкозы тканями. Усиленный отток глюкозы из крови и интерстициальной жидкости приводит к снижению концентрации глюкозы, что, в свою очередь, вызывает уменьшение секреции инсулина.
Дополнительные функции
Для расчета решения уравнения баланса solve_glucose_equation.
function solve_glucose_equation(v, lambda, beta, alpha, phi, Ql, mu, theta, interval_min, interval_max)
# Проверяем случай без инсулинового ответа (x ≤ φ)
x_low = Ql / lambda
if interval_min < x_low <= phi && x_low > 0
return x_low, 0.0
end
# Случай с инсулиновым ответом, но без почечного выделения (φ < x ≤ θ)
a1 = v * beta / alpha
b1 = lambda - (v * beta * phi) / alpha
c1 = -Ql
discriminant_1 = b1^2 - 4*a1*c1
roots1 = []
if discriminant_1 >= 0
x1 = (-b1 + sqrt(discriminant_1)) / (2*a1)
x2 = (-b1 - sqrt(discriminant_1)) / (2*a1)
roots1 = filter(x -> phi < x <= theta && x > 0, [x1, x2])
end
# Случай с инсулиновым ответом и почечным выделением (x > θ)
a2 = v * beta / alpha
b2 = lambda + mu - (v * beta * phi) / alpha
c2 = -Ql - mu*theta
discriminant_2 = b2^2 - 4*a2*c2
roots2 = []
if discriminant_2 >= 0
x3 = (-b2 + sqrt(discriminant_2)) / (2*a2)
x4 = (-b2 - sqrt(discriminant_2)) / (2*a2)
roots2 = filter(x -> x > theta && x > 0, [x3, x4])
end
# Выбираем наименьший корень
all_roots = vcat(roots1, roots2)
valid_roots = filter(x -> interval_min < x <= interval_max, all_roots)
x_sol = minimum(valid_roots) # Выбираем наименьшую точку
y_sol = (beta / alpha) * max(x_sol - phi, 0)
return x_sol, y_sol
end;
Для расчета кривых регуляции воспользуемся функцией calculate_curves:
function calculate_curves(x_range, v, lambda, beta, alpha, phi, mu, theta, Ql)
# Расчет кривых инсулина и глюкозы
y_insulin = (beta / alpha) * max.(x_range .- phi, 0)
y_glucose = zeros(length(x_range))
for (i, x) in enumerate(x_range)
if x <= theta
y_glucose[i] = (Ql - lambda*x) / (v*x)
else
y_glucose[i] = (Ql - lambda*x - mu*(x - theta)) / (v*x)
end
end
# Ограничение значений Y в диапазоне [0, 0.5]
y_insulin[y_insulin .< 0] .= NaN
y_insulin[y_insulin .> 0.5] .= NaN
y_glucose[y_glucose .< 0] .= NaN
y_glucose[y_glucose .> 0.5] .= NaN
return y_insulin, y_glucose
end;
Теоретические сведения
В данной модели общий объем крови и интерстициальных жидкостей представлен единым большим компартментом (V ~ 15 л у взрослого человека), и что стационарная концентрация глюкозы в этом компартменте равна (мг/мл). Для поддержания этого уровня x постоянным, суммарный приток глюкозы в компартмент должен равняться суммарному оттоку из него. В нормальных условиях глюкоза поступает в кровь через всасывание из желудочно-кишечного тракта или за счет продукции печенью. В данном примере скорость выходного потока обозначим как (мг/ч). Существует три основных пути выведения глюкозы из крови:
- Когда превышает определенный порог , глюкоза выводится почками со скоростью, пропорциональной градиенту между и :
- Глюкоза покидает кровь и поступает в большинство клеток путем облегченной диффузии. В некоторых тканях скорость утилизации глюкозы зависит только от градиента концентрации внеклеточная/внутриклеточная. В большинстве случаев внутриклеточную концентрацию можно не учитывать:
- В определенных типах клеток, таких как мышечные и жировые, инсулин помогает стимулировать процесс облегченной диффузии. Следовательно, скорость поглощения глюкозы этими клетками пропорциональна , а также концентрации инсулина в крови :
В приведенных выше уравнениях , и являются постоянными коэффициентами пропорциональности. Приравнивая приток к сумме трех оттоков, мы получаем следующие уравнения баланса массы для глюкозы крови:
\text{Инсулин} \text{продуцируется} \text{поджелудочной} \text{железой} \text{со} \text{скоростью}, \text{зависящей} \text{от} \text{уровня} \text{глюкозы} \text{в} \text{плазме}. \text{Однако} \text{если} \text{падает} \text{ниже} \text{определенного} \text{порога} , \text{продукция} \text{инсулина} \text{прекращается}. \text{Таким} \text{образом}, \text{имеем}:
\text{Инсулин} \text{разрушается} \text{в} \text{реакции} \text{с} \text{участием} \text{фермента} \text{инсулиназы} \text{со} \text{скоростью}, \text{пропорциональной} \text{его} \text{концентрации} \text{в} \text{крови}:
\text{Объединяя} \text{полученные} \text{ранее} \text{уравнения} \text{выведем} \text{уравнение} \text{связывающее} \text{стационарный} \text{уровень} c :
Модель регуляции глюкозы
Значения параметров, использованные в этом расчете, соответствуют норме для взрослого человека
# Параметры модели (нормальные условия)
theta = 2.5 # Порог почечной экскреции глюкозы (mg/mL)
mu = 7200 # Коэффициент почечной экскреции (mL/h)
lambda_val = 2470 # Коэффициент инсулин-независимой утилизации (mL/h)
v_val = 139000 # Коэффициент инсулин-зависимой утилизации (mU⁻¹ h⁻¹)
phi_val = 0.51 # Порог секреции инсулина (mg/mL)
beta_val = 1390 # Чувствительность инсулинового ответа (mL.U mL mg⁻¹ h⁻¹)
alpha_val = 7600 # Коэффициент разрушения инсулина (mL/h)
Ql_val = 8400; # Скорость поступления глюкозы (mg/h)
Проведем расчет для трех сценариев:
-
нормальный процесс,
-
диабет 1-го типа,
-
диабет 2-го типа.
# Нормальный процесс
x_normal, y_normal = solve_glucose_equation(v_val, lambda_val, beta_val, alpha_val, phi_val, Ql_val, mu, theta, 0.0, 10.0)
# Диабет 1-го типа: снижение чувствительности инсулинового ответа
beta_d1 = 0.2 * beta_val
x_d1, y_d1 = solve_glucose_equation(v_val, lambda_val, beta_d1, alpha_val, phi_val, Ql_val, mu, theta, 0.0, 10.0)
# Диабет 2-го типа: снижение инсулин-зависимой утилизации
v_d2 = 0.2 * v_val
x_d2, y_d2 = solve_glucose_equation(v_d2, lambda_val, beta_val, alpha_val, phi_val, Ql_val, mu, theta, 0.0, 10.0);
Результаты анализа расчета стационарны точек регуляции глюкозы.
# Вывод результатов
println("Стационарные точки регуляции глюкозы:")
println("------------------------------------")
println("Нормальные условия (N):")
println(" Глюкоза = ", round(x_normal, digits=4), " mg/mL")
println(" Инсулин = ", round(y_normal, digits=4), " mU/mL")
println("\nДиабет 1-го типа (D1):")
println(" Глюкоза = ", round(x_d1, digits=4), " mg/mL")
println(" Инсулин = ", round(y_d1, digits=4), " mU/mL")
println("\nДиабет 2-го типа (D2):")
println(" Глюкоза = ", round(x_d2, digits=4), " mg/mL")
println(" Инсулин = ", round(y_d2, digits=4), " mU/mL")
Расчет графиков для трех сценариев.
x_range = 0.0:0.01:2.0 # Диапазон концентраций глюкозы
# Расчет для трех сценариев
y_ins_norm, y_gluc_norm = calculate_curves(x_range, v_val, lambda_val, beta_val, alpha_val, phi_val, mu, theta, Ql_val)
y_ins_d1, y_gluc_d1 = calculate_curves(x_range, v_val, lambda_val, beta_d1, alpha_val, phi_val, mu, theta, Ql_val)
y_ins_d2, y_gluc_d2 = calculate_curves(x_range, v_d2, lambda_val, beta_val, alpha_val, phi_val, mu, theta, Ql_val);
Визуализация результатов моделирования.
p1 = plot(x_range, [y_ins_norm, y_gluc_norm],
label=["Инсулиновый отклик" "Баланс глюкозы"],
title="Нормальные условия",
xlabel="Концентрация глюкозы (mg/mL)",
ylabel="Концентрация инсулина (mU/mL)",
linewidth=2,
linestyle=[:solid :dash],
color=[:blue :red],
xlims=(0.0, 2.0),
ylims=(0, 0.4),
legend=:topright)
scatter!([x_normal], [y_normal], label="Точка N", color=:green, markersize=6)
p2 = plot(x_range, [y_ins_d1, y_gluc_d1],
label=["Инсулиновый отклик диабет 1-го типа" "Баланс глюкозы"],
title="Диабет 1-го типа",
xlabel="Концентрация глюкозы (mg/mL)",
ylabel="Концентрация инсулина (mU/mL)",
linewidth=2,
linestyle=[:solid :dash],
color=[:blue :red],
xlims=(0.0, 2.0),
ylims=(0, 0.4),
legend=:topright)
scatter!([x_d1], [y_d1], label="Точка D1", color=:green, markersize=6)
p3 = plot(x_range, [y_ins_d2, y_gluc_d2],
label=["Инсулиновый отклик" "Баланс глюкозы диабет 2-го типа"],
title="Диабет 2-го типа",
xlabel="Концентрация глюкозы (mg/mL)",
ylabel="Концентрация инсулина (mU/mL)",
linewidth=2,
linestyle=[:solid :dash],
color=[:blue :red],
xlims=(0.0, 2.0),
ylims=(0, 0.4),
legend=:topright)
scatter!([x_d2], [y_d2], label="Точка D2", color=:green, markersize=6)
plot(p1, p2, p3,
layout=(3,1),
size=(1000, 1200),
margin=40*Plots.px)
Заключение
Регуляция уровня глюкозы в крови представляет собой систему с отрицательной обратной связью. Повышение глюкозы стимулирует секрецию инсулина, который способствует ее поглощению тканями, снижая концентрацию. Модель описывает баланс притока и оттока глюкозы, включая нелинейности. Диабет 1-го типа моделируется снижением выработки инсулина (), что ведет к высокому уровню глюкозы и низкому инсулина. Диабет 2-го типа моделируется снижением чувствительности тканей к инсулину (), что приводит к высоким уровням и глюкозы, и инсулина.
Список используемых источников
1 - Stolwijk, J.A.J., and J.D. Hardy. "A Model for the Physiological Regulation of Blood Glucose Levels." 1974.