به نام خدا
یکی از بهترین و قدرتمندترین ماژولهای پایتون برای محاسبات جبریِ ریاضی، ماژول SymPy است. کارهای مختلفی میتوان با این ماژول انجام داد. از حل روابط بازگشتی گرفته (که در اینجا توضیح دادم) تا حل معادلات جبری و محاسبۀ دامنه و برد توابع ریاضی. در این مطلب، نحوۀ محاسبه و بهدست آوردن دامنه و برد توابع با استفاده از این ماژول را در پایتون میتوانید ببینید.
برای شروع کار ابتدا این ماژول را بهشکل زیر در پایتون وارد میکنیم:
from sympy import *
from sympy.calculus.util import *
حالا برای تعریف متغیر x، x = Symbol("x") را به برنامه اضافه میکنیم:
from sympy import *
from sympy.calculus.util import *
x = Symbol("x")
سپس نوبت به تعریف تابع میرسد. برای تعریف تابع باید ابتدا نام تابع (f یا g یا h یا ...) و سپس یک علامت تساوی (=) و سپس قانون (ضابطه) تابع را به همان شکلی که است بنویسیم. فقط دقت کنید که در محیط پایتون برای توان از **، برای ریشۀ دوم از sqrt() و برای تقسیم و عبارات گویا از / استفاده کنید. اکنون فرض کنید که میخواهیم که دامنه و برد تابع $f(x) = \sqrt{ \frac{1}{x - 1} } $ را در مجموعۀ اعداد حقیقی ($\mathbb{R}$) بهدست آوریم. پس f = sqrt(1 / (x - 1)) را به برنامه اضافه میکنیم:
from sympy import *
from sympy.calculus.util import *
x = Symbol("x")
f = sqrt(1 / (x - 1))
سپس برای نمایش دامنه و برد، باید به ترتیب از دو خط زیر استفاده کنیم.
print(continuous_domain(f, x, S.Reals))
print(function_range(f, x, S.Reals))
پس این دو خط را به برنامه اضافه میکنیم و برنامه را اجرا میکنیم.
from sympy import *
from sympy.calculus.util import *
x = Symbol("x")
f = sqrt(1 / (x - 1))
print("Domain:", continuous_domain(f, x, S.Reals))
print("Range:", function_range(f, x, S.Reals))
خروجی بهشکل زیر است:
Domain: Interval.open(1, oo)
Range: Interval.open(0, oo)
کلمۀ "Interval" به معنی "فاصله" است که در اینجا منظور همان بازه در ریاضیات است. منظور از "oo" نیز بینهایت ($\infty$) است (اگر خودتان دقت کنید متوجه میشوید که دو حرف o-ی انگلیسی در کنار هم به نماد بینهایت شباهت دارند). پس Interval.open(1, oo) یعنی دامنۀ تابع بازۀ باز 1 تا بینهایت و برد تابع بازۀ باز 0 تا بینهایت است.
بهعنوان مثال دوم، دامنه و برد تابع $f(x) = \frac{1}{x}$ را نیز به همین شکل محاسبه میکنیم.
from sympy import *
from sympy.calculus.util import *
x = Symbol("x")
f = 1 / x
print("Domain:", continuous_domain(f, x, S.Reals))
print("Range:", function_range(f, x, S.Reals))
خروجی بهشکل زیر است:
Domain: Union(Interval.open(-oo, 0), Interval.open(0, oo))
Range: Union(Interval.open(-oo, 0), Interval.open(0, oo))
در اینجا "Union" به معنی همان اجتماع در ریاضیات است. پس Union(Interval.open(-oo, 0), Interval.open(0, oo)) یعنی دامنه و برد تابع برابر با اجتماع بازۀ باز منفی بینهایت تا 0 و 0 تا بینهایت است.
مثال سوم: دامنه و برد تابع $f(x) = \frac{1}{x^2 + 1}$ را بهدست آورید.
from sympy import *
from sympy.calculus.util import *
x = Symbol("x")
f = 1 / (x ** 2 + 1)
print("Domain:", continuous_domain(f, x, S.Reals))
print("Range:", function_range(f, x, S.Reals))
خروجی به شکل زیر است:
Domain: Reals
Range: Interval.Lopen(0, 1)
در اینجا "Reals" به معنی مجموعۀ اعداد حقیقی است. پس دامنۀ تابع مجموعۀ اعداد حقیقی میباشد. L حرف اول کلمۀ انگلیسی "Left" به معنی "چپ" است. پس Interval.Lopen(0, 1) در واقع به این معناست که فقط سمت چپ بازه، باز است. پس برد تابع برابر با بازۀ باز 0 تا بستۀ 1 است.