پرش به محتویات

کابل و مدل‌های تقسیمی

تا اینجا نورون را یک نقطه فرض کردیم: یک ولتاژِ واحد \(V_m(t)\) برای کلِ سلول. اما نورون‌های واقعی گستردهاند — دندریت‌های بلند ورودی می‌گیرند و آکسونی که گاه تا یک متر است خروجی را حمل می‌کند. پس پرسشِ تازه‌ای پیش می‌آید: وقتی جریانی در یک نقطه از یک زائدهٔ دراز تزریق می‌شود، ولتاژ در فضا چگونه پخش می‌شود؟ پاسخ در نظریهٔ کابل است، و ابزارِ محاسباتیِ آن، مدل‌های تقسیمی.

در پایانِ این فصل خواهید توانست
  • معادلهٔ کابل را به‌عنوانِ تعمیمِ فضاییِ مدلِ RC بشناسید.
  • ثابتِ طولِ \(\lambda\) را تعریف کنید و بگویید سیگنالِ زیرآستانه تا چه فاصله‌ای پخش می‌شود.
  • یک زائدهٔ عصبی را به زنجیره‌ای از اجزای تقسیمیِ جفت‌شده بشکنید و آن را شبیه‌سازی کنید.
  • ببینید چگونه شبیه‌سازیِ تقسیمی، جوابِ تحلیلیِ معادلهٔ کابل را بازتولید می‌کند.

معادلهٔ کابل

یک زائدهٔ نازکِ عصبی را مانندِ یک کابلِ الکتریکی در نظر بگیرید: غشا در هر نقطه همان مدارِ RC فصلِ پیش است، اما اکنون نقاطِ مجاور با مقاومتِ محوریِ درونِ سیتوپلاسم به هم وصل‌اند. موازنهٔ جریان در هر نقطه، یک جملهٔ تازه — نشتِ محوری به همسایه‌ها — می‌گیرد، و به یک معادلهٔ دیفرانسیلِ با مشتقاتِ جزئی می‌رسیم:

\[ \tau\,\frac{\partial V}{\partial t} = \lambda^2\,\frac{\partial^2 V}{\partial x^2} - (V - E_L), \]

که در آن \(\tau = R_m C_m\) همان ثابتِ زمانیِ فصلِ پیش است و \(\lambda\) یک ثابتِ طول با بُعدِ مکان است. جملهٔ \(\partial^2 V/\partial x^2\) همان پخش (diffusion) است — دقیقاً همان ساختارِ معادلهٔ گرما: ولتاژ در امتدادِ کابل «نشت» می‌کند و پخش می‌شود.

راهِ شهودیِ دیدنِ این معادله، تصویرِ نردبانِ مدارهاست: کابل را زنجیره‌ای از تکه‌غشاهای RC بگیرید که با مقاومتِ محوری به هم بسته‌اند.

Image title

کابلِ غیرفعال به‌مثابهٔ یک نردبانِ مدارهای RC. هر «پله» یک تکه‌غشاست: خازنِ \(c_m\) به‌موازاتِ مقاومتِ نشتیِ \(r_m\)؛ و پله‌های مجاور با مقاومتِ محوریِ \(r_a\) (سیتوپلاسم) به هم وصل‌اند. جریانِ تزریقیِ \(I\) از یک سر وارد می‌شود و در امتدادِ \(x\) نشت و پخش می‌کند. همین نردبان، دقیقاً همان چیزی است که در بخشِ «مدل‌های تقسیمی» گسسته و شبیه‌سازی می‌کنیم.

ثابتِ طولِ λ

ساده‌ترین و مهم‌ترین حالت، حالتِ پایا است (\(\partial V/\partial t = 0\)). آن‌گاه معادلهٔ کابل به یک معادلهٔ ساده فرومی‌کاهد:

\[ \lambda^2\,\frac{d^2 V}{d x^2} = V - E_L, \]

که جوابش برای جریانی که در \(x=0\) تزریق می‌شود، یک افتِ نمایی در فضاست:

\[ V(x) - E_L = \big(V(0)-E_L\big)\,e^{-x/\lambda}. \]

پس \(\lambda\) فاصله‌ای است که در آن دامنهٔ سیگنال به \(1/e\approx 37\%\) می‌افتد. هرچه غشا نشت‌ناپذیرتر (\(R_m\) بزرگ‌تر) و مقاومتِ محوری کمتر باشد، \(\lambda\) بزرگ‌تر است و سیگنال دورتر می‌رسد: \(\lambda = \sqrt{R_m/R_a}\). مقادیرِ نوعیِ \(\lambda\) در دندریت‌ها چند دهم تا چند میلی‌متر است.

Image title

افتِ نماییِ ولتاژِ پایا در امتدادِ کابل برای سه مقدارِ \(\lambda\). نقطه‌ها جایی‌اند که ولتاژ به \(1/e\) (۳۷٪) می‌رسد، یعنی \(x=\lambda\). \(\lambda\)ی بزرگ‌تر یعنی سیگنال دورتر پخش می‌شود.

پیامدِ زیستیِ این افت، ژرف است: یک سیناپس بر یک دندریتِ دور، اثری بسیار کوچک‌تر بر سومای نورون دارد تا سیناپسی نزدیک. مکانِ ورودی روی دندریت اهمیت دارد — نکته‌ای که مدل‌های نقطه‌ایِ ساده آن را نادیده می‌گیرند.

مدل‌های تقسیمی

معادلهٔ کابل را جز در ساده‌ترین حالت‌ها نمی‌توان به‌صورتِ بسته حل کرد. راهِ محاسباتی، مدلِ تقسیمی (compartmental model) است: کابل را به \(N\) قطعهٔ کوتاه می‌شکنیم، هر قطعه را یک مدارِ RC می‌گیریم، و قطعاتِ مجاور را با یک رساناییِ محوریِ \(g_a\) به هم وصل می‌کنیم. برای قطعهٔ \(i\):

\[ C\,\frac{dV_i}{dt} = -g_L(V_i - E_L) + g_a(V_{i-1}-V_i) + g_a(V_{i+1}-V_i) + I_i. \]

این چیزی جز \(N\) نسخهٔ جفت‌شده از همان معادلهٔ RC نیست، و با اویلرِ پیشرو مستقیماً حل می‌شود. (همین ایده، هستهٔ نرم‌افزارهای دقیقِ شبیه‌سازیِ نورون مانندِ NEURON است، که مورفولوژیِ کاملِ یک نورون را به هزاران جزء می‌شکنند.)

import numpy as np

N   = 40          # number of compartments
gL  = 1.0         # leak conductance   (per compartment)
ga  = 25.0        # axial coupling conductance
C   = 10.0
lam = np.sqrt(ga / gL)          # length constant, in compartments (= 5)

def simulate_cable(I_amp=50.0, T=200.0, dt=0.02):
    """Passive cable of N coupled RC compartments; current injected at compartment 0."""
    t = np.arange(0, T, dt)
    V = np.zeros((len(t), N))                 # deflection from rest
    for n in range(len(t) - 1):
        v = V[n]
        axial = np.zeros(N)                   # axial current into each compartment
        axial[:-1] += ga * (v[1:] - v[:-1])
        axial[1:]  += ga * (v[:-1] - v[1:])   # sealed ends
        I = np.zeros(N); I[0] = I_amp
        V[n + 1] = v + (-gL * v + axial + I) / C * dt
    return t, V

t, V = simulate_cable()
V_steady = V[-1]                              # matches  V0 * exp(-x / lam)

شکلِ زیر نتیجه را نشان می‌دهد. سمتِ چپ، پخشِ سیگنال را در زمان دنبال می‌کند: جریان در قطعهٔ صفر تزریق می‌شود و ولتاژ به‌تدریج در امتدادِ کابل پیش می‌رود تا به حالتِ پایا برسد. سمتِ راست تأیید می‌کند که حالتِ پایای شبیه‌سازی دقیقاً همان افتِ نماییِ \(e^{-x/\lambda}\)ی نظریهٔ کابل است.

Image title

شبیه‌سازیِ کابلِ تقسیمی. چپ: ولتاژ در امتدادِ کابل در چند زمانِ متوالی؛ سیگنال از قطعهٔ ورودی پخش می‌شود و می‌نشیند. راست: حالتِ پایای شبیه‌سازی (نقطه‌ها) دقیقاً روی منحنیِ تحلیلیِ \(V_0 e^{-x/\lambda}\) با \(\lambda=5\) قطعه می‌افتد — یعنی مدلِ تقسیمی، معادلهٔ کابل را بازتولید می‌کند.

صافیِ دندریتی: مکانِ سیناپس مهم است

تا اینجا کابل را با یک جریانِ پایا راندیم. اما ورودی‌های واقعیِ نورون گذرااند — هر EPSP یک تلنگرِ کوتاه است. مدلِ تقسیمی به ما اجازه می‌دهد پرسشی زیستی را کمّی کنیم: اگر یک سیناپسِ تحریکی روی یک دندریتِ دور فعال شود، اثرش وقتی به سوما (جسمِ سلولی، جایی که پتانسیلِ عمل زاده می‌شود) می‌رسد چقدر باقی می‌ماند؟

Image title

انتشارِ یک EPSPِ گذرا از یک دندریتِ دور به سوما. چپ: در محلِ ورودی (بنفش) EPSP بزرگ و تیز است، اما تا به سوما (آبی) برسد بسیار کوچک‌تر، کندتر و با تأخیر شده است. راست: دامنهٔ قلهٔ EPSP بر حسبِ محلِ ثبت؛ سیگنال با دورشدن از محلِ ورودی به‌سرعت افت می‌کند.

نتیجه، پدیده‌ای به نامِ صافیِ دندریتی است: یک سیناپسِ دور اثری بسیار کوچک‌تر بر شلیکِ نورون دارد تا سیناپسی نزدیکِ سوما. این یک اصلِ محاسباتیِ ژرف است — نورون می‌تواند ورودی‌ها را بر پایهٔ مکانشان روی درختِ دندریتی وزن‌دهی کند، و دندریت به‌جای یک سیمِ منفعل، خود یک واحدِ پردازشگر است. (این همان چیزی است که تمرینِ «مکانِ ورودی مهم است» به‌صورتِ عددی نشان می‌دهد.)


تمرین‌ها

با تابعِ simulate_cable همین فصل کار کنید. نخست خودتان امتحان کنید، سپس پاسخ را باز کنید.

تمرینِ ۱

وابستگیِ \(\lambda\). شبیه‌سازی را برای چند مقدارِ \(g_a\) اجرا کنید و نشان دهید که \(\lambda\)ی برازش‌شده مانندِ \(\sqrt{g_a/g_L}\) رشد می‌کند.

پاسخ
import numpy as np
for ga_test in [4.0, 16.0, 25.0, 64.0]:
    global ga; ga = ga_test                      # or pass ga as an argument
    t, V = simulate_cable()
    Vss = V[-1] / V[-1][0]                        # normalized steady profile
    x = np.arange(N)
    lam_fit = -1 / np.polyfit(x[:15], np.log(Vss[:15]), 1)[0]   # slope of ln V
    print(f"ga={ga_test:5}  lambda_fit={lam_fit:4.1f}  sqrt(ga/gL)={np.sqrt(ga_test/gL):4.1f}")

\(\lambda\)ی برازش‌شده (از شیبِ \(\ln V\) بر حسبِ فاصله) دقیقاً مانندِ \(\sqrt{g_a/g_L}\) رشد می‌کند: چهاربرابرکردنِ \(g_a\) طولِ ثابت را دوبرابر می‌کند. یعنی هرچه اتصالِ محوری قوی‌تر (سیتوپلاسمِ رساناتر)، سیگنال دورتر می‌رسد.

تمرینِ ۲

مکانِ ورودی مهم است. یک ورودیِ یکسان را یک‌بار در قطعهٔ ۰ (نزدیکِ سوما) و یک‌بار در قطعهٔ ۳۰ (دور) تزریق کنید و ولتاژِ پایای قطعهٔ ۰ را در دو حالت مقایسه کنید. کدام ورودی اثرِ بیشتری بر سوما دارد؟

پاسخ
import numpy as np
def steady_soma(inj_site):
    t = np.arange(0, 200, 0.02); V = np.zeros(N)
    for _ in range(len(t)):
        v = V.copy(); axial = np.zeros(N)
        axial[:-1] += ga*(v[1:]-v[:-1]); axial[1:] += ga*(v[:-1]-v[1:])
        I = np.zeros(N); I[inj_site] = 50.0
        V = v + (-gL*v + axial + I)/C*0.02
    return V[0]                                   # soma voltage
print("input at soma (0):", round(steady_soma(0), 2))
print("input at distal (30):", round(steady_soma(30), 2))

ورودیِ نزدیکِ سوما اثری بسیار بزرگ‌تر بر سوما دارد؛ ورودیِ دور به‌خاطرِ افتِ نماییِ \(e^{-x/\lambda}\) تا رسیدن به سوما بسیار کوچک شده است. این همان صافیِ دندریتیِ متنِ فصل است: مکانِ سیناپس روی درختِ دندریتی، وزنِ مؤثرِ آن را تعیین می‌کند.

تمرینِ ۳

گذرا در برابر پایا. زمانی را که طول می‌کشد تا قطعهٔ دور (مثلاً قطعهٔ ۲۰) به نیمهٔ ولتاژِ پایای خود برسد اندازه بگیرید. این تأخیر با فاصله چگونه تغییر می‌کند؟

پاسخ
import numpy as np
t, V = simulate_cable(T=400.0)
for seg in [2, 5, 10, 20]:
    vfin = V[-1][seg]
    i = np.argmax(V[:, seg] >= 0.5*vfin)
    print(f"segment {seg:2}: t_half = {t[i]:.1f} ms")

زمانِ رسیدن به نیمهٔ مقدارِ پایا با فاصله به‌شدت زیاد می‌شود — تقریباً مانندِ \(x^2\)، همان امضای یک فرایندِ پخشی (diffusion). این چرا مهم است: سیگنال‌های دندریتیِ دور نه‌تنها کوچک‌تر، بلکه کندتر و با تأخیر به سوما می‌رسند؛ پس دندریت زمان‌بندیِ ورودی‌ها را هم تغییر می‌دهد.

تمرینِ ۴

(پروژه) کابلِ فعال. به هر قطعه به‌جای نشتِ خطی، یک جریانِ فعالِ وابسته به ولتاژ (مثلاً از نوعِ هاجکین–هاکسلی) بیفزایید و نشان دهید که اکنون به‌جای افتِ نمایی، یک پتانسیلِ عمل می‌تواند بدونِ افت در امتدادِ کابل منتشر شود.

راهنمای حل

ایده: در حلقهٔ زمانیِ simulate_cable، جملهٔ نشتیِ \(-g_L v\) را با جریان‌های هاجکین–هاکسلیِ هر قطعه (\(I_{\text{Na}}+I_{\text{K}}+I_{\text{leak}}\)) جایگزین کنید و برای هر قطعه متغیرهای دروازه‌ایِ \(m,h,n\) را هم پیش ببرید. با تزریقِ یک محرکِ فراآستانه در یک سرِ کابل، خواهید دید که پتانسیلِ عمل از قطعه‌ای به قطعهٔ بعد بازتولید می‌شود و دامنه‌اش کم نمی‌شود — برخلافِ کابلِ غیرفعال که سیگنال در آن نمایی افت می‌کرد. این دقیقاً تفاوتِ انتشارِ فعال (آکسون) و پخشِ غیرفعال (دندریت) است. جزئیاتِ جریان‌های هاجکین–هاکسلی در فصلِ HH آمده است.