Улучшенный метод Ньютона с использованием метода деления пополам в Python.

Я написал код, который решает систему нелинейных уравнений 2-го порядка в большой размерности (i = 0, N) с помощью метода Ньютона (Jacobian N+1 * N+1) с двумя граничными условиями.

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

согласно этому источнику: http://ursa.as.arizona.edu/~rad/phys305/root_finding/node4.html

Усовершенствованная схема нахождения корня состоит в объединении метода деления пополам и метода Ньютона-Рафсона. Метод деления пополам гарантирует корень (или сингулярность) и используется для ограничения изменений положения, оцениваемого методом Ньютона-Рафсона, когда линейное предположение плохо. Однако шаги Ньютона-Рафсона предпринимаются в почти линейном режиме для ускорения сходимости.

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

... возможно ли это сделать в Python в N-мерной задаче?

Модуль Rtsafe FORTRAN в многомерном формате может сделать это, и может у Matlab есть аналогичный модуль...


person user1640255    schedule 12.05.2013    source источник


Ответы (1)


Если это не домашнее задание, лучше использовать решатели от scipy. Для многомерной задачи взгляните на fsolve (в котором используется модифицированный метод Ньютона-Рафсона).

person ev-br    schedule 12.05.2013
comment
Это не домашнее задание, это мое исследование. Я не хочу, чтобы кто-то писал мой код или что-то еще. Прошу совета! Я не могу использовать scipysolve: D, потому что этот код сложнее. Он использует многомерный метод Ньютона (обобщение метода Ньютона) для числа узлов сетки более 100 для решения нелинейных уравнений 2-й степени с 2 граничными условиями. Я спрашиваю, знает ли кто-нибудь способ реализации метода биекции в этом коде, в конечном итоге обеспечивающего лучшую сходимость, или знает ли он или он другой метод, который я мог бы использовать. в любом случае, спасибо... - person user1640255; 12.05.2013
comment
Суть, которую я пытаюсь донести, проста: не утруждайте себя реализацией собственных решателей без крайней необходимости (читай: если доступные решения не исчерпаны). - person ev-br; 12.05.2013
comment
Женя, код не работает, так как не сходится! только в конкретных данных, которые имеют нормальные расчетные u. Но для других импортированных данных, в которых буква u на конце должна быть изогнутой и плоской, Ньютон m. не сходится! Прошу помощи или совета для пропуска этого вопроса. Если бы проблема была в FORTRAN, я бы использовал mpi-hd.mpg.de/astrophysik/HEA/internal/Numerical_Recipes/ модуль RTSAFE в N измерениях. Вопрос не в том, нужно ли это делать. Я должен сделать это! Вопрос в том, может ли многомерный метод деления пополам работать в качестве реализации этого кода! - person user1640255; 12.05.2013
comment
если вы хотите просто реализовать какой-то метод из числовых рецептов, которые вы продолжаете связывать, какой именно вопрос вы задаете? - person ev-br; 12.05.2013