Форум программистов, компьютерный форум, киберфорум
Алгоритмы
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.72/25: Рейтинг темы: голосов - 25, средняя оценка - 4.72
5 / 5 / 0
Регистрация: 04.05.2019
Сообщений: 32

Метод Ньютона для извлечения корня

08.05.2019, 17:20. Показов 5169. Ответов 1

Студворк — интернет-сервис помощи студентам
Вначале использовал бисекцию, но решил перейти на метод ньютона, ибо он вроде быстрее, но...

Может я совсем не понял его, но методом Ньютона получается не корень, а какой-то бред.
Ну вот например нужен корень 5ой степени из 32:
f(xi)/f'(xi) будет (x^(1/n))/((x^(1/n))')=n*x, значит равно 5x
Начальное приближение пусть будет 1
Тогда выходит что xi+1=1-5*1=-4
xi+2=-4+20=16
xi+3=16-80=64
и вот что-то мы всё отдаляемся и отдаляемся от корня (и получается что этим методом находится только один корень??, это как вообще?)

Вот и как нам тогда выбирать это приближение и понять что пора прекратить (ибо каждый раз возводить в степень не вариант, ибо это будет не лучше бисекции, которая даёт результат невероятно долго)? Да и как вообще пользоваться этим методом?

Сссылка на мою основную проблему, где есть код и условие: Алгоритм быстрого извлечения корня (длинная арифметика)

Основывался на этом: http://www.e-maxx-ru.1gb.ru/algo/roots_newton
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.05.2019, 17:20
Ответы с готовыми решениями:

Метод Ньютона для извлечения корня
Разработать метод, позволяющий вычислять корень n-ой степени из числа методом Ньютона с заданной точностью.Я понимаю как работает метод...

Написать функцию, использующую метод Ньютона для вычисления квадратного корня
Написать функцию, использующую метод Ньютона для вычисления квадратного корня. Метод Ньютона вычисления квадратного корня из числа x...

Программа для извлечения корня
Здравствуйте, помогите пожалуйста с программой для извлечения корня с любым натуральным показателем K их положительного числа X c заданной...

1
Эксперт С++
 Аватар для grizlik78
2382 / 1666 / 279
Регистрация: 29.05.2011
Сообщений: 3,402
08.05.2019, 21:36
Лучший ответ Сообщение было отмечено Clagron как решение

Решение

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

Добавлено через 43 минуты
Ну и чтобы всё в одном месте попробую описать метод Ньютона применительно к нахождению корня n-й степени.
Итак, задача состоит в том, чтобы вычислить x как корень n-й степени из числа a:

https://www.cyberforum.ru/cgi-bin/latex.cgi?x = \sqrt[n]{a}.

Эту задачу можно сформулировать как поиск решения следующего уравнения:

https://www.cyberforum.ru/cgi-bin/latex.cgi?x^n = a.

Метод Ньютона позволяет найти решение уравнения

https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) = 0,

поэтому наше уравнение можно переписать как

https://www.cyberforum.ru/cgi-bin/latex.cgi?a - x^n = 0,

откуда

https://www.cyberforum.ru/cgi-bin/latex.cgi?f(x) = a - x^n.

Поиск решения по методу Ньютона заключается в многократном применении итерационной формулы

https://www.cyberforum.ru/cgi-bin/latex.cgi?x_{i+1} = x_i - \frac{f(x_i)}{f'(x_i)}.

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

https://www.cyberforum.ru/cgi-bin/latex.cgi?x_{i+1} = \frac{1}{n}\left( (n-1)x_i + \frac{a}{x_i^{n-1}}\right).

Осталось выбрать начальное приближение, с которого начинать поиск. Для данной задачи, если a > 1, то выгоднее начинать поиск с числа несколько большего, чем истинное решение, нежели с несколько меньшего. Поэтому я предлагаю следующий метод, который несложно реализовать программно.
В качестве начального приближения возьмём минимальную степень двойки, которая при возведении в степень n будет больше заданного числа.

https://www.cyberforum.ru/cgi-bin/latex.cgi?x_0 = (2^k)^n \ge a.

То есть начинаем с x0 = 1 и умножаем его на 2 до тех пор, пока x0n не станет больше или равнымa.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.05.2019, 21:36
Помогаю со студенческими работами здесь

Найти значение квадратного корня, метод Ньютона
Задание на скриншоте Помогите, пожалуйста, решить это в Fortran

Алгоритм для извлечения квадратного корня x из вещественного числа y
Составить блок-схему алгоритма для вычисления квадратного корня x из вещественного числа y. Примечание. Вычисление квадратного корня...

Определить функцию для извлечения квадратного корня из эдементов массива
Это всё одно задание ... -.- 1)Определить функцию для извлечения квадратного корня из элементов массива целых чисел. 2)Перегрузите...

Необходимо составить программу для извлечения точного квадратного корня из n-разрядного числа (n > 40)
Прошу помощи в составлении программы для извлечения точного квадратного корня из n-разрядного числа (n > 40).

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
Установка Emscripten SDK (emsdk) и CMake на Windows для сборки C и C++ приложений в WebAssembly (Wasm)
8Observer8 30.01.2026
Чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. Система контроля версиями Git. . .
Подключение Box2D v3 к SDL3 для Android: физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
Влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru