Как определить математическую функцию в SymPy?

Опубликовано: 20 Февраля, 2023

SymPy — это библиотека Python, которая делает возможным «символьное вычисление» в Python.

Математические функции с использованием SymPy

Мы можем определить математические функции, используя SymPy в Python. Есть два типа функций, которые мы можем определить с помощью SymPy: «Неопределенные функции» и «Пользовательские функции» .

Неопределенные функции:

Программист может создавать «неопределенные функции», когда он/она не хочет оценивать результат и оставлять результат неоцененным. Эти функции не имеют математических свойств, определенных для них. Это означает, что любой аргумент, переданный в неопределенную функцию, останется невычисленным, и функция никогда не даст никакого результата.

Пользовательские функции:

С помощью «Пользовательских функций» программист может придать определенной функции математическое свойство. В пользовательских функциях математическое свойство применяется к аргументу, результат оценивается и выводится на экран.

Метод класса eval():

Метод класса eval() автоматически оценивает результат. Он используется в функции подкласса для возврата значения путем выполнения вычислений с аргументами или возврата None. Это означает, что eval() всегда будет возвращать оцениваемый результат или возвращает None.

Определить математическую функцию в SymPy

Неопределенные функции:

Прежде всего, чтобы определить неопределенную функцию в Python, нам нужно импортировать SymPy. После импорта SymPy нам просто нужно объявить переменную и определить в ней функцию.

Пример 1: определение неопределенной функции с помощью переменной SymPy

Python3




# importing SymPy Library
import sympy
  
# creating undefined function "f"
f = sympy.Function("f")
  
# creating SymPy variable "x"
x = sympy.Symbol("x")
  
# calling function "f" with variable "x" as its argument
f(x)

Выход:

f(x)

Пример 2: определение неопределенной функции с целым числом

Python3




# importing SymPy Library
import sympy
  
# creating undefined function "f"
f = sympy.Function("f")
  
# calling the function "f" with an integer as its argument
f(0)

Выход:

f(0)

Пример 3. Определение неопределенной функции, которая является невызываемым объектом

Python




# importing SymPy Library
import sympy
  
# creating a SymPy variable "x"
x = sympy.Symbol("x")
  
# creating non-callable function
f = sympy.Function("f")(x)
  
# calling the function "f"
f

Выход:

f(x)

Если мы вызовем здесь функцию 'f' с каким-либо аргументом, она выдаст ошибку.

Python3




# importing SymPy Library
import sympy
  
# creating a SymPy variable "x"
x = sympy.Symbol("x")
  
#creating another SymPy variable "y"
y = sympy.Symbol("y")
  
# creating non-callable function
f = sympy.Function("f")(x)
  
# calling the function "f" with an argument
f(y)

Выход:

Пример 4. Выполнение дифференцирования неопределенной функции

Python3




# importing SymPy Library
import sympy
  
# creating undefined function "f"
f = sympy.Function("f")
  
# creating SymPy variable "x"
x = sympy.Symbol("x")
  
# performing differentiation on the function "f"
f(x).diff(x)

Выход:

d/dx {f(x)}

Пользовательские функции:

В пользовательской функции результат оценивается полностью. Для этой цели мы определим класс, а внутри него, для определения математического свойства этой функции, мы определим функцию подкласса.

Пример 1: Функция для получения квадрата числа

В этом примере мы собираемся определить функцию, которая будет возвращать квадрат переданного аргумента.

Python3




# importing SymPy Library
import sympy
  
# creating class square
class square(sympy.Function):
  @classmethod
  # defining subclass function with "eval()" class method
  def eval(cls, x):
    print(x**2)
      
# calling the eval() subclass
# function with integer 4 as its argument
square.eval(4)

Выход:

16

Если мы просто вызовем класс, то результата у нас не будет. Вместо этого у нас будет имя функции, а в качестве ее аргумента — это число.

Python3




# importing SymPy Library
import sympy
  
# creating class "square"
class square(sympy.Function):
  @classmethod
  # defining subclass function with "eval()" class method
  def eval(cls, x):
    print(x**2)
    
# calling class
square(4)

Выход:

square(4)

2. Функция для получения куба числа

Python3




# importing SymPy Library
import sympy
  
# creating class
class cube(sympy.Function):
  @classmethod
  # defining subclass function with "eval()" class method
  def eval(cls, x):
    print(x**3)
  
# calling the function
cube(9)

Выход:

cube(9)

Вызов функции подкласса eval().

Python3




# importing SymPy Library
import sympy
  
# creating class
class cube(sympy.Function):
  @classmethod
  # defining subclass function with "eval()" class method
  def eval(cls, x):
    print(x**3)
  
# calling the subclass function 
cube.eval(9)

Выход:

729