Квадратный корень на Python: от простого к сложному

Раздел: Математика -> Математические вычисления

Способы вычисления квадратного корня

В Python существует несколько подходов для извлечения квадратного корня. Выбор зависит от типа данных, требуемой точности и контекста задачи.

Как найти квадратный корень числа с помощью стандартной библиотеки math?

Наиболее распространённый и эффективный способ - функция math.sqrt(). Она работает с числами с плавающей точкой и возвращает вещественный результат.


import math
print(math.sqrt(25))   # 5.0
print(math.sqrt(2))    # 1.4142135623730951

Python решение примера (решение примера на python)

Типичная ошибка:

Передача отрицательного числа вызывает ValueError: math domain error. Для комплексных корней используйте cmath.sqrt().

Цель: быстрое и надёжное вычисление для вещественных чисел. Используется в научных расчётах, статистике, графике.

Можно ли использовать оператор ** для квадратного корня?

Оператор возведения в степень ** с показателем 0.5 даёт тот же результат, что и math.sqrt(), но работает медленнее и может привести к проблемам с точностью для больших чисел.


print(25 ** 0.5)   # 5.0
print(2 ** 0.5)    # 1.4142135623730951

Python вычисление значения выражений (вычисление значения выражений в python)

При отрицательном основании и дробном показателе возникает ValueError или комплексный результат только при использовании cmath. Для целых чисел результат может быть неточным из-за ограничений float.

Случаи использования: быстрые однострочные вычисления без импорта модулей.

Как использовать встроенную функцию pow для извлечения корня?

Функция pow(x, 0.5) аналогична оператору **, но позволяет задавать третий аргумент для модуля (не применимо к корню).


print(pow(9, 0.5))   # 3.0
print(pow(0.25, 0.5)) # 0.5

вычисление функции в python (вычисление значения функции в python)

Как и в случае с **, работа с отрицательными числами требует дополнительной обработки. Функция pow не даёт преимущества в скорости перед math.sqrt.

Цель: совместимость с кодом, где уже используется pow для других степеней.

Как вычислить квадратный корень для каждого элемента массива?

Для работы со списками или массивами удобно применять numpy.sqrt(). Функция принимает массив и возвращает массив квадратных корней поэлементно.


import numpy as np
arr = np.array([1, 4, 9, 16])
print(np.sqrt(arr))   # [1. 2. 3. 4.]

Python вычисление корня (вычисление квадратного корня в python)

Если массив содержит отрицательные числа, результат будет nan с предупреждением. Для комплексных массивов используйте numpy.emath.sqrt().

Цель: векторные операции, обработка больших объёмов данных, научные вычисления.

Что делать, если нужно извлечь корень из отрицательного числа?

Модуль cmath поддерживает комплексные числа. Функция cmath.sqrt() возвращает комплексное число с мнимой единицей.


import cmath
print(cmath.sqrt(-1))   # 1j
print(cmath.sqrt(-4))   # 2j
print(cmath.sqrt(4))    # (2+0j)

Python формула (написание математических формул в python)

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

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

Как получить квадратный корень с заданной точностью?

Для десятичных чисел высокой точности применяется модуль decimal. Сначала задают контекст с нужным числом знаков, затем используют метод sqrt().


from decimal import Decimal, getcontext
getcontext().prec = 50
x = Decimal('2')
print(x.sqrt())   # 1.4142135623730950488016887242096980785696718753769

решение системы уравнений python (решить систему уравнений в python)

Десятичные операции медленнее вещественных. Требуется явное задание точности. Нельзя напрямую передавать float.

Цель: финансовые расчёты, задачи, где критична точность (например, численное моделирование).

Как написать собственную функцию вычисления квадратного корня?

Для обучения или нестандартных условий можно реализовать метод Ньютона (касательных). Он итеративно уточняет приближение.


def sqrt_newton(n, epsilon=1e-10):
    if n < 0:
        raise ValueError("Отрицательное число")
    guess = n / 2.0
    while True:
        better = (guess + n / guess) / 2
        if abs(guess - better) < epsilon:
            return better
        guess = better

print(sqrt_newton(2))   # 1.4142135623730951

При неправильном начальном приближении или слишком малом epsilon возможна бесконечная итерация. Для целых чисел результат может быть неточным.

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

- площадь python (вычисление площади в python)
- Python вычислить среднее арифметическое (вычисление среднего арифметического в python)
- вычислить значение функции python (вычисление значения функции в python)

Дополнительные примеры и расширенные сценарии

Сравнение производительности math.sqrt и **0.5

Для больших объёмов данных разница может быть существенной. Ниже приведён тест с 10 миллионами итераций.

Пример

import math, time
n = 10_000_000
start = time.time()
for _ in range(n):
    math.sqrt(2)
print('math.sqrt:', time.time() - start)

start = time.time()
for _ in range(n):
    2 ** 0.5
print('**0.5:', time.time() - start)
math.sqrt: 0.83
**0.5: 1.12

Вывод: math.sqrt быстрее примерно на 25% благодаря прямой реализации на C.

Квадратный корень из матрицы с помощью numpy

Функция numpy.sqrt работает не только с векторами, но и с многомерными массивами. Рассмотрим пример с матрицей 3x3.

Пример

import numpy as np
matrix = np.array([[1, 4, 9], [16, 25, 36], [49, 64, 81]])
result = np.sqrt(matrix)
print(result)
[[1. 2. 3.]
 [4. 5. 6.]
 [7. 8. 9.]]

Обработка ошибок при вводе пользователя

Часто возникает необходимость защитить программу от некорректного ввода. Пример с проверкой и использованием math.sqrt.

Пример

import math
def safe_sqrt():
    try:
        num = float(input("Введите число: "))
        if num < 0:
            print("Ошибка: число не может быть отрицательным. Используйте комплексный корень.")
            return
        print("Квадратный корень:", math.sqrt(num))
    except ValueError:
        print("Ошибка: введите числовое значение.")

safe_sqrt()
Введите число: -9
Ошибка: число не может быть отрицательным. Используйте комплексный корень.

Квадратный корень из очень больших чисел с decimal

Для чисел с сотнями знаков после запятой double недостаточно. Используйте Decimal с увеличенной точностью.

Пример

from decimal import Decimal, getcontext
getcontext().prec = 100
big_num = Decimal('2') ** 1000  # 2^1000
sqrt_big = big_num.sqrt()
print(sqrt_big)
113085... (сокращено)

Целочисленный квадратный корень (метод Ньютона для целых)

Полезно, когда требуется только целая часть корня (например, для проверки, является ли число полным квадратом).

Пример

def isqrt(n):
    """Целочисленный квадратный корень (округление вниз)."""
    if n < 0:
        raise ValueError
    if n == 0:
        return 0
    x = n
    y = (x + 1) // 2
    while y < x:
        x = y
        y = (x + n // x) // 2
    return x

print(isqrt(25))    # 5
print(isqrt(26))    # 5 (целая часть корня)
print(isqrt(144))   # 12
5
5
12

Дополнительно:

Модуль math содержит функцию math.isqrt() (Python 3.8+), которая делает то же самое эффективнее.

Использование sqrt с комплексными числами в numpy

Если массив содержит отрицательные числа, обычный numpy.sqrt вернёт nan. Для комплексного результата применяют numpy.emath.sqrt.

Пример

import numpy as np
arr = np.array([-4, 0, 4])
print(np.sqrt(arr))              # [nan, 0., 2.]
print(np.emath.sqrt(arr))        # [0.+2.j, 0.+0.j, 2.+0.j]
[ nan   0.   2.]
[0.+2.j 0.+0.j 2.+0.j]

Все эти примеры показывают гибкость Python при работе с квадратными корнями в различных контекстах.

Вычисление квадратного корня в Python - comments

En
Python вычисление корня (python)