تصویر شاخص نوشته: تابع چیست؟ ماشینی که ورودی می‌گیرد و خروجی می‌دهد

تابع چیست؟ ماشینی که ورودی می‌گیرد و خروجی می‌دهد

۱۱ شهریور ۱۴۰۵ مبانی ریاضی

دستگاه آب‌میوه‌گیری را تصور کن. پرتقال می‌ریزی، آب‌پرتقال می‌گیرد. سیب بریزی، آب‌سیب. این دستگاه دو قانون نانوشته دارد: اول، برای هر ورودی یک خروجی می‌دهد؛ دوم، با یک ورودیِ یکسان همیشه همان خروجیِ قبلی را می‌دهد — پرتقالِ امروز و فردا هر دو آب‌پرتقال می‌شوند، نه یک روز آب‌پرتقال و یک روز آب‌هویج.

در ریاضی به هر چیزی که این دو قانون را رعایت کند می‌گویند تابع.

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

شکل ریاضی‌اش

تابعی که «هر عدد را دو برابر کن و یکی اضافه کن» را این‌طور می‌نویسند:

f(x) = 2x + 1

خواندنش: «اِفِ x» — f اسمِ ماشین است و x جای ورودی. عدد که بدهی، خروجی می‌سازد:

f(3) = 2×3 + 1 = 7 و f(10) = 21 و f(0) = 1

آن نمادِ f(x) که اول عجیب به نظر می‌رسد، فقط یک جور آدرس‌دهی است: «خروجیِ ماشینِ f وقتی ورودی‌اش x است.» نه ضرب است، نه راز — یک نامگذاری.

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

چرا این قانونِ «فقط یک خروجی» این‌قدر مهم است؟

چون قابل‌اتکا بودن یعنی همین. وقتی می‌دانی f(3) همیشه ۷ است، می‌توانی روی آن بنا بسازی: نتیجه را در محاسبهٔ بعدی به کار ببری، نمودارش را بکشی، درباره‌اش استدلال کنی. ماشینی که با یک ورودی هر بار جوابی می‌دهد، ماشین نیست؛ شیر یا خط است.

روی نمودار هم همین قانون یک آزمونِ تصویری دارد: هر خطِ عمودی، نمودارِ یک تابع را حداکثر در یک نقطه قطع می‌کند. چون اگر دو نقطه را قطع کند، یعنی یک ورودی دو خروجی دارد.

تابع در برنامه‌نویسی — همان ایده، همان اسم

اگر برنامه‌نویسی را شروع کرده باشی، این کلمه را دیده‌ای:

def double_plus_one(x): return 2 * x + 1

این پایتون است و این دقیقاً همان f(x) = 2x + 1 است — با این تفاوت که اسمش را کامل نوشته‌ایم. ورودی می‌گیرد، خروجی برمی‌گرداند. تابع‌های برنامه‌نویسی می‌توانند از ریاضی سرکش‌تر باشند (مثلاً چیزی چاپ کنند یا حالتی را عوض کنند)، ولی هستهٔ ایده یکی است: تکه‌ای از کار که ورودی-خروجیِ مشخص دارد و می‌شود بارها صدایش زد.

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

نمودار: عکسِ تمام‌قدِ ماشین

هر تابعِ عددی را می‌شود عکاسی کرد: ورودی‌ها روی محور افقی، خروجی‌ها روی محور عمودی. f(x) = 2x + 1 می‌شود یک خط راست؛ توابع دیگر منحنی‌های خودشان را دارند.

نمودار به دو سؤالِ مهم جوابِ تصویری می‌دهد که با فرمولِ خالی سخت‌ترند:

  • کجا تندتر تغییر می‌کند؟ — این همان شیب است.
  • کجا بالاترین یا پایین‌ترین مقدار را دارد؟ — این همان بیشینه و کمینه است.

این دو سؤال، ستون‌های نیمی از ریاضیاتِ کاربردی‌اند — و هر دو فقط وقتی معنا دارند که اول «تابع» را داشته باشی.

جمع‌بندی

تابع ترسناک‌ترین کلمهٔ کتاب ریاضی است که نباید باشد. سه جمله کافی است:

۱. تابع ماشینِ ورودی-خروجی است؛ برای هر ورودی، دقیقاً یک خروجی. ۲. f(x) یعنی «خروجیِ f برای ورودیِ x» — نامگذاری است، نه عملیات. ۳. همین ایده، بدون تغییرِ ماهیت، در برنامه‌نویسی هم زندگی می‌کند.

دورهٔ ریاضی ریشه از همین‌جا شروع می‌کند و با ابزارهای تعاملی — که خودت ورودی می‌دهی و رفتار ماشین را می‌بینی — تا نمودار، شیب و دنیای بهینه‌سازی جلو می‌رود.