Сообщество Engee

Регуляция уровня глюкозы в организме человека

Автор
avatar-akmalovmakmalovm
Соавторы
avatar-dimabalakindimabalakin
Notebook

Регуляция уровня глюкозы в организме человека

Введение

В данном примере рассматривается система регуляции уровня глюкозы. Когда уровень глюкозы в плазме повышен, секреция инсулина стимулируется. Это повышает уровень инсулина в крови, что увеличивает поглощение глюкозы тканями. Усиленный отток глюкозы из крови и интерстициальной жидкости приводит к снижению концентрации глюкозы, что, в свою очередь, вызывает уменьшение секреции инсулина.

Дополнительные функции

Для расчета решения уравнения баланса 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")
Стационарные точки регуляции глюкозы:
------------------------------------
Нормальные условия (N):
  Глюкоза = 0.8172 mg/mL
  Инсулин = 0.0562 mU/mL

Диабет 1-го типа (D1):
  Глюкоза = 1.2975 mg/mL
  Инсулин = 0.0288 mU/mL

Диабет 2-го типа (D2):
  Глюкоза = 1.2975 mg/mL
  Инсулин = 0.144 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.