Символьные вычисления
Символьное решение задач математического анализа
Символьное дифференцирование
Для вычисления производной от символьной функции в Engee используется функция Symbolics.derivative. Ее аргументами являются имя функции, от которой берется производная, и имя независимой переменной, по которой производится дифференцирование.
Например, найдем в Engee производную от символьной функции :
using Symbolics;
@variables x;
S(x) = x^3;
dS = Symbolics.derivative(S(x), x)
✏️Задание 1
Найдите в Engee производную от символьной функции .
Решение
using Symbolics;
@variables x;
S(x) = 5*x^3 + 3*x + 7;
dS = Symbolics.derivative(S(x), x)
Если функция зависит от нескольких символьных переменных, то с помощью функции Symbolics.derivative можно найти ее частные производные. При этом дифференцирование будет производиться по указанной переменной, а остальные переменные будут рассматриваться как константы.
Например, частная производная от функции по переменной находится так:
using Symbolics;
@variables x y;
Z(x,y) = x^2*y^2 + 3*x + 5*y + 10;
dZ1 = Symbolics.derivative(Z(x,y), x)
А частная производная от функции по переменной находится так:
dZ2 = Symbolics.derivative(Z(x,y), y)
✏️Задание 2
Найдите в Engee частные производные от символьной функции по переменным x и y.
Решение
using Symbolics;
@variables x y;
P(x,y) = x^y + x*cos(y);
dP1 = Symbolics.derivative(P(x,y), x)
dP2 = Symbolics.derivative(P(x,y), y)
Другой способ символьного дифференцирования – использование библиотеки SymPy, которая открывает доступ к многочисленным функциям символьной математики языка Python. В частности, производная любого порядка от символьной функции может быть найдена с помощью функции diff. Ее аргументами являются имя функции, от которой берется производная, имя независимой переменной и (необязательно) порядок производной. Если порядок производной не указан, то берется производная первого порядка.
Например, производные первого, второго и третьего порядка от символьной функции находятся так:
using SymPy;
x = symbols("x");
Z(x) = 5*x^3 + 3*x + 7;
diff(Z(x), x)
diff(Z(x), x, 2)
diff(Z(x), x, 3)
Частные производные от символьных функций нескольких переменных берутся также с помощью функции diff с указанием переменной, по которой ведется дифференцирование.
✏️Задание 3
Найдите в Engee частные производные второго порядка от символьной функции по переменным x и y с помощью функции diff.
Решение
using SymPy;
x, y = symbols("x y");
P(x,y) = x^y + x * cos(y);
diff(P(x,y), x, 2)
diff(P(x,y), y, 2)
Символьное интегрирование
Для вычисления неопределенного интеграла от символьной функции в Engee используется функция integrate, содержащаяся в библиотеке SymPy. Ее аргументами являются имя подынтегральной функции и имя переменной интегрирования.
Например, неопределенный интеграл находится следующим образом:
using SymPy;
x = symbols("x");
U(x) = 5*x^3;
int = integrate(U(x), x)
Чтобы найти определенный интеграл от символьной функции, используется та же функция integrate, только после имени функции в круглых скобках через запятую вводятся три параметра: имя переменной интегрирования, нижний предел и верхний предел интегрирования.
Например, интеграл находится так:
using SymPy;
x = symbols("x");
U(x) = 5*x^3;
int = integrate(U(x), (x, 0, 1))
✏️Задание 4
Найдите в Engee сначала неопределенный интеграл , а затем определенный интеграл от символьной функции .
Решение
using SymPy;
x = symbols("x");
U(x) = x^2 + x + 3;
int1 = integrate(U(x), x)
int2 = integrate(U(x), (x, 1, 2))
Разложение символьных функций в ряд Тейлора
Разложить символьную функцию в степенной ряд (ряд Тейлора) можно с помощью функции series, содержащейся в библиотеке SymPy. Ее аргументами являются имя функции, раскладываемой в ряд, имя независимой переменной, точка , вокруг которой производится разложение, и порядок разложения (т.е. какой степени независимой переменной будет пропорциональна погрешность – ).
Например, для функции частичная сумма ряда Тейлора пятого порядка в окрестности точки имеет вид:
using SymPy;
x = symbols("x");
U(x) = exp(x);
series(U(x), x, 0, 5)
✏️Задание 5
Найдите в Engee частичную сумму ряда Тейлора для функции седьмого порядка в окрестности точки .
Решение
using SymPy;
x = symbols("x");
U(x) = exp(sin(x));
series(U(x), x, 0, 7)
Символьное решение обыкновенных дифференциальных уравнений
С помощью средств библиотеки SymPy также можно решать в символьном виде обыкновенные дифференциальные уравнения.
Пример. Найдем символьно общее решение дифференциального уравнения :
using SymPy;
x = Sym("x");
u = symbols("u", cls=sympy.Function);
diffeq = Eq(u(x).diff(x, x) - 2*u(x).diff(x) + u(x), sin(x));
dsolve(diffeq, u(x))
Здесь конструкция u(x).diff(x) задает символьную производную первого порядка от функции u(x), а конструкция u(x).diff(x, x) – производную второго порядка. Функция Eq задает дифференциальное уравнение (левая и правая части уравнения разделяются запятой); это уравнение присваивается переменной diffeq. И, наконец, функция dsolve символьно решает заданное дифференциальное уравнение. Ее аргументами являются имя уравнения diffeq и имя искомой функции u(x).
✏️Задание 6
Найдите в Engee в символьном виде общее решение дифференциального уравнения .
Решение
using SymPy;
x = symbols("x");
v = symbols("v", cls=sympy.Function)
diffeq = Eq(2*v(x).diff(x, x) + 3*v(x).diff(x) + 5*v(x), exp(x));
dsolve(diffeq, v(x))