فهرست بستن

محاسبات ریاضی سمبولیک در پایتون با استفاده از کتابخانه Sympy

در کنار مجموعه کتابخانه‌های NumPy و SciPy که محاسبات علمی در پایتون را تسهیل نموده و روش‌های عددی متعددی را برای کاربران فراهم می‌آورند، کتابخانه SymPy امکان محاسبات سمبولیک را فراهم می‌آورد. این کتابخانه قابلیت محاسبات جبری، محاسبه حد، مشتق و انتگرال، حل معادلات و کار بر روی ماتریس‌ها را بصورت پارامتری برای ما به ارمغان می‌آورد. در این نوشته با ذکر چند مثال با این کتابخانه آشنا می‌شویم.

بسم الله الرحمن الرحیم

یک راست برویم سر اصل مطلب تا با چندین مثال کتابخانه SymPy و امکاناتی را که به ما می‌دهد بهتر بشناسیم.

  • استفاده بعنوان یک ماشین حساب:
import sympy as sp
a = sp.Rational(1, 2)
print(a ** 2)
print(a + a ** 5)
print(a / 3)

  • برای محاسبه مقدار عددی:
import sympy as sp
a = sp.pi
print(a ** 2)
print(a / 5)
print((a ** 2).evalf())

  • تعریف متغیرهای سمبلیک:
import sympy as sp
x = sp.Symbol("x")
y = sp.Symbol("y")
z = sp.Symbol("z")
print(x + y + z - 2 * x - 3 * y)

  • بسط عبارات جبری و جاگذاری متغیرها در عبارت سمبولیک:
import sympy as sp
x = sp.Symbol("x")
y = sp.Symbol("y")
z = sp.Symbol("z")
expr = (x + y + z) ** 3
print(sp.expand(expr))
print(expr.evalf(subs={x:1, y:2, z:-1}))

  • ساده سازی عبارات جبری:
import sympy as sp
x = sp.Symbol("x")
y = sp.Symbol("y")
print(sp.simplify((x + x * y) / x))

  • پیدا کردن حد توابع:
import sympy as sp
x = sp.Symbol("x")
print(sp.limit(sp.sin(x)/x, x, 0))

  • پیدا کردن حد در بینهایت:
import sympy as sp
x = sp.Symbol("x")
print(sp.limit(1/x, x, sp.oo))

  • پیدا کردن مشتق:
import sympy as sp
x = sp.Symbol("x")
print(sp.diff(sp.sin(sp.tan(x)), x))

  • بسط توابع:
import sympy as sp
x = sp.Symbol("x")
print(sp.series(sp.sin(sp.tan(x)), x))

  • انتگرال گیری سمبولیک:
import sympy as sp
x = sp.Symbol("x")
print(sp.integrate(sp.log(x), x))

  • محاسبه انتگرال معین:
import sympy as sp
x = sp.Symbol("x")
print(sp.integrate(sp.cos(x), (x, -sp.pi / 2, sp.pi / 2)))

  • محاسبه انتگرالهای ناسره:
import sympy as sp
x = sp.Symbol("x")
print(sp.integrate(sp.exp(-x ** 2), (x, -sp.oo, sp.oo)))

  • حل معادلات:
import sympy as sp

x = sp.Symbol("x")
y = sp.Symbol("y")

print(sp.solve(x ** 4 - 1, x))

print(sp.solve([x + 5 * y - 2, -3 * x + 6 * y - 15], [x, y]))

  • فاکتور برای چند جمله ای ها:
import sympy as sp

x = sp.Symbol("x")
f = x ** 4 - 3 * x ** 2 + 1

print(sp.factor(f))

print(sp.factor(f, modulus=5))

  • ماتریس ها:
import sympy as sp

x = sp.Symbol("x")
y = sp.Symbol("y")

A = sp.Matrix([[1, x], [y, 1]])
print(A ** 2)

  • معادلات دیفرانسیلی:
import sympy as sp

x = sp.Symbol("x")
f = sp.symbols("f", cls=sp.Function)

o = sp.dsolve(f(x).diff(x, x) + f(x), f(x))
print(o)

8 Comments

  1. امیرحسین

    سلام با تشکر از مطالب مفیدتون
    برای حل معادله های از درجه بالاتر به طور مثال حل معادله درجه دو چه راه حلی است ؟؟؟

    • ادمین

      خیلی ممنون، فکر نکنم منظورتان حل معادله جبری باشد چون خود مثال درجه چهار است. برای معادلات دیفرانسیلی مرتبه‌های بالاتر که احتمالا سوالتان مربوط به آن باشد، فرض کنیم معادله دیفرانسیل مثال به شکلی تغییر یابد که مشتق دوم f مد نظر باشد. برای اینکار از عبارت حاصل از f(x).diff(x, x) باز دیفرانسیل می گیریم به عبارتی:
      f(x).diff(x, x).diff(x, x)

  2. علی

    سلام ممنون بابت اموزشاتون سوالی که داشتم اینه که سینوس اینورس یا همون arcsin رو چجوری میشه تو پایتون نوشت

    • ادمین

      ضمن تشکر از جنبعالی. از کتابخانه math تابع asin یا گزینه بهتر، از کتابخانه numpy تابع arcsin.
      from numpy import arcsin
      print(arcsin(1))

  3. seyyed javad

    سلام.
    ممنون از شما و وقتي كه ميزاريد.
    ميخواستم بدونم براي انجام محاسبات انتگرال دو گانه و سه گانه از چه راه حلي ميشه استفاده كرد؟
    همچنين انتگرال هايي كه نياز به راه حل هاي جزء به جزء دارند (مثل (xcos(x)رو محاسباتش رو خودش داخل خود انتگرال معمولي مثل بالا، انجام ميده؟

    باتشكر

    • ادمین

      ۱) متغیرهای مختلف را تعریف کنید. تابعی که قرار است انتگرال گیری از آن انجام شود را بر اساس آن متغیرها بنویسید. سپس مشابه انتگرال معمولی انتگرال گیری کنید. با انتگرال گیری از پاسخ انتگرال گیری اول، تابع بدست آمده انتگرال دوگانه آن خواهد بود. دقت کنید که توانایی کتابخانه sympy محدود است و برای هر شکل از توابع خروجی موفقی نخواهید داشت. همچنین ذکر این نکته ضروری است که اگر در نهایت دنبال پاسخ عددی انتگرال در بازه مشخص هستید به هیچ وجه از sympy استفاده نکنید و به سمت integrate از scipy بروید.
      ۲) برای توابعی که پیچیدگی زیادی نداشته باشند بلی.

  4. سهراب

    باسلام و خسته نباشید
    میخواستم بپرسم چطوری میتونم کد حل انتگرال چندگانه از روش عددی را بنویسم.
    تا انتگرال ساده اش را رفتم ولی نمیدونم چطوری انتگرال دوم و مثلا سوم را براش اضافه کنم.
    ممنون از راهنماییتون

    • ادمین

      توضیح این مسئله در یک کامنت نمی گنجد بستگی دارد از پایه همه کار را می خواهید خودتان انجام دهید یا بر اساس بعضی از کارهای استاندارد روشتان را توسعه دهید. عدم وقوف کامل من بر مختصات کاری که انجام می دهید این ایده را به ذهن من متبادر می کند که شما عبارت داخل انتگرال اول را به شکل یک تابع سه متغیره نوشته اید. عبارت انتگرال اول توسط کد انتگرال ساده‌ای که نوشته اید به طور پارامتری قابل محاسبه است پس می توانید کل عبارتی که داخل انتگرال دوم است به شکل یک تابع دو ورودی از محاسبه‌گر انتگرالی که نوشته اید بنویسید. با به کار گیری دوباره محاسبه‌گر انتگرال عبارت داخل انتگرال سوم یک تابع با یک ورودی خواهد بود. پس یکبار دیگر استفاده از محاسبه کننده انتگرال ساده کار را تمام می کند. دقت کنید که منظور من در عبارات بالا از انتگرال اول داخلی‌ترین انتگرال و از انتگرال سوم، خارجی‌ترین انتگرال است. اگر اکانت گیت‌هاب دارید کد خود را آپلود کنید و آدرس را برای من بفرستید آن موقع بهتر می توانم راهنماییتان کنم.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *