首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在我的寻根算法中添加Aitken序列

如何在我的寻根算法中添加Aitken序列
EN

Stack Overflow用户
提问于 2019-11-05 18:19:58
回答 1查看 348关注 0票数 0
代码语言:javascript
复制
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+x-x^2)的根,我如何添加aitken序列程序来提高求ln(4+x-x^2)根的收敛速度。我在保持每次迭代的值时遇到了麻烦。

EN

回答 1

Stack Overflow用户

发布于 2019-11-05 20:25:47

我将通过以下方式减少定点迭代中的行数

代码语言:javascript
复制
def FixedPoint(p0,tolerance):                     
    p1 = g(p0)                                
    while abs(p1-p0)>=tolerance:                 
        p0,p1 = p1,g(p1) 
        print(p0)                               
    return p1

对于给定的测试用例,这需要29次g评估

Aitken增量平方过程可以实现为

代码语言:javascript
复制
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个步骤,对g进行15次评估才能达到目标精度。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58709213

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档