首页 > 解决方案 > Halley 方法的 Python 代码返回给定精度的错误

问题描述

我正在尝试为哈雷方法编写代码来解决开普勒方程

x 的初始近似值是 M,我必须找到所需的迭代次数,直到达到所需的 10e-12 精度。

代码如下:

h = 0.000000000001

import numpy as np

eps = 0.0000000000001
e = np.linspace(0, 1, 100)
M = np.linspace(0, np.pi, 100)

def f(x):
    return x - e*np.sin(x) - M

def fp(x):
    global h
    return (f(x + h) - f(x)) / h

def fpp(x):
    global h
    return (fp(x + h) - fp(x)) / h

x = M

while True:
    fx = f(x)
    fpx = fp(x)
    xnew = x - (2.0 * fx * fpx) / (2.0 * fpx * fpx - fx * fpp(x))
    print (xnew)
    if abs(xnew - x) >= eps: break
    x = xnew

这将返回一个错误:

if abs(xnew - x) >= eps: break
ValueError: 具有多个元素的数组的真值不明确。使用 a.any() 或 a.all()

我也不明白如何找出while循环内的迭代次数,直到达到所需的精度

标签: python

解决方案


推荐阅读