2015-11-18 4 views
2

Я пытаюсь построить бассейны аттракциона Ньютона для полинома z^3-1 с использованием python. Я использую метод Итерации Ньютона-Рафсона для построения графика.Ньютонские бассейны аттракции

До сих пор, я могу построить это: Newton Basin My Plot

То, что я хочу, чтобы создать что-то вроде этого: Required Plot

Может кто-то пожалуйста, подсказывают, как я могу это сделать?


Обновление 1

После того, как в том числе начальные точки (которые я по ошибке опущена): Improved Plot


Update 2

Вот код для Ньютона Петля. Есть ли ошибка в коде, вызывающая медленную работу?

def newtonraphson(z): 
    if z == 0: 
     return False 
    z1 = 0 
    z2 = z 
    tolerance = 1.0e-12 

    while True: 
     z1 = z2 
     z2 = z1 - function(z1)/derivative(z1) 
     if abs((z2 - z1).a) < tolerance: 
      break 

    return z2 
+1

Более подробная информация о проблеме. Можете ли вы показать свой существующий код? Считаете ли вы, что существует определенная проблема, с которой люди могут вам помочь? Или вы не понимаете базовые понятия (которые, вероятно, выходят за рамки переполнения стека)? – Stuart

+0

Как вы выбираете стартовые точки в комплексе самолета? Ваш сюжет выглядит неплохо, вам просто нужно попробовать больше очков, я бы сказал, – Conor

+1

@Conor Я чувствую то же самое, что мне нужно пробовать больше очков.Проблема в том, что когда я пытаюсь опробовать больше очков, загрузка процессора достигает 100%, и мой компьютер начинает отставать и иногда зависает. Сколько времени потребуется для создания такого графика на среднем ПК? –

ответ

1

Участок, который вы получаете, выглядит «о праве», за исключением того, что ему не хватает большего количества очков, и их равномерно распределены.

Как вы выбираете, какие точки замышлять, а какие нет?

В общем, вы хотите решить свое уравнение всего вашего диапазона x s и y s в качестве начальных условий. Чтобы выбрать все начальные x s и y s, вы хотите сделать достаточно маленький шаг для того, чтобы ваш график выглядел красиво (но не настолько мал, что вы теряете время, вычисляя точки, которые в конечном итоге являются частью одного и того же пикселя).

Затем вы хотите перебрать метод Ньютона-Рафсона не на фиксированное число шагов, а до того, как ваше решение будет достаточно близко к z^3-1 == 0 (эквивалентно, до z^3-1 достаточно мало). Таким образом, вы обязательно получите цвет для каждой точки.

EDIT, чтобы ответить на ваш комментарий:

когда я пытаюсь пробовать больше очков, загрузка процессора достигает 100%, и мой компьютер начинает отставать, а иногда нависает

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

+0

Если я это сделаю (верните управление потоку пользовательского интерфейса) или, возможно, используйте sleep() (который я уже пробовал), график занимает много времени. Я пропускаю все точки на шаг 0,1, который завершается примерно через 5-6 секунд. Если я уменьшу шаг до 0,05, он не завершится даже в течение часа! –

+0

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

+1

<< Я передаю все точки на шаг 0,1 >>, вы не замышляете их все. В каких случаях вы не замышляете точку? – jcanizales

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