- Использование SymPy в вычислениях
- Задача. Найдите значение выражения:
- Задача. Найдите значение выражения, если lgb = 5:
- Задача. Упростите выражение:
- Задача. Реализуйте функцию на языке Python, принимающую на вход n и возвращающую значение следующей суммы:
- Задача. Реализуйте функцию на языке Python, принимающую на вход n и возвращающую значение следующего выражения:
- Задача. Проверьте, что функции из предыдущих двух заданий эквивалентны. Объясните, почему это так.
- Задача. Найдите значение выражения.
- Задача. Найдите значение выражения.
- Задача. Найдите значение выражения при b=2.
Использование SymPy в вычислениях
Добрый день уважаемые пользователи. Данная статья ориентированна на начинающих программистов. Как вы знаете для Python существует большое множество библиотек которые помогают с вычислениями. И я хотел бы поделиться одной из библиотек, которая может существенно помочь при вычислениях, но использовать ее в коде я не рекомендую. Но она может значительно облегчить вам жизнь, если вы решаете уровнения и занимаетесь их преобразованием, упрощением для дальнейшего использования.
Библиотека SymPy умеет многое, начиная с решения уравнений и заканчивая построениями графиков, но тут я хотел рассмотреть на примерах, как же работают функции «упрощения» в этой библиотеке на примере решения нескольких простых задач.
Задача. Найдите значение выражения:
Проверим наше преобразование с помощью SymPy:
from sympy import * # знак звездочки означает, чт омы импортировали все данные из библиотеки
init_printing(use_unicode = False, wrap_line = False, no_global = True) # формат вывода информации
expression = (sqrt(13)+sqrt(7))**2/(10+sqrt(91)) expression
Скопируйте этот код и посмотрите на нывод. Библиотека SymPy не дала нам ответ, а вывел очень красиво нашу формулу:
Предлагаю упростить это выражение, т.е. решить его, но для упрощения я буду использовать функцию simplify:
simplify(expression) # функция simplify выполняет упрощение выражений
Для лучшего понимаю как можно использовать функцию simplify приведем еще пару примеров.
Задача. Найдите значение выражения, если lgb = 5:
Проведем преобразования. Для начала вычислим значение b.
Теперь поставим значение b в наше выражение, которое нужно было вычислить:
Проверим наше преобразование с помощью SymPy:
b = Symbol('b') # введем символ b далее мы сможем его вычислить expression_b = log(b, 10) expression_b
Этот код выведет нам следующее сообщение:
После того как мы создадим выражение expression_b давайте вычислим само значение b:
solve_b = solve(expression_b-5, b) # функция slove решает уровнение,тут "-5" эквивалентно "=5" solve_b = solve_b[0] solve_b
Да, мы уже получили с вами это же числе проводя преобразования в ручную.
expression_b_main = log(10 / solve_b**3) expression_b_main
Да, вывод не всегда удобно читать. Но отметим что, В ответе выше содержится 14 нулей, а логарифм по основанию 10 будет равен — 14.
И именно тут я хочу сделать важное замечание, что в SymPy нужно быть очень внимательными с логарифмами и нужно явно указывать основание. Если его не указать, то по умолчанию основание логарифма будет — е.
Задача. Упростите выражение:
Когда перемножаются степени одинаковых чисел, можно просто сложить показатели степеней.
Проверим наше выражение и упростим его с помощью библиотеки.
expression_a = 2 * a * a**(4/3) * 3 * a**(2/3) expression_a
Наша библиотека сразу же дала нам упрощенное выражение, перемножив все слагаемые. Результат верный. Реализуйте функцию на языке Python, принимающую на вход n и возвращающую значение следующей суммы:
Задача. Реализуйте функцию на языке Python, принимающую на вход n и возвращающую значение следующей суммы:
def summa(n): summa = 0 for x in range(1, n+1, 1): summa = log(x) + summa return summa
Обратите внимание что функция работает верно. Т.е. наша сумма начинается с i = 1, но поскольку натуральный логарифм т 1 будет равен 0, то в вывод 0 не попадает.
Задача. Реализуйте функцию на языке Python, принимающую на вход n и возвращающую значение следующего выражения:
Сразу скажу что не нужно пугаться большой буквы П. В этой записи П оначает что это произведение ряда числе начиная с 1 и до n.
В этом математическом выражении нам необходимо посчитать натуральный логарифм от произведений чисел от 1 до n.
А теперь используем функцию:
Задача. Проверьте, что функции из предыдущих двух заданий эквивалентны. Объясните, почему это так.
print('Функция из задния 4:', summa(5)) print('Функция из задния 5:', multiplication(5))
Тут мы вывели значения которые получили от функций суммы и произведения. Полуим на выводе:
Исходя из свойств логарифмов упростим первое выражение. Поскольку у логарифмов везде одинаковое основание, то мы можем перемножить числа в скобках.
summa_expression_simplify = simplify(summa(5)) summa_expression_simplify
Как мы видим выражения полностью одинаковы.
Задача. Найдите значение выражения.
expression_g = (4*x-x*x)**(1/3) expression_g = simplify(expression_g) expression_g
expression_g_solve = solve(expression_g-0, x) # Найдем корни expression_g_solve
Теперь перейдем к решению основного уравнения. На самом деле для решения не нужно было искать корни, это было продемонстрировано для примера.
numerator_g = (4*(2-x)-(2-x)*(2-x))**(1/3) denominator_g = (4*(2+x)-(2+x)*(2+x))**(1/3)
expr_g_main = numerator_g / denominator_g expr_g_main
Воспользовавшись функцией упрощения, упростим это выражение.
expr_g_main = simplify(expr_g_main) expr_g_main
И так мы получили ответ 1. Посмотрим как это получилось, приведя поэтапные преобразования:
Задача. Найдите значение выражения.
Упростим выражение в ручную:
В ответе мы получили 5. Проверим наши преобразования используя библиотеку sympy.
x = Symbol('x') Expression = ((2*x**3)**4-(x**2)**6)/(3*x**12) Expression
Наше решение верно. Ответы сошлись.
Задача. Найдите значение выражения при b=2.
Проведем упрощения выражения:
Проверим наши вычисления с помощью библиотеки:
b = Symbol('b') expression_b = (11*a**6*b**3-(3*a**2*b)**3)/(4*a**6*b**6) expression_b
Как видим библиотека сразу сделал упрощение нашего выражения.
expression_g_solve = solve(expression_b+0.5, b) expression_g_solve[0]
Поставив свой ответ который мы получили, мы нашли значение b = 2, значит выражение решено верно.
Надеюсь на нескольких простых примерах вы поняли суть работы с SymPy и применением ее в ваших вычислениях. Обращаю внимание, что SymPy не всегда упрошает выражения до самого простого, это было видно по заданиям в этой статье.