Статьи

Математические модули в Python: математика и математика

При написании программ в нашей повседневной жизни, мы обычно сталкиваемся с ситуациями, когда нам нужно использовать немного математики, чтобы выполнить задачу. Как и другие языки программирования, Python предоставляет различные операторы для выполнения базовых вычислений, таких как * для умножения, % для модуля и // для деления по полу.

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

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

Эти функции выполняют различные арифметические операции, такие как вычисление пола, потолка или абсолютного значения числа с использованием функций floor(x) , ceil(x) и fabs(x) соответственно. Функция ceil(x) вернет наименьшее целое число, которое больше или равно x . Аналогично, floor(x) возвращает наибольшее целое число, меньшее или равное x . Функция fabs(x) возвращает абсолютное значение x .

Вы также можете выполнять нетривиальные операции, такие как вычисление факториала числа с использованием factorial(x) . Факториал — это произведение целого числа и всех натуральных чисел, меньших его. Он широко используется при работе с комбинациями и перестановками. Он также может быть использован для расчета значения функций синуса и косинуса.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
import math
 
def getsin(x):
 
    multiplier = 1
    result = 0
     
    for i in range(1,20,2):
        result += multiplier*pow(x,i)/math.factorial(i)
        multiplier *= -1
         
    return result
     
 
getsin(math.pi/2) # returns 1.0
getsin(math.pi/4) # returns 0.7071067811865475

Еще одна полезная функция в математическом модуле — это gcd(x,y) , которая дает вам наибольший общий делитель (GCD) из двух чисел x и y . Когда x и y не равны нулю, эта функция возвращает наибольшее положительное целое число, которое делит и x, и y . Вы можете использовать его косвенно для вычисления наименьшего общего кратного из двух чисел, используя следующую формулу:

1
gcd(a, b) x lcm(a, b) = axb

Вот несколько арифметических функций, которые предлагает Python:

1
2
3
4
5
6
7
8
9
import math
 
math.ceil(1.001) # returns 2
math.floor(1.001) # returns 1
math.factorial(10) # returns 3628800
math.gcd(10,125) # returns 5
 
math.trunc(1.001) # returns 1
math.trunc(1.999) # returns 1

Эти функции связывают углы треугольника с его сторонами. У них много применений, включая изучение треугольников и моделирование периодических явлений, таких как звуковые и световые волны. Имейте в виду, что угол, который вы задаете, указан в радианах.

Вы можете вычислить sin(x) , cos(x) и tan(x) напрямую, используя этот модуль. Однако прямой формулы для вычисления cosec(x) , sec(x) и cot(x) , но их значение равно обратной величине, возвращаемой sin(x) , cos(x) и tan(x) соответственно.

Вместо того, чтобы вычислять значение тригонометрических функций под определенным углом, вы также можете сделать обратное и вычислить угол, под которым они имеют заданное значение, используя asin(x) , acos(x) и atan(x) .

Вы знакомы с теоремой Пифагора ? В нем говорится, что квадрат гипотенузы (сторона, противоположная прямому углу) равна сумме квадратов двух других сторон. Гипотенуза также является самой большой стороной прямоугольного треугольника. Математический модуль предоставляет функцию hypot(a, b) для вычисления длины гипотенузы.

1
2
3
4
5
6
7
8
9
import math
 
math.sin(math.pi/4) # returns 0.7071067811865476
math.cos(math.pi) # returns -1.0
math.tan(math.pi/6) # returns 0.5773502691896257
math.hypot(12,5) # returns 13.0
 
math.atan(0.5773502691896257) # returns 0.5235987755982988
math.asin(0.7071067811865476) # returns 0.7853981633974484

Гиперболические функции являются аналогами тригонометрических функций, основанных на гиперболе вместо круга. В тригонометрии точки (cos b , sin b ) представляют точки единичного круга. В случае гиперболических функций точки (cosh b , sinh b ) представляют собой точки, которые образуют правую половину равносторонней гиперболы.

Так же, как и тригонометрические функции, вы можете напрямую вычислять значения sinh(x) , cosh(x) и tanh(x) . Остальные значения могут быть рассчитаны с использованием различных соотношений между этими тремя значениями. Существуют также другие функции, такие как asinh(x) , acosh(x) и atanh(x) , которые можно использовать для вычисления инверсии соответствующих гиперболических значений.

1
2
3
4
5
6
7
8
9
import math
 
math.sinh(math.pi) # returns 11.548739357257746
math.cosh(math.pi) # returns 11.591953275521519
math.cosh(math.pi) # returns 0.99627207622075
 
math.asinh(11.548739357257746) # returns 3.141592653589793
math.acosh(11.591953275521519) # returns 3.141592653589793
math.atanh(0.99627207622075) # returns 3.141592653589798

Так как math.pi равен примерно 3.141592653589793, когда мы использовали asinh() для значения, возвращаемого sinh(math.pi) , мы получили обратно π.

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

Вы можете использовать log(x,[base]) чтобы вычислить лог данного числа x для данной базы. Если вы не укажете необязательный аргумент base, логарифм x будет вычислен как основание e. Здесь e — математическая константа, значение которой равно 2.71828182 …. и к ней можно получить доступ с помощью math.e Кстати, Python также позволяет вам получить доступ к другой константе π, используя math.pi

Если вы хотите вычислить значения логарифма base-2 или base-10, использование log2(x) и log10(x) вернет более точные результаты, чем log(x, 2) и log(x, 10) . Имейте в виду, что функция log3(x) , поэтому вам придется продолжать использовать log(x, 3) для вычисления значений логарифма base-3. То же самое касается всех других баз.

Если значение, логарифм которого вы вычисляете, очень близко к 1, вы можете использовать log1p(x) . 1p в log1p означает 1 плюс. Следовательно, log1p(x) вычисляет log(1+x) где x близко к нулю. Тем не менее, результаты являются более точными с log1p(x) .

Вы также можете вычислить значение числа x, возведенного в степень y , используя pow(x, y) . Перед вычислением степеней эта функция преобразует оба аргумента в тип float. Если вы хотите, чтобы конечный результат вычислялся в точных целочисленных степенях, вы должны использовать встроенную функцию pow() или оператор ** .

Вы также можете вычислить квадратный корень любого заданного числа x с помощью sqrt(x) , но то же самое можно сделать с помощью pow(x, 0.5) .

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
import math
 
math.exp(5) # returns 148.4131591025766
math.e**5 # returns 148.4131591025765
 
math.log(148.41315910257657) # returns 5.0
math.log(148.41315910257657, 2) # returns 7.213475204444817
math.log(148.41315910257657, 10) # returns 2.171472409516258
 
math.log(1.0000025) # returns 2.4999968749105643e-06
math.log1p(0.0000025) # returns 2.4999968750052084e-06
 
math.pow(12.5, 2.8) # returns 1178.5500657314767
math.pow(144, 0.5) # returns 12.0
math.sqrt(144) # returns 12.0

Комплексные числа хранятся внутри с использованием прямоугольных или декартовых координат. Комплексное число z будет представлено в декартовых координатах как z = x + iy , где x представляет действительную часть, а y представляет мнимую часть. Другой способ представить их — использовать полярные координаты.

В этом случае комплексное число z будет определяться комбинацией модуля r и фазового угла phi . Модуль r — это расстояние между комплексным числом z и началом координат. Угол фи — это угол против часовой стрелки, измеренный в радианах от положительной оси х до отрезка, соединяющего z и начало координат.

Работая с комплексными числами, модуль cmath может оказать большую помощь. Модуль комплексного числа может быть вычислен с использованием встроенной функции abs() , а его фаза может быть рассчитана с использованием функции phase(z) доступной в модуле cmath. Вы можете преобразовать комплексное число в прямоугольной форме в полярную форму, используя polar(z) , который вернет пару (r, phi) , где r — это abs(z) а phi — это phase(z) .

Точно так же вы можете преобразовать комплексное число в полярной форме в прямоугольную форму, используя rect(r, phi) . Комплексное число, возвращаемое этой функцией: r * (math.cos(phi) + math.sin(phi)*1j) .

01
02
03
04
05
06
07
08
09
10
import cmath
 
cmath.polar(complex(1.0, 1.0))
# returns (1.4142135623730951, 0.7853981633974483)
 
cmath.phase(complex(1.0, 1.0))
# returns 0.7853981633974483
 
abs(complex(1.0, 1.0))
# returns 1.4142135623730951

Модуль cmath также позволяет нам использовать обычные математические функции с комплексными числами. Например, вы можете вычислить квадратный корень комплексного числа, используя sqrt(z) или его косинус, используя cos(z) .

1
2
3
4
5
6
7
import cmath
 
cmath.sqrt(complex(25.0, 25.0))
# returns (5.49342056733905+2.2754493028111367j)
 
cmath.cos(complex(25.0, 25.0))
# returns (35685729345.58163+4764987221.458499j)

Комплексные числа имеют множество применений, таких как моделирование электрических цепей, гидродинамика и анализ сигналов. Если вам нужно поработать над любой из этих вещей, модуль cmath вас не разочарует.

Все эти функции, которые мы обсуждали выше, имеют свои конкретные приложения. Например, вы можете использовать функцию factorial(x) для решения проблем перестановок и комбинаций. Вы можете использовать тригонометрические функции для преобразования вектора в декартовы координаты. Вы также можете использовать тригонометрические функции для имитации периодических функций, таких как звуковые и световые волны.

Аналогично, кривая веревки, висящей между двумя полюсами, может быть определена с использованием гиперболической функции. Поскольку все эти функции непосредственно доступны в математическом модуле, очень легко создавать небольшие программы, которые выполняют все эти задачи.

Я надеюсь, вам понравился этот урок. Если у вас есть какие-либо вопросы, дайте мне знать в комментариях.