Skip to content
Snippets Groups Projects
Select Git revision
  • b5346448b409431d4006c4b16e5607fa1cd82783
  • main default protected
2 results

lotkavolterra_antibiotics.m

Blame
  • 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