Перейти к содержимому

Как записать корень 3 степени в питоне

  • автор:

Как извлечь кубический корень как можно точнее?

Популярный способ извлечь кубический корень из вещественного числа такой: x ** (1 / 3) . Но он не самый точный: 19683 ** (1 / 3) -> 26.999999999999996 , хотя для обратной функции 27 ** 3 == 19683 . Налицо неточность. И да, я знаю что вещественные числа считают приближенно. Как извлечь корень кубический максимально точно?

Отслеживать
3,388 2 2 золотых знака 10 10 серебряных знаков 28 28 бронзовых знаков
задан 4 мар 2022 в 16:57
Stanislav Volodarskiy Stanislav Volodarskiy
31k 3 3 золотых знака 19 19 серебряных знаков 55 55 бронзовых знаков

Кажется, для этого придётся искать какие-то специальные математические библиотеки. Число 1/3 невозможно представить в виде конечной десятичной дроби (поэтому использовать decimal не годится), а результат извлечения корня в общем случае не обязательно окажется рациональным числом

4 мар 2022 в 17:09

@andreymal , двоичный поиск для кубической функции должен выдать самый точный представимый результат. Не так ли?

4 мар 2022 в 17:11

3 ответа 3

Сортировка: Сброс на вариант по умолчанию

Ну вот такая есть библиотека, например:

import gmpy2 print(gmpy2.root(19683, 3)) 

Отслеживать
ответ дан 5 мар 2022 в 7:21
69.4k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак

Может стоит попробовать numpy ? Эта библиотека, вроде, куда точнее проводит вычисления. Информацию взял отсюда

Пример

Код

import numpy as np cubes = [125, -64, 27, -8, 1] cube_roots = np.cbrt(cubes) print(cube_roots) 

Вывод

[ 5. -4. 3. -2. 1.] 

Отслеживать
ответ дан 4 мар 2022 в 17:03
2,816 2 2 золотых знака 16 16 серебряных знаков 57 57 бронзовых знаков
На примере из вопроса numpy даёт точно такой же неточный результат 26.999999999999996
4 мар 2022 в 17:04

@andreymal, извиняюсь, безрассудную теорию предложил. Проверить сам не успеваю, т.к. на завтра праздничную программу готовлю XD

4 мар 2022 в 17:10

Даже если использовать максимально точный вещественный тип np.float128 , всё-равно точно 27 в numpy никак не получится.

5 мар 2022 в 7:22

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

import struct from fractions import Fraction def difference(float_expected, float_root, degree): ''' Возвращает разницу между степенью корня и ожидаемым значением ''' fraction_expected = Fraction.from_float(float_expected) fraction_root = Fraction.from_float(float_root) return abs(fraction_expected - fraction_root ** degree) def ternary_search(lower_bound, upper_bound, function): ''' Находит целое значение x из промежутка [lower_bound, upper_bound), для которого значение function(x) минимально ''' while lower_bound + 3 < upper_bound: mid1 = (lower_bound * 2 + upper_bound) // 3 mid2 = (lower_bound + upper_bound * 2) // 3 res1 = function(mid1) res2 = function(mid2) if res1 < res2: upper_bound = mid2 else: lower_bound = mid1 return min(range(lower_bound, upper_bound), key=function) def create_float(exponent, mantissa): ''' Создает число binary64 IEEE-754 по экспоненте и мантиссе ''' number = (exponent  

Как извлечь кубический корень в Python

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

Кубический корень обозначается символом «3√». В случае с квадратным корнем мы использовали только символ ‘√’ без указания степени, который также называется радикалом.

Например, кубический корень из 125, обозначаемый как 3√125, равен 5, так как при умножении 5 на само себя три раза получается 5 x 5 x 5 = 125 = 5^3.

Кубический корень в Python

Чтобы вычислить кубический корень в Python, используйте простое математическое выражение x ** (1. / 3.), результатом которого является кубический корень из x в виде значения с плавающей точкой. Для проверки, корректно ли произведена операция извлечения корня, округлите полученный результат до ближайшего целого числа и возведите его в третью степень, после сравните, равен ли результат x.

Извлечение корня в Python

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

Если мы знаем только общую площадь квадрата и хотим узнать размер одной его стороны либо же собираемся рассчитать расстояние между 2-мя точками в декартовых координатах, нам потребуется квадратный корень. Это не проблема, если речь идет о математике. Но что делать, когда речь идет о языке программирования? К нашему счастью разработчики Python предусмотрели для решения вышеописанной задачи специальную функцию. Но прежде чем продолжить, давайте немного вспомним теорию.

Квадратный корень — что это?

Квадратным корнем, полученным из числа «A», называют число «B», которое при возведении во 2-ю степень даст в итоге то самое изначальное число «A».

Непосредственную операцию, позволяющую найти значение «B», называют извлечением корня из «A». Математики применяют для обозначения этой операции специальный знак (его еще называют знаком радикала):

Когда речь идет о корне в «Питоне», ситуация обстоит иначе, причем в обоих случаях. К примеру, само возведение числа в степень записывают посредством оператора «**«:

Ответ в консоли «Пайтона» будет равняться четырем.

Касаемо квадратного корня, то он в Python представлен функцией sqrt(). Однако она существует не сама по себе, а в рамках соответствующего математического модуля math. Таким образом, перед началом работы этот модуль надо будет импортировать, но это абсолютно не сложно сделать на практике:

import math

Идем дальше. Наша функция sqrt() принимает лишь один параметр – значение, из которого нам надо извлечь . Давайте напишем простенький код и задействуем float в качестве типа данных возвращаемого значения.

import math

import random

# попробуем функцию sqrt() на практике

# найдем корень случайного числа с последующим выводом его на экран

rand_num = random.randint(5, 55)

print('Наше случайное число = ', rand_num)

print('Искомое значение корня = ', sqrt_rand_num)

Вы можете попробовать работу этого кода у себя на компьютере или на любом онлайн-компиляторе. Вот, к примеру, компилятор для Python 3 .

Результат может быть таким:

Извлечение корня в Python

Извлечение корня в Python

Так как мы используем модуль random, результат будет различаться при каждом выполнении кода.

Но никто не мешает сделать все намного проще:

Извлечение корня в Python

Положительные числа

Функция sqrt() предназначена для работы с положительными значениями. Если число больше либо равно нулю, то неважно, какой тип данных у него, ведь извлечение корня возможно как из целых, так и из вещественных чисел.

Из целых:

Из вещественных:

Сомневаетесь в корректности итоговых результатов предыдущего примера? Просто выполните обратное возведение в степень:

Также не забывайте, что сделать это можно и посредством специальной функции pow:

Отрицательные значения и ноль

Функция sqrt в «Питоне» — вещь полезная и знать ее нужно, однако она не принимает отрицательного числа — лишь положительные (целые и вещественные), а также ноль.

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

Учитывайте вышесказанное, если пытаетесь извлекать корни в Python посредством этой функции. Передав отрицательное значение, вы получите error:

Извлечение корня в Python

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

Хотите знать о «Питоне» намного больше? Добро пожаловать на специализированный курс в «Отус»!

Извлечение корня в Python

  • http://python-teach.ru/python-dlya-nachinayushhih/vychislenie-kvadratnogo-kornya-chisla-v-python/.

Извлечение корней в Python

Под извлечением корня из какого-либо числа чаще всего подразумевают нахождение решение уравнения x в степени n = value, соответственно для квадратного корня, число n — это два, для кубического — 3. Чаще всего под результатом и числом подразумеваются вещественные числа.

В программировании нахождение корней используется очень часто. Разберемся, как и какими методами можно эффективно извлекать корни из числа. Вначале рассмотрим, какие способы есть в Python, и определим самый эффективный. Потом более подробно разберём, как можно найти не только квадратный корень из числа, но и кубический, и потом корень n степени.

Способы извлечения корня

В языке программирования Python 3 существует три способа извлечения корней:

  • Использование функции sqrt из стандартной математической библиотеки math.
  • Операция возведения в степень **
  • Применение функции pow(x, n)

Чтобы воспользоваться первым способом, необходимо вначале импортировать sqrt из модуля math. Это делается с помощью ключевого слова import: from math import sqrt . При помощи этой функции можно извлекать только квадратный корень из числа. Приведем пример:

from math import sqrt x = sqrt(4) print(x) 2.0

Если же нам нужно вычислить в Python корень квадратный из суммы квадратов, то можно воспользоваться функцией hypot из модуля math. Берется сумма квадратов аргументов функции, из нее получается корень. Аргументов у функции два.

from math import hypot x = hypot(4,3) print(x) 5.0

Еще одним, чуть более универсальным методом, будет использование возведения в степень. Известно, что для того, чтобы взять корень n из числа, необходимо возвести его в степень 1/n. Соответственно, извлечение квадратного корня из числа 4 будет выглядеть так:

n = 2 x = 4**(1./n) print(x) 2.0

Обратите внимание, что в Python 2 необходимо ставить точку после единицы, иначе произойдет целочисленное деление, и 1/n == 0, а не нужной нам дроби. В Python 3 можно не ставить точку.

Последний метод использует функцию pow(value, n). Эта функция в качестве аргумента value возьмет число, которое необходимо возвести в степень, а второй аргумент будет отвечать за степень числа. Как и в предыдущем методе, необходимо использовать дробь, для того, чтобы получить корень числа.

x = pow(4, 0.5) print(x) 2.0

Какой метод быстрее?

Для того, чтобы определить какой же метод предпочтительнее использовать, напишем программу. Замерять время выполнения будем с помощью метода monotonic библиотеки time.

from time import monotonic from math import sqrt iterations = 1000000 start = monotonic() for a in range(iterations): x = sqrt(4) print("sqrt time: .3f>".format(monotonic() - start) + " seconds") start = monotonic() for a in range(iterations): x = 4 ** 0.5 print("** time: .3f>".format(monotonic() - start) + " seconds") start = monotonic() for a in range(iterations): x = pow(4, 0.5) print("pow time: .3f>".format(monotonic() - start) + " seconds") sqrt time: 0.266 seconds ** time: 0.109 seconds pow time: 0.453 seconds

Как видно, самое быстрое решение — использовать **. На втором месте метод sqrt, а pow — самый медленный. Правда, метод sqrt наиболее нагляден при вычислении в Python квадратных корней.

Таким образом, если критична скорость, то используем **. Если скорость не критична, а важна читаемость кода, то следует использовать sqrt.

Квадратный корень

Для извлечения квадратного корня самым наглядным способом, правда не самым быстрым, будет использование sqrt из модуля math.

from math import sqrt x = sqrt (value)

Но можно использовать и трюки с возведением в степень 1/2, что тоже будет приводить к нужному результату.

x = value ** (0.5) или x = pow(value, 0.5) .

Кубический корень

Для извлечения кубического корня в Python 3 метод sqrt не подойдет, поэтому воспользуйтесь возведением в степень 1/3:

x = value ** (1./3) или x=pow(value, 1/3) .

Корень n-степени

Корень n-степени из числа в Python извлекается можно получить двумя способами с помощью возведения в степень 1.0/n:

  • С помощью оператора **.
  • Используя функцию pow.

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

n = 4. x = 16.0 ** (1./n) print(x) x = pow(16.0, 1./n) print(x) 2.0 2.0

Корень отрицательного числа

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

from math import sqrt x = sqrt(-4) File "main.py", line 2, in x = sqrt(-4) ValueError: math domain error

Как видим, функция sqrt выдаёт исключение.

Теперь посмотрим, что будет при использовании других методов.

x = -4 ** 0.5 print(x) x = pow(-4, 0.5) print(x) -2.0 (1.2246467991473532e-16+2j)

Как видно из результата, оператор ** не выдает исключения и возвращает некорректный результат. Функция pow работает корректно. В результате получаем комплексное число 2j, что является верным.

Вывод

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

Все эти методы имеют свои преимущества и недостатки. Самый наглядный это sqrt, но подходит только для квадратный корней из числа. Остальные методы не такие элегантные, но легко могут извлечь корень нужной степени из числа. Кроме того оператор ** оказался наиболее быстрым при тестировании.

Необходимо также помнить про целочисленное деление, неправильное использование которого может приводить к ошибке в вычислении.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *