Skip to content

Instantly share code, notes, and snippets.

@NTR0314
Created June 1, 2019 18:03
Show Gist options
  • Save NTR0314/b8f5fc823c186f6f78295d7059ede97f to your computer and use it in GitHub Desktop.
Save NTR0314/b8f5fc823c186f6f78295d7059ede97f to your computer and use it in GitHub Desktop.

Revisions

  1. NTR0314 created this gist Jun 1, 2019.
    136 changes: 136 additions & 0 deletions aufgabe2.m
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,136 @@
    % Ignorieren Sie die folgende Zeile. Überall wo ZuVeraendernderAusdruck im folgenden auftaucht
    % sind Änderungen durch Sie erforderlich.
    ZuVeraendernderAusdruck=nan;

    % Konstanten
    G_K_max = 36; % Maximale Kalium-Leitfähigkeit (mS)
    G_Na_max = 120; % Maximale Natrium-Leitfähigkeit (mS)

    % Spannungen (Nernstspannungen können als konstant betrachtet werden)
    E_K = -88; % Nernstsspannung für Kalium (mV)
    E_Na = 50; % Nernstsspannung für Natrium (mV)
    VpreStep = -65; % Spannung vor Sprung (mV)
    VpostStep = -110; % Spannung nach Sprung (mV)

    clampVoltages = [-100 -90 -80 -70 -60 -50 -40 -30 -20 -10 0 10 20 30 40]; % Protokoll für Voltageclamp (mV)

    % Initialisiserung
    n_0 = 0.32;
    m_0 = 0.053;
    h_0 = 0.6;

    % Zeit
    deltat = 0.0005; %Zeitschritt (ms)
    tend = 10; %Ende der Berechnung (ms)
    timesteps = 0:deltat:tend;

    % Preallokation der Matrix für die Raten, Gates, Ströme, und Spannung
    nVoltages = length(clampVoltages); % Anzahl an clamp voltages
    nTimesteps = length(timesteps);
    alpha_n = zeros(nVoltages, nTimesteps);
    beta_n = zeros(nVoltages, nTimesteps);
    n = zeros(nVoltages, nTimesteps);
    ndot = zeros(nVoltages, nTimesteps);
    I_K = zeros(nVoltages, nTimesteps);
    alpha_m = zeros(nVoltages, nTimesteps);
    beta_m = zeros(nVoltages, nTimesteps);
    m = zeros(nVoltages, nTimesteps);
    mdot = zeros(nVoltages, nTimesteps);
    alpha_h = zeros(nVoltages, nTimesteps);
    beta_h = zeros(nVoltages, nTimesteps);
    h = zeros(nVoltages, nTimesteps);
    hdot = zeros(nVoltages, nTimesteps);
    I_Na = zeros(nVoltages, nTimesteps);


    %mnh initialisieren
    m(1,1) = m_0
    n(1,1) = n_0
    h(1,1) = h_0

    %% Simulation
    % Berechne Raten, Gates (Euler-1-Schritt), I_K und I_Na
    for iVoltage = 1:nVoltages
    %Berechnung der Ratenkonstanten
    temp = 0.01 * ((-(clampVoltages(iVoltage) + 55)) / (exp((-(clampVoltages(iVoltage) + 55)) / (10)) - 1))
    if ((temp ~= -inf) && (temp ~= inf) && (isnan(temp)))
    alpha_n(iVoltage) = temp;
    end
    beta_n(iVoltage) = 0.125 * exp(-(((clampVoltages(iVoltage) + 65))/(80)));
    alpha_m(iVoltage) = 1
    temp = 0.1 * ((-(clampVoltages(iVoltage) + 40)) / (exp((-(clampVoltages(iVoltage) + 40)) / (10)) - 1));
    if ((temp ~= -inf) && (temp ~= inf) && (isnan(temp)))
    alpha_m(iVoltage) = temp;
    end
    beta_m(iVoltage) = 4 * exp(-1 * ((clampVoltages(iVoltage) + 65)/(18)));
    alpha_h(iVoltage) = 0.07 * exp((-(clampVoltages(iVoltage) + 65)) / (20));
    beta_h(iVoltage) = 1 / (exp((-(clampVoltages(iVoltage) + 35))/10) + 1);
    for iTimestep = 1:nTimesteps
    %Die dot-werte
    mdot(iVoltage,iTimestep) = alpha_m(iVoltage,iTimestep) * (1 - m(iVoltage,iTimestep)) - beta_m(iVoltage,iTimestep) * m(iVoltage,iTimestep);
    hdot(iVoltage,iTimestep) = alpha_h(iVoltage,iTimestep) * (1 - h(iVoltage,iTimestep)) - beta_h(iVoltage,iTimestep) * h(iVoltage,iTimestep);
    ndot(iVoltage,iTimestep) = alpha_n(iVoltage,iTimestep) * (1 - n(iVoltage,iTimestep)) - beta_n(iVoltage,iTimestep) * n(iVoltage,iTimestep);
    % Kalium
    %%Persönlicher Kommentar
    %Immer wenn ich folgende Zeilen reinmache, dann läuft der Code nichtmehr zuende. Ich hab jetzt die 2 Zeilen für den Strom auskommentiert.
    %I_K = G_Na_max * (m(iVoltage,iTimestep))^3 * h(iVoltage,iTimestep) * (iVoltage - E_Na);

    % Natrium
    %I_Na = G_K_max * (m(iVoltage,iTimestep))^4 * (iVoltage - E_K);
    if(iTimestep < nTimesteps)
    m(iVoltage,iTimestep+1) = m(iVoltage,iTimestep) + deltat * mdot(iVoltage,iTimestep);
    h(iVoltage,iTimestep+1) = h(iVoltage,iTimestep) + deltat * hdot(iVoltage,iTimestep);
    n(iVoltage,iTimestep+1) = n(iVoltage,iTimestep) + deltat * ndot(iVoltage,iTimestep);
    end

    end
    end

    %% Plotten
    % Plotten der Raten und Gates für eine Spannung (Index 14) und Plotten der Ströme für alle Spannungen

    % Kalium
    subplot(3,1,1)
    title('14. Voltagestep')
    plot(timesteps,alpha_n(14,:))
    hold on
    plot(timesteps,beta_n(14,:),'r')
    legend('alpha_n','beta_n')
    xlabel('Time (ms)')
    ylabel('Rate constant (1/ms)')

    subplot(3,1,2)
    title('14. Voltagestep')
    plot(timesteps, n(14,:))
    xlabel('Time (ms)')
    ylabel('Gating variable n')

    subplot(3,1,3)
    plot(timesteps,I_K)
    xlabel('Time (ms)')
    ylabel('I_{K} current density (\muA)')

    % Natrium
    figure()
    subplot(3,1,1)
    plot(timesteps,alpha_m(14,:))
    hold on, plot(timesteps,beta_m(14,:),'r')
    plot(timesteps,alpha_h(14,:))
    plot(timesteps,beta_h(14,:))
    legend('alpha_m','beta_m', 'alpha_h', 'beta_h')
    xlabel('Time (ms)'),
    ylabel('Rate constant (1/ms)')

    subplot(3,1,2)
    plot(timesteps, m(14,:))
    hold on
    plot(timesteps, h(14,:))
    legend('m','h')
    xlabel('Time (ms)')
    ylabel('Gating variables m, h')

    subplot(3,1,3)
    plot(timesteps,I_Na)
    xlabel('Time (ms)')
    ylabel('I_{Na} current density (\muA)')