Найти значение уравнения питон

Использование 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 не всегда упрошает выражения до самого простого, это было видно по заданиям в этой статье.

Источник

Решение систем линейных уравнений с помощью Numpy в Python

Библиотеку Numpy можно использовать для выполнения множества математических и научных операций, таких как скалярное произведение, поиск значений синуса и косинуса, преобразование Фурье и т.д.

Что такое система линейных уравнений?

Википедия определяет систему линейных уравнений как:

В математике система линейных уравнений (или линейная система) – это набор двух или более линейных уравнений, включающих один и тот же набор переменных.

Конечная цель решения системы линейных уравнений – найти значения неизвестных переменных. Вот пример системы линейных уравнений с двумя неизвестными переменными x и y:

Чтобы решить указанную выше систему линейных уравнений, нам нужно найти значения переменных x и y. Есть несколько способов решить такую систему, например, исключение переменных, правило Крамера, метод сокращения строк и матричное решение.

В матричном решении решаемая система линейных уравнений представлена в виде матрицы AX = B. Например, мы можем представить уравнение 1 в виде матрицы следующим образом:

A = [[ 4 3] [-5 9]] X = [[x] [y]] B = [[20] [26]]

Чтобы найти значение переменных x и y в уравнении 1, нам нужно найти значения в матрице X. Для этого мы можем взять скалярное произведение обратной матрицы A и матрицы B, как показано ниже:

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

Решение

Из предыдущего раздела мы знаем, что для решения системы линейных уравнений нам необходимо выполнить две операции: обращение и скалярное произведение матрицы. Библиотека Numpy от Python поддерживает обе операции. Если вы еще не установили библиотеку Numpy, вы можете сделать это с помощью следующей команды pip:

Давайте теперь посмотрим, как решить систему линейных уравнений с помощью библиотеки Numpy.

Использование методов inv() и dot()

Сначала мы найдем матрицу, обратную матрице A, которую мы определили в предыдущем разделе.

Давайте сначала создадим матрицу A на Python. Для создания матрицы можно использовать метод массива модуля Numpy. Матрицу можно рассматривать как список списков, где каждый список представляет собой строку.

В следующем скрипте мы создаем список с именем m_list, который дополнительно содержит два списка: [4,3] и [-5,9]. Эти списки представляют собой две строки в матрице A. Чтобы создать матрицу A с помощью Numpy, m_list передается методу массива, как показано ниже:

import numpy as np m_list = [[4, 3], [-5, 9]] A = np.array(m_list)

Чтобы найти обратную матрицу, которая передается методу linalg.inv() модуля Numpy:

inv_A = np.linalg.inv(A) print(inv_A)

Следующим шагом является нахождение скалярного произведения между матрицей, обратной матрицей A и B. Важно отметить, что матричное скалярное произведение возможно только между матрицами, если их внутренние размеры равны, т.е. количество столбцов левой матрицы должно соответствовать количеству строк в правой матрице.

Чтобы найти точечный продукт с помощью библиотеки Numpy, используется функция linalg.dot(). Следующий скрипт находит скалярное произведение между обратной матрицей A и B, которая является решением уравнения 1.

B = np.array([20, 26]) X = np.linalg.inv(A).dot(B) print(X)

Здесь 2 и 4 – соответствующие значения для неизвестных x и y в уравнении 1. Чтобы убедиться, что если вы подставите 2 вместо неизвестного x и 4 вместо неизвестного y в уравнении 4x + 3y, вы увидите что результат будет 20.

Давайте теперь решим систему трех линейных уравнений, как показано ниже:

4x + 3y + 2z = 25 -2x + 2y + 3z = -10 3x -5y + 2z = -4

Вышеупомянутое уравнение можно решить с помощью библиотеки Numpy следующим образом:

A = np.array([[4, 3, 2], [-2, 2, 3], [3, -5, 2]]) B = np.array([25, -10, -4]) X = np.linalg.inv(A).dot(B) print(X)

В приведенном выше скрипте методы linalg.inv() и linalg.dot() связаны вместе. Переменная X содержит решение уравнения 2 и печатается следующим образом:

Значения неизвестных x, y и z равны 5, 3 и -2 соответственно. Вы можете подставить эти значения в уравнение 2 и проверить их правильность.

resolve()

В двух предыдущих примерах мы использовали методы linalg.inv() и linalg.dot() для поиска решения системы уравнений. Однако библиотека Numpy содержит метод linalg.solve(), который можно использовать для непосредственного поиска решения системы линейных уравнений:

A = np.array([[4, 3, 2], [-2, 2, 3], [3, -5, 2]]) B = np.array([25, -10, -4]) X2 = np.linalg.solve(A,B) print(X2)

Вы можете видеть, что результат такой же, как и раньше.

Пример

Давайте посмотрим, как систему линейных уравнений можно использовать для решения реальных задач.

Предположим, продавец фруктов продал 20 манго и 10 апельсинов за один день на общую сумму 350 долларов. На следующий день он продал 17 манго и 22 апельсина за 500 долларов. Если цены на фрукты оставались неизменными в оба дня, какова была цена одного манго и одного апельсина?

Эту задачу легко решить с помощью системы двух линейных уравнений.

Допустим, цена одного манго равна x, а цена апельсина – y. Вышеупомянутую проблему можно преобразовать так:

20x + 10y = 350 17x + 22y = 500

Решение для указанной выше системы уравнений показано здесь:

A = np.array([[20, 10], [17, 22]]) B = np.array([350, 500]) X = np.linalg.solve(A,B) print(X)

Выходные данные показывают, что цена одного манго составляет 10 долларов, а цена одного апельсина – 15 долларов.

Источник

Оцените статью