Встроенный модуль math в Python предоставляет набор функций для выполнения математических, тригонометрических и логарифмических операций. Некоторые из основных функций модуля:
- pow(num, power) : возведение числа num в степень power
- sqrt(num) : квадратный корень числа num
- ceil(num) : округление числа до ближайшего наибольшего целого
- floor(num) : округление числа до ближайшего наименьшего целого
- factorial(num) : факториал числа
- degrees(rad) : перевод из радиан в градусы
- radians(grad) : перевод из градусов в радианы
- cos(rad) : косинус угла в радианах
- sin(rad) : синус угла в радианах
- tan(rad) : тангенс угла в радианах
- acos(rad) : арккосинус угла в радианах
- asin(rad) : арксинус угла в радианах
- atan(rad) : арктангенс угла в радианах
- log(n, base) : логарифм числа n по основанию base
- log10(n) : десятичный логарифм числа n
Пример применения некоторых функций:
Программа на Python для вычисления корней квадратного уравнения , написана с помощью ООП
import math # возведение числа 2 в степень 3 n1 = math.pow(2, 3) print(n1) # 8 # ту же самую операцию можно выполнить так n2 = 2**3 print(n2) # квадратный корень числа print(math.sqrt(9)) # 3 # ближайшее наибольшее целое число print(math.ceil(4.56)) # 5 # ближайшее наименьшее целое число print(math.floor(4.56)) # 4 # перевод из радиан в градусы print(math.degrees(3.14159)) # 180 # перевод из градусов в радианы print(math.radians(180)) # 3.1415. # косинус print(math.cos(math.radians(60))) # 0.5 # cинус print(math.sin(math.radians(90))) # 1.0 # тангенс print(math.tan(math.radians(0))) # 0.0 print(math.log(8,2)) # 3.0 print(math.log10(100)) # 2.0
Также модуль math предоставляет ряд встроенных констант, такие как PI и E:
import math radius = 30 # площадь круга с радиусом 30 area = math.pi * math.pow(radius, 2) print(area) # натуральный логарифм числа 10 number = math.log(10, math.e) print(number)
Источник: metanit.com
Квадратный корень числа в Python
В Python есть много способов найти квадратный корень числа.
Использование экспонентного оператора для извлечения квадратного корня числа
num = input(«Please enter a number:n») sqrt = float(num) ** 0.5 print(f’ square root is ‘)
Please enter a number: 4.344 4.344 square root is 2.0842264752180846 Please enter a number: 10 10 square root is 3.1622776601683795
Я использую встроенную функцию float() для преобразования введенной пользователем строки в число с плавающей запятой.
Функция input() используется для получения пользовательского ввода из стандартного ввода.
Математическая функция sqrt()
Функция sqrt() математического модуля Python – это рекомендуемый подход для получения квадратного корня из числа.
import math num = 10 num_sqrt = math.sqrt(num) print(f’ square root is ‘)
13.6 Корни уравнения. «Поколение Python»: курс для начинающих. Курс Stepik
Математическая функция pow()
Это не рекомендуемый подход. Но квадратный корень из числа равен степени 0,5.
>>> import math >>> >>> math.pow(10, 0.5) 3.1622776601683795 >>>
Квадратный корень комплексного числа
Как я могу решить уравнения в Python?
Скажем, у меня есть уравнение: 2x + 6 = 12 С алгеброй видно, что x = 3 . Как я могу сделать программу на Python, которая может решить для x ? Я новичок в программировании, и я смотрел на eval() и exec() , но я не могу понять, как заставить их делать то, что я хочу. Я не хочу использовать внешние библиотеки (например, SAGE), я хочу сделать это в простом Python.
user1221937 08 май 2012, в 16:09
Поделиться
Я хочу автомобиль, который делает 0 до 60 за 4,5 секунды и получает 45 миль на галлон. Может быть, вы могли бы рассмотреть возможность удаления требования для простого Python и использовать внешние библиотеки
Mike Pennington 08 май 2012, в 13:51
Если вы хотите решить какое-либо уравнение, вам придется создать свою собственную библиотеку. Также 4,5 секунды недостаточно для этого примера: D
jamylak 08 май 2012, в 13:52
Будут ли проблемы всегда выглядеть так: solve y = mx + c for x ?
Li-aung Yip 08 май 2012, в 13:53
Li-aung Yip 08 май 2012, в 13:54
Можно не использовать внешние библиотеки, но вам придется выяснить процесс получения ответа (не должно быть слишком сложно со стандартной алгеброй), а затем кодировать его.
Lostsoul 08 май 2012, в 13:55
Mike Pennington 08 май 2012, в 13:56
это домашнее задание? или почему вы не хотите использовать внешние библиотеки?
Niek de Klein 08 май 2012, в 14:02
Показать ещё 5 комментариев
Поделиться:
calculator
5 ответов
Как насчет SymPy? Их solver выглядит так, как вам нужно. Посмотрите их исходный код, если вы хотите сами построить библиотеку.
eumiro 08 май 2012, в 15:16
Поделиться
Забавно видеть ответ, подобный этому, через несколько минут после всех глупых комментариев по этому вопросу: D
naught101 30 янв. 2015, в 02:30
Существует два способа подхода к этой проблеме: численно и символически.
Чтобы решить его численно, вы должны сначала закодировать его как функцию «runnable» — вставьте значение в значение, получите значение. Например,
def my_function(x): return 2*x + 6
Весьма возможно проанализировать строку для автоматического создания такой функции; скажем, разберите 2x + 6 в список, [6, 2] (где индекс списка соответствует мощности x — так 6 * x ^ 0 + 2 * x ^ 1). Тогда:
def makePoly(arr): def fn(x): return sum(c*x**p for p,c in enumerate(arr)) return fn my_func = makePoly([6, 2]) my_func(3) # returns 12
Затем вам понадобится другая функция, которая повторно подключает значение x в вашу функцию, анализирует разницу между результатом и тем, что она хочет найти, и изменяет ее значение x (надеюсь) минимизирует разницу.
def dx(fn, x, delta=0.001): return (fn(x+delta) — fn(x))/delta def solve(fn, value, x=0.5, maxtries=1000, maxerr=0.00001): for tries in xrange(maxtries): err = fn(x) — value if abs(err) < maxerr: return x slope = dx(fn, x) x -= err/slope raise ValueError(‘no solution found’)
Здесь есть много потенциальных проблем — найти хорошее начальное значение x, считая, что функция фактически имеет решение (т.е. нет никаких однозначных ответов на x ^ 2 + 2 = 0), попав в пределы точность вычислений и т.д. Но в этом случае функция минимизации ошибок подходит и получается хороший результат:
solve(my_func, 16) # returns (x =) 5.000000000000496
Обратите внимание, что это решение не совсем, точно верно. Если вам нужно, чтобы это было идеально, или если вы хотите аналитически анализировать решения уравнений, вам нужно обратиться к более сложному зверю: символическому решателю.
Символьный решатель, такой как Mathematica или Maple, представляет собой экспертную систему с множеством встроенных правил ( «знаний» ) об алгебре, исчислении и т.д.; он «знает», что производная от sin is cos, что производная от kx ^ p равна kpx ^ (p-1) и т.д. Когда вы даете ему уравнение, он пытается найти путь, набор правил-приложений, откуда он (уравнение), туда, где вы хотите быть (простейшая форма уравнения, которое, мы надеемся, является решением).
Ваше примерное уравнение довольно простое; символическое решение может выглядеть так:
=> LHS([6, 2]) RHS([16]) # rule: pull all coefficients into LHS LHS, RHS = [lh-rh for lh,rh in izip_longest(LHS, RHS, 0)], [0] => LHS([-10,2]) RHS([0]) # rule: solve first-degree poly if RHS==[0] and len(LHS)==2: LHS, RHS = [0,1], [-LHS[0]/LHS[1]] => LHS([0,1]) RHS([5])
и есть ваше решение: x = 5.
Я надеюсь, что это придает дух идеи; детали реализации (поиск хорошего, полного набора правил и принятие решения о применении каждого правила) могут легко потреблять много человеко-лет усилий.
Источник: overcoder.net