Как определить математическую функцию в SymPy?
SymPy — это библиотека Python, которая делает возможным «символьное вычисление» в Python.
Математические функции с использованием SymPy
Мы можем определить математические функции, используя SymPy в Python. Есть два типа функций, которые мы можем определить с помощью SymPy: «Неопределенные функции» и «Пользовательские функции» .
Неопределенные функции:
Программист может создавать «неопределенные функции», когда он/она не хочет оценивать результат и оставлять результат неоцененным. Эти функции не имеют математических свойств, определенных для них. Это означает, что любой аргумент, переданный в неопределенную функцию, останется невычисленным, и функция никогда не даст никакого результата.
Пользовательские функции:
С помощью «Пользовательских функций» программист может придать определенной функции математическое свойство. В пользовательских функциях математическое свойство применяется к аргументу, результат оценивается и выводится на экран.
Метод класса eval():
Метод класса eval() автоматически оценивает результат. Он используется в функции подкласса для возврата значения путем выполнения вычислений с аргументами или возврата None. Это означает, что eval() всегда будет возвращать оцениваемый результат или возвращает None.
Определить математическую функцию в SymPy
Неопределенные функции:
Прежде всего, чтобы определить неопределенную функцию в Python, нам нужно импортировать SymPy. После импорта SymPy нам просто нужно объявить переменную и определить в ней функцию.
Пример 1: определение неопределенной функции с помощью переменной SymPy
Python3
# importing SymPy Libraryimport 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 argumentf(x) |
Выход:
f(x)
Пример 2: определение неопределенной функции с целым числом
Python3
# importing SymPy Libraryimport sympy # creating undefined function "f"f = sympy.Function("f") # calling the function "f" with an integer as its argumentf(0) |
Выход:
f(0)
Пример 3. Определение неопределенной функции, которая является невызываемым объектом
Python
# importing SymPy Libraryimport sympy # creating a SymPy variable "x"x = sympy.Symbol("x") # creating non-callable functionf = sympy.Function("f")(x) # calling the function "f"f |
Выход:
f(x)
Если мы вызовем здесь функцию 'f' с каким-либо аргументом, она выдаст ошибку.
Python3
# importing SymPy Libraryimport sympy # creating a SymPy variable "x"x = sympy.Symbol("x") #creating another SymPy variable "y"y = sympy.Symbol("y") # creating non-callable functionf = sympy.Function("f")(x) # calling the function "f" with an argumentf(y) |
Выход:
Пример 4. Выполнение дифференцирования неопределенной функции
Python3
# importing SymPy Libraryimport 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 Libraryimport sympy # creating class squareclass 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 argumentsquare.eval(4) |
Выход:
16
Если мы просто вызовем класс, то результата у нас не будет. Вместо этого у нас будет имя функции, а в качестве ее аргумента — это число.
Python3
# importing SymPy Libraryimport sympy # creating class "square"class square(sympy.Function): @classmethod # defining subclass function with "eval()" class method def eval(cls, x): print(x**2) # calling classsquare(4) |
Выход:
square(4)
2. Функция для получения куба числа
Python3
# importing SymPy Libraryimport sympy # creating classclass cube(sympy.Function): @classmethod # defining subclass function with "eval()" class method def eval(cls, x): print(x**3) # calling the functioncube(9) |
Выход:
cube(9)
Вызов функции подкласса eval().
Python3
# importing SymPy Libraryimport sympy # creating classclass 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