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