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

مرور مفاهیم پایه

بسیاری از پدیده‌های فیزیکی، از نوسانِ یک وزنه روی فنر تا تغییرِ پتانسیلِ غشای یک نورون، با معادلات دیفرانسیل توصیف می‌شوند. این معادلات، آهنگِ تغییرِ کمیت‌های موردِ علاقهٔ ما را، مثلاً نسبت به زمان یا مکان، بیان می‌کنند. پیش از آنکه روش‌های عددیِ حلِ این معادلات را بیاموزیم، در این فصل دو مفهومِ پایه را مرور می‌کنیم: نخست اینکه معادلات دیفرانسیل چه انواعی دارند، و دوم اینکه «حلِ تحلیلی» و «حلِ عددی» چه تفاوتی با هم دارند و چرا اغلب ناچار به حلِ عددی می‌شویم.

رده‌بندی معادلات دیفرانسیل

نخستین گام در کار با هر معادلهٔ دیفرانسیل، شناختنِ نوعِ آن است. سه معیارِ اصلی برای رده‌بندی وجود دارد: تعدادِ متغیرهای مستقل، مرتبه، و خطی یا غیرخطی بودن.

معادلات معمولی در برابر معادلات با مشتقات جزئی

اگر یک معادلهٔ دیفرانسیل تنها نسبت به یک متغیر مستقل (مثلاً فقط زمان، یا فقط مکان) مشتق داشته باشد، آن را معادلهٔ دیفرانسیل معمولی (Ordinary Differential Equation، به‌اختصار ODE) می‌نامند. برای نمونه، معادلهٔ زیر آهنگِ تغییرِ کمیتِ \(x\) را نسبت به زمانِ \(t\) توصیف می‌کند:

\[ \frac{dx(t)}{dt} = \cos t. \]

معادلهٔ حرکتِ یک وزنه روی فنر نیز یک ODE است، چون تنها نسبت به زمان مشتق دارد:

\[ m\frac{d^2 x}{dt^2} = -k x. \]

اما اگر معادله نسبت به چند متغیر مستقل (مثلاً هم زمان و هم مکان) مشتق داشته باشد، آن را معادلهٔ دیفرانسیل با مشتقات جزئی (Partial Differential Equation، به‌اختصار PDE) می‌نامند. برای نمونه، معادلهٔ زیر انتشارِ یک کمیت مانندِ غلظتِ \(c\) را هم در زمان و هم در امتدادِ مکانِ \(x\) توصیف می‌کند:

\[ \frac{\partial c(x,t)}{\partial t} + u\,\frac{\partial c(x,t)}{\partial x} = 0. \]

در علوم اعصاب نیز هر دو نوع را می‌بینیم: مدل‌های تک‌نورونی مانندِ هاجکین–هاکسلی، که تنها تغییرِ ولتاژ در زمان را دنبال می‌کنند، ODE هستند؛ اما معادلهٔ کابلی، که انتشارِ ولتاژ را هم در زمان و هم در طولِ دندریت توصیف می‌کند، یک PDE است. در این بخش از کتاب نخست بر ODEها تمرکز می‌کنیم و PDEها را در فصلی جداگانه بررسی خواهیم کرد.

مرتبه و خطی‌بودن

دو معیارِ دیگر، رده‌بندی را دقیق‌تر می‌کنند:

مرتبه برابر است با بالاترین مرتبهٔ مشتق در معادله. برای مثال، معادلهٔ نوسانگرِ هماهنگ که مشتق دومِ مکان در آن ظاهر می‌شود، یک معادلهٔ مرتبهٔ دوم است.

خطی یا غیرخطی بودن: یک معادله خطی است اگر متغیرِ وابسته و مشتق‌هایش تنها به‌صورتِ خطی (با توانِ یک و بدونِ ضرب در یکدیگر یا توابعِ غیرخطی مانندِ سینوس و نمایی) در آن ظاهر شوند. در غیر این صورت، معادله غیرخطی است. چند مثال این تمایز را روشن می‌کند. نخست یک معادلهٔ خطیِ مرتبهٔ سوم:

\[ \frac{d^3y}{dx^3} - x\frac{d^2y}{dx^2} + y = 0. \]

سپس یک معادلهٔ غیرخطیِ مرتبهٔ اول (به‌سببِ جملهٔ \(y^2\)):

\[ \frac{dy}{dx} = y^2 + x. \]

و یک معادلهٔ غیرخطیِ مرتبهٔ دوم (به‌سببِ جملهٔ \(\sin(y)\) و توانِ دومِ مشتق):

\[ \frac{d^2y}{dx^2} + y\left(\frac{dy}{dx}\right)^2 = \sin(y). \]

این تمایزها صرفاً برای دسته‌بندی نیستند؛ چنان‌که خواهیم دید، خطی یا غیرخطی بودنِ یک معادله تعیین می‌کند که آیا می‌توان آن را تحلیلی حل کرد یا ناچار به روش‌های عددی هستیم.

حل تحلیلی در برابر حل عددی

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

پس چرا همیشه از حلِ تحلیلی استفاده نکنیم؟ زیرا برای بسیاری از معادلاتِ پیچیده، به‌ویژه آن‌ها که جمله‌های غیرخطی یا هندسه‌های پیچیده دارند، یافتنِ حلِ تحلیلی دشوار یا ناممکن است. در چنین مواردی، حلِ عددی تنها راهِ پیشِ روست. برای روشن‌شدنِ تفاوتِ این دو، یک مسئلهٔ ساده را در نظر می‌گیریم.

مسئله

مقدارِ \(x\) را در بازهٔ \([0,1]\) بیابید که در آن \(f(x) = 0\)، برای تابعِ \(f(x) = 3x - 2\).

حل تحلیلی

برای این تابعِ ساده، پاسخ را مستقیماً و دقیق می‌توان نوشت:

\[ f(x) = 0 \;\Leftrightarrow\; 3x - 2 = 0 \;\Leftrightarrow\; x = \frac{2}{3} = 0.6666\ldots \]

هیچ محاسبهٔ تکراری‌ای لازم نیست؛ تنها یک گام، یعنی حلِ جبریِ معادله، کافی است.

حل عددی

اکنون همان مسئله را بدونِ حلِ جبری و تنها با ارزیابیِ تابع حل می‌کنیم. ایده ساده است: بازهٔ \([0,1]\) را با گام‌های کوچکِ \(\Delta x\) می‌پیماییم و در هر گام، علامتِ تابع را بررسی می‌کنیم. هر جا علامتِ تابع در دو نقطهٔ متوالی تغییر کند، یعنی از نقطه‌ای که \(f(x)=0\) است عبور کرده‌ایم:

def f(x):
    return 3 * x - 2

# step through the interval [0, 1]
dx = 0.001
for i in range(1000):
    x = dx * i
    # check if the sign changed between x and x + dx
    if f(x) * f(x + dx) < 0:
        print(f"steps needed: {i}")
        break

print(f"answer: x = {x + dx}")

این روش پاسخی نزدیک به \(0.667\) می‌دهد. دو نکتهٔ مهم در اینجا دیده می‌شود: نخست آنکه پاسخ تقریبی است و دقتِ آن به اندازهٔ گامِ \(\Delta x\) بستگی دارد (هرچه گام کوچک‌تر، پاسخ دقیق‌تر اما محاسبات بیشتر)؛ دوم آنکه شمارِ محاسبات به شیوهٔ انتخابی بسیار وابسته است، و این روشِ پیمایشِ ساده، چندان کارآمد نیست.

یک روش عددیِ کارآمدتر: روش نیوتن

روشِ پیمایشِ بالا کند است. روشِ نیوتن بسیار سریع‌تر به پاسخ می‌رسد. ایدهٔ آن این است که از یک حدسِ اولیه آغاز کنیم و در هر گام، با کمکِ شیبِ تابع (مشتقِ آن) حدس را بهبود دهیم:

\[ x_{n+1} = x_n - \frac{f(x_n)}{f'(x_n)}. \]

این روش معمولاً تنها در چند گام به پاسخی بسیار دقیق می‌رسد. اما توجه کنید که به مشتقِ تابع نیاز دارد، و در عمل اغلب همین مشتق را نیز به‌صورتِ عددی و با در نظر گرفتنِ یک بازهٔ کوچکِ \(dx\) پیرامونِ نقطه تقریب می‌زنیم. اینکه این تقریبِ مشتق از کجا می‌آید و چقدر دقیق است، موضوعِ فصل‌های بعدی این بخش است.

جمع‌بندی

پیش از حلِ هر معادلهٔ دیفرانسیل، باید نوعِ آن را بشناسیم: معمولی (ODE) یا با مشتقات جزئی (PDE)، مرتبهٔ آن، و خطی یا غیرخطی بودنِ آن. این ویژگی‌ها تعیین می‌کنند که آیا حلِ تحلیلیِ دقیق در دسترس است یا باید به حلِ عددیِ تقریبی روی آوریم. در عمل، بیشترِ معادلاتِ جالبِ علوم اعصاب، از مدلِ هاجکین–هاکسلی تا مدل‌های شبکه، غیرخطی‌اند و حلِ تحلیلی ندارند؛ از همین‌رو، روش‌های عددی که در فصل‌های بعد می‌آموزیم، ابزارِ اصلیِ ما برای کار با این مدل‌ها خواهند بود.