2013-05-12 3 views
1

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

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

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

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

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

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

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

ответ

0

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

+0

Это не домашнее задание, это мои исследования Я не хочу, чтобы кто-то писал мой код или что-то еще. Я прошу совета! se scipy solve: D, потому что этот код более сложный. Он использует многомерный метод Ньютона (обобщение метода Ньютона) для ряда точек сетки более 100, чтобы решить вторую степень нелинейных уравнений с двумя граничными условиями. Я спрашиваю, знает ли кто-нибудь способ реализовать метод bidection в этом коде, в конечном счете, имея лучшую конвергенцию, или если он или он знает другой метод, который я мог бы использовать. спасибо вам все равно ... – user1640255

+0

Точка, которую я пытаюсь сделать, проста: не утруждайте себя внедрением собственных решателей, если это абсолютно необходимо (читай: если доступные решения не исчерпаны). –

+0

Женя, код не работает, потому что он не может сходиться! только в конкретных данных, которые имеют «нормальный» расчет u. Но для других импортированных данных, в которых u на конце должен быть изогнутым и плоским, Newton m. не сходится! Я прошу помощи или совета для перепропуска этой проблемы. Если проблема была в FORTRAN, я бы использовал http://www.mpi-hd.mpg.de/astrophysik/HEA/internal/Numerical_Recipes/f9-4.pdf модуль RTSAFE в N измерениях. Вопрос не в том, нужно ли это делать. Я должен это сделать! Вопрос в том, может ли многомерный метод бисекции работать в этом коде! – user1640255

Смежные вопросы