مقدمه‌ای بر جبر خطی

چیزهایی که می‌توان آن‌ها را جمع کرد، کم کرد، و کش داد

کار را با چند مثال انگیزه‌بخش شروع می‌کنیم. هیچ‌کدام از این مثال‌ها فوراً لازم یا ضروری نیستند. اگر دربارهٔ معادلات دیفرانسیل یا دنبالهٔ فیبوناچی چیزی نمی‌دانید، نگران نباشید؛ امیدواریم دست‌کم بعضی از مثال‌ها برایتان قابل‌درک باشند.

در زندگی، چیزهایی هستند که می‌شود آن‌ها را با هم جمع کرد، از هم کم کرد، و در عددی ضرب کرد (یعنی مقیاس‌شان را تغییر داد). این فقط یک واقعیت است.

بیایید چند نمونه را ببینیم.


نیروها

اجسام فیزیکی معمولاً تحتِ تأثیر چند نیروی متفاوت هستند که هر کدام آن‌ها را به سویی می‌کشند.
یک هواپیما هم‌زمان:

اثر ترکیبیِ همهٔ این نیروها، حرکت هواپیما را تعیین می‌کند.
ما این اثر کلی را جمعِ نیروها می‌نامیم.

پس نیروها قابلِ جمع شدن‌اند، و روشن است که هم اندازه‌ی آن‌ها مهم است و هم جهت‌شان.
فعلاً مهم نیست دقیقاً نیروها را چطور جمع می‌کنیم؛
کافی است بپذیریم که می‌توان آن‌ها را جمع کرد.

اگر دو نیرو داشته باشید، می‌توانید آن‌ها را با هم جمع کنید و به یک نیروی معادل برسید.
اگر یک نیرو داشته باشید، می‌توانید آن را دو برابر، سه برابر، یا ده برابر کنید؛
یا حتی جهتش را برعکس کنید — که چیزی شبیه ضرب کردن در عددِ $-1$ است.


دنباله‌های فیبوناچی

اعداد فیبوناچی شاید مهم نیستند اما سرگرم‌کننده‌اند و تقریباً همه آن‌ها را می‌شناسند.

دنبالهٔ کلاسیک فیبوناچی چنین است:

\[F:\; 0,\; 1,\; 1,\; 2,\; 3,\; 5,\; 8,\; 13,\; 21,\; 34,\; 55,\; \dots\]

قاعده بسیار ساده است:
هر عدد برابر است با جمعِ دو عددِ قبلی.
مثلاً:

\[55 = 21 + 34.\]

در ابتدای دنباله، دو عدد وجود دارند که دو پیشینی ندارند؛ آن‌ها را به‌دلخواه $0$ و $1$ می‌گیریم.

اما چی می‌شود اگر از $0$ و $1$ شروع نکنیم؟
واضح است که می‌توانیم از هر دو عددی شروع کنیم و باز دنباله‌ای بسازیم که در آن هر جمله، جمعِ دو جملهٔ قبل از خودش باشد. مثلاً این دنباله، که به آن دنبالهٔ لوکاس می‌گویند:

\[L:\; 2,\; 1,\; 3,\; 4,\; 7,\; 11,\; 18,\; 29,\; 47,\; 76,\; \dots\]

این دیگر دنبالهٔ فیبوناچی نیست، اما «فیبوناچی‌گونه» است.

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

  1. اگر دو دنبالهٔ F را جمله‌به‌جمله با هم جمع کنیم، حاصل باز هم یک دنبالهٔ F است.
  2. اگر تمام جمله‌های یک دنبالهٔ F را در یک عدد ثابت ضرب کنیم
    (مثلاً $2$، یا $\frac{3}{2}$، یا $\pi$، یا حتی $1+i$)،
    باز هم یک دنبالهٔ F به‌دست می‌آید.

برای مثال، اگر دنباله‌های $F$ و $L$ را جمع کنیم، به دنبالهٔ

\[F+L:\; 2,\; 2,\; 4,\; 6,\; 10,\; 16,\; 26,\; 42,\; 68,\; 110\]

می‌رسیم
(عدد $110$ برابر است با $34$، جملهٔ دهم فیبوناچی، به‌علاوهٔ $76$، جملهٔ دهم لوکاس).

همان‌طور که می‌بینید، این دنباله هم یک دنبالهٔ F است.

به همین ترتیب، اگر همهٔ اعداد فیبوناچی را در $10$ ضرب کنیم، به دنبالهٔ

\[0,\; 10,\; 10,\; 20,\; 30,\; 50,\; 80,\; \dots\]

می‌رسیم که آن هم کاملاً واضح است یک دنبالهٔ F است.

پس دنباله‌های F، درست مثل نیروها،
قابلِ جمع شدن و قابلِ مقیاس‌دادن (ضرب در یک عدد) هستند.


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

اتم‌ها، مولکول‌ها، و تقریباً همه‌چیز در جهان تکان می‌خورند. این تکان‌خوردن به این دلیل است که سامانه‌ها در تعادل‌اند، اما دائماً چیزی آن‌ها را از تعادل خارج می‌کند، و سپس بازمی‌گردند، رد می‌شوند، و دوباره بازمی‌گردند. این رفتار بنیادی با مدلی به نام نوسان‌گر هماهنگ توصیف می‌شود.

در ساده‌ترین حالت یک‌بعدی نوسان‌گر، نیروی وارد بر جسم متناسب با فاصله‌اش از مرکز است:

\[F = -k x\]

($x$ موقعیت جسم و $F$ نیروی وارد به آن است و همچنین $k$ یک عدد ثابت است).

با قانون دوم نیوتن $F = ma$ داریم:

\[m a = -k x \\\\ \implies \ddot{x} = -\frac{k}{m} x\]

که می‌توان آن را به‌شکل

\[\ddot{x} = -\omega x\]

نوشت. لازم نیست معادلات دیفرانسیل بلد باشید. کافی است بدانید که:

به همین دلیل، حل‌های این معادله دو خاصیت دارند:

  1. جمعِ هر دو حل، باز هم یک حل است.
  2. ضربِ هر حل در یک عدد ثابت، حلِ دیگری می‌سازد.

این الگو حالا دیگر آشناست.

چنین معادلاتی را خطی می‌نامند.
معادلهٔ شرودینگر در مکانیک کوانتومی یکی از مهم‌ترین نمونه‌های آن است.


ارتباطات دیجیتال

DVDها، پروتکل‌های Wi-Fi، حافظه‌های کامپیوتری، و حتی فضاپیماها، همگی با داده‌های دیجیتال سر و کار دارند:
داده‌هایی که ذخیره می‌شوند، منتقل می‌شوند، و دوباره خوانده می‌شوند.

اما یک مشکل اساسی همیشه وجود دارد: خطا.
نویز، اختلال، تابش‌های کیهانی، خرابی سخت‌افزار، یا حتی یک تماس بدِ شبکه، می‌توانند باعث شوند بخشی از داده‌ها به‌درستی منتقل نشوند.

رایج‌ترین و مؤثرترین راهِ مواجهه با این مشکل، افزودن اطلاعات افزونه (redundant) به داده‌هاست؛
به‌گونه‌ای که اگر خطایی رخ داد، بتوان آن را تشخیص داد یا حتی اصلاح کرد.

به‌بیان ساده:
ما داده‌ها را کمی «بلندتر» از آن‌چه لازم است می‌فرستیم،
تا اگر چیزی در مسیر خراب شد، هنوز بتوان پیام اصلی را بازسازی کرد.

روش‌های بسیار متنوعی برای افزودن این افزونگی وجود دارد —
آن‌قدر متنوع که دنیایی کامل از ایده‌ها و تکنیک‌ها را می‌سازند.

با این حال، تقریباً همهٔ این روش‌ها در هستهٔ خود یک کار مشترک انجام می‌دهند:

این مجموعهٔ کدواژه‌هاست که روش کدگذاری را به‌طور کامل تعیین می‌کند.

یک پدیدهٔ بسیار عمیق این است که اگر از این کدواژه‌ها بخواهیم دو خاصیت ساده داشته باشند، نتیجه هم از نظر نظری و هم از نظر عملی بسیار قدرتمند می‌شود:

  1. جمعِ دو کدواژه، خودش یک کدواژه باشد.
  2. ضرب یک کدواژه در یک نماد ثابت، باز هم یک کدواژه باشد.

شباهت این خواص با مثال‌های قبلی (نیروها، دنباله‌ها، حل‌های معادلات دیفرانسیل) کاملاً آشکار است.
اما برای دقیق شدن، باید روشن کنیم که «جمع» و «ضرب» این‌جا دقیقاً چه معنایی دارند.

در ساده‌ترین حالت، یعنی رشته‌های بیتی، تفسیر این مفاهیم بسیار روشن است:

کدهایی که این دو خاصیت را دارند، کدهای خطی نامیده می‌شوند.

این کدها تقریباً همه‌جا حضور دارند.
برای مثال، کد رید–سالومون (Reed-Solomon) — که در فناوری‌هایی از CD و DVD گرفته تا ارتباطات ماهواره‌ای استفاده می‌شود — دقیقاً از همین نوع است.

و این دقیقاً همان الگویی است که پیش‌تر دیده بودیم.


ایدهٔ مرکزی

چیزهای بسیار متفاوتی وجود دارند که می‌توان آن‌ها را جمع کرد و در چیزی ضرب کرد:

جبر خطی همهٔ این‌ها را در یک چارچوب واحد مطالعه می‌کند.

به این چیزها بردار می‌گوییم،
و مجموعهٔ آن‌ها یک فضای برداری است.

در جبر خطی،
مهم نیست بردار چیست؛
فقط مهم است که:

پیش از تعریف دقیق فضای برداری،
باید دربارهٔ عددها صحبت کنیم.

به همین دلیل، نخستین تعریف ما تعریف میدان است.

در یادداشت بعدی، کار را با میدان‌ها آغاز می‌کنیم.


منبع

این یادداشت برگرفته و ترجمه‌ای آزاد از نوشته‌های بلاگ
Abstract Linear Algebra

نوشتهٔ Alon Amit است.