Как добавить последовательность Aitken в мой алгоритм поиска корня - PullRequest
0 голосов
/ 05 ноября 2019
from numpy import log as ln                 
def g(x):
    return ln(4+x-x**2)

def FixedPoint(p0,tolerance):                     
    p = g(p0)                                
    abs_error = abs(p-p0)                    
    p0 = p                          
    while abs_error>=tolerance:                 
        p = g(p0)                                
        abs_error = abs(p-p0)                    
        p0 = p                                   
    return p

starting_point = 2
tolerance = 10**-10
fixed_point = FixedPoint(starting_point,tolerance)

print('Fixed-point of g(x) = {0} is x = {1:.7f}'.format(formula,fixed_point))

Итак, у меня есть этот алгоритм поиска корня с фиксированной точкой для нахождения корня ln (4 + xx ^ 2), как мне добавить программу последовательности aitken для увеличения скорости сходимости нахождения корня ln(4 + хх ^ 2). У меня проблемы с сохранением значения каждой итерации.

1 Ответ

1 голос
/ 05 ноября 2019

Я бы уменьшил количество строк в итерации с фиксированной точкой с помощью

def FixedPoint(p0,tolerance):                     
    p1 = g(p0)                                
    while abs(p1-p0)>=tolerance:                 
        p0,p1 = p1,g(p1) 
        print(p0)                               
    return p1

Для этого требуется 29 оценок g для данного теста

Дельта-квадрат АйткенаПроцесс может быть реализован как

def FixedPointAitken(p0,tolerance):                     
    while True:                 
        p1=g(p0); p2=g(p1);   
        print(p0,p1,p2)
        if abs(p1-p0)<tolerance: break
        p0 = p0 - (p1-p0)**2/(p0+p2-2*p1) 
    return p0

. Для достижения точности цели требуется 5 шагов с 15 оценками g.

...