Select Git revision
lotkavolterra_antibiotics.m
lotkavolterra_antibiotics.m 6.44 KiB
r = [0.8, 0.4, 0.5, 0.3, 0.2, 0.25]'; % Pseudomonas, Staphylococcus, Burkholderia, Stenotrophomonas, Prevotella, Streptococcus
K = [120, 80, 70, 60, 50, 40]';
A = [ 1, -0.2, -0.4, +0.2, -0.1, -0.2; % Pseudomonas interakciói
-0.1, 1, 0.0, 0.0, 0.0, 0.0; % Staphylococcus interakciói
-0.5, 0.0, 1, -0.1, 0.0, 0.0; % Burkholderia interakciói
+0.2, 0.0, -0.2, 1, +0.1, 0.0; % Stenotrophomonas interakciói
-0.1, 0.0, 0.0, +0.1, 1, +0.1; % Prevotella interakciói
-0.2, 0.0, 0.0, 0.0, +0.1, 1 ]; % Streptococcus interakciói
x0 = [50, 30, 20, 25, 15, 10]'; % Kezdeti populációméretek
antibiotics = {'Ampicillin', 'Tobramycin'};
% Differenciálegyenlet megoldása antibiotikum hatással
[t, X] = ode45(@(t, x) lotka_volterra_with_antibiotics(t, x, r, K, A, antibiotics), [0 100], x0);
figure;
hold on;
colors = lines(6);
for i = 1:6
plot(t, X(:, i), 'LineWidth', 2, 'Color', colors(i, :));
end
legend('Pseudomonas', 'Staphylococcus', 'Burkholderia', ...
'Stenotrophomonas', 'Prevotella', 'Streptococcus', 'Location', 'best');
xlabel('Idő', 'FontSize', 12);
ylabel('Populáció mérete', 'FontSize', 12);
title(['Lotka-Volterra modell antibiotikum hatással: ' antibiotics], 'FontSize', 14);
grid on;
% Egyensúlyi állapotok
time_points = [20, 100];
equilibrium_states = zeros(length(time_points), size(X, 2));
for i = 1:length(time_points)
[~, idx] = min(abs(t - time_points(i)));
equilibrium_states(i, :) = X(idx, :);
end
% Adatok normálása egyensúlyi állapotok ábrázolásához
normalized_states = 100 * equilibrium_states ./ sum(equilibrium_states, 2);
figure;
bar_handle = bar(time_points, normalized_states, 'stacked');
colors = lines(6); % 6 species
for i = 1:size(X, 2)
set(bar_handle(i), 'FaceColor', colors(i, :));
end
xlabel('Vizsgált időpillanatok', 'FontSize', 12);
ylabel('Populáció mérete normálva (%)', 'FontSize', 12);
title(['Egyensúlyi állapotok antibiotikum hatással: ' antibiotics], 'FontSize', 14);
legend({'Pseudomonas', 'Staphylococcus', 'Burkholderia', ...
'Stenotrophomonas', 'Prevotella', 'Streptococcus'}, ...
'Location', 'best');
grid on;
% Lotka-Volterra függvény antibiotikum hatással
function dxdt = lotka_volterra_with_antibiotics(t, x, r, K, A, antibiotics)
r_mod = r;
K_mod = K;
extinction_threshold = 10; % Kihalási küszöb
adjustment_rate = 0.08; % Eltartóképesség csökkentésének sebessége (lassan csökken)
for i = 1:length(x)
if x(i) < extinction_threshold
% Fokozatos csökkentés nullához exponenciálisan, ha populáció < küszöb
K_mod(i) = K_mod(i) * exp(-adjustment_rate * t);
r_mod(i) = r_mod(i) * exp(-adjustment_rate * t);
if K_mod(i) < 0.15
r_mod(i) = 0;
end
end
end
if t > 30 && t < 70 % Az antibiotikum 30 és 70 időegység között aktív
% Antibiotikum hatásának időfüggése (Gauss-görbe)
antibiotic_effect = exp(-(t - 50)^2 / (2 * 10^2));
sensitivity_vector = [1, 0.8, 0.9, 0.7, 0.5, 0.4];
% Növekedési ráták csökkentése az időfüggő antibiotikum hatással
r_mod = r_mod .* (1 - antibiotic_effect * sensitivity_vector');
scaled_time = t - 30; % Átskálázott idő: antibiotikum hatás kezdete legyen a 0
resistance_growth_rate = 0.01;
resistance_factor = 1 + resistance_growth_rate * scaled_time;
r_mod = r_mod .* (1 ./ resistance_factor);
max_increase = 1.5; % Maximális eltartóképesség növekedési faktor (pl. 1.5 = 50%-os növekedés)
K_mod = K_mod .* (1 + (max_increase - 1) * (1 - exp(-resistance_growth_rate * scaled_time)));
% Az antibiotikumok antagonisztikus hatásának figyelembevétele
interaction_modifier = ones(size(r_mod)); % Kezdetben nincs hatás
for i = 1:length(antibiotics)
switch antibiotics{i}
case 'Ampicillin'
% Staphylococcus érzékenysége (részleges védelem penicillinázokkal)
r_mod(2) = r_mod(2) * 0.3; % Növekedési ráta csökkentése
K_mod(2) = K_mod(2) * 0.2; % Eltartóképesség jelentős csökkentése
% Streptococcus érzékenysége (kevésbé védekező képes)
r_mod(6) = r_mod(6) * 0.2; % Növekedési ráta csökkentése
K_mod(6) = K_mod(6) * 0.03; % Eltartóképesség erősebb csökkentése
case 'Tobramycin'
% Pseudomonas érzékenysége (aminoglikozid antibiotikum)
r_mod(1) = r_mod(1) * 0.1; % Növekedési ráta csökkentése
K_mod(1) = K_mod(1) * 0.05; % Eltartóképesség csökkentése
case 'Ceftazidime'
% Pseudomonas érzékenysége (széles spektrumú cefalosporin)
r_mod(1) = r_mod(1) * 0.2; % Növekedési ráta csökkentése
K_mod(1) = K_mod(1) * 0.01; % Jelentős eltartóképesség csökkentése
% Prevotella részleges érzékenysége
r_mod(5) = r_mod(5) * 0.6; % Növekedési ráta csökkentése
case 'Azithromycin'
% Staphylococcus érzékenysége (makrolid antibiotikum)
r_mod(2) = r_mod(2) * 0.3; % Növekedési ráta csökkentése
K_mod(2) = K_mod(2) * 0.5; % Mérsékelt eltartóképesség csökkentése
% Streptococcus érzékenysége
r_mod(6) = r_mod(6) * 0.2; % Növekedési ráta csökkentése
K_mod(6) = K_mod(6) * 0.8; % Enyhébb eltartóképesség csökkentése
case 'Tetracycline'
% Tetracycline (bakteriosztatikus) hatása
r_mod(3) = r_mod(3) * 0.5; % Burkholderia növekedési ráta csökkentése
K_mod(3) = K_mod(3) * 0.5; % Burkholderia eltartóképesség csökkentése
interaction_modifier(2) = interaction_modifier(2) * (1 - 0.8); % Csökkenti Penicillin hatékonyságát
case 'Penicillin'
% Penicillin (baktericid) hatása
r_mod(2) = r_mod(2) * 0.7; % Staphylococcus növekedési ráta csökkentése
K_mod(2) = K_mod(2) * 0.8; % Staphylococcus eltartóképesség csökkentése
interaction_modifier(3) = interaction_modifier(3) * (1 - 0.8); % Csökkenti Tetracycline hatékonyságát
end
end
r_mod = r_mod .* interaction_modifier;
end
% Lotka-Volterra dinamikák számítása
dxdt = r_mod .* x .* (1 - ((A * x) ./ K_mod));
end