【发布时间】:2013-05-15 01:54:36
【问题描述】:
以下内容来自维基百科文章Newton's method的伪代码:
#! /usr/bin/env python3
# https://en.wikipedia.org/wiki/Newton's_method
import sys
x0 = 1
f = lambda x: x ** 2 - 2
fprime = lambda x: 2 * x
tolerance = 1e-10
epsilon = sys.float_info.epsilon
maxIterations = 20
for i in range(maxIterations):
denominator = fprime(x0)
if abs(denominator) < epsilon:
print('WARNING: Denominator is too small')
break
newtonX = x0 - f(x0) / denominator
if abs(newtonX - x0) < tolerance:
print('The root is', newtonX)
break
x0 = newtonX
else:
print('WARNING: Not able to find solution within the desired tolerance of', tolerance)
print('The last computed approximate root was', newtonX)
问题
在 Python 3.x 中给定某种形式的 f,是否有一种自动计算某种形式的 fprime 的方法?
【问题讨论】:
-
不直接回答,但最好将其保存为列表,例如
x**2 -2 = [1,0,-2]2x将是[0,2,0] -
对于
f的一些种形式,您可以轻松自动计算出f'的对应形式。例如,如果您将多项式表示为系数列表(或映射exponent -> coefficient),则可以轻松计算导数。您可以超越这一点并包括其他基本功能,但一般情况下的答案是否定的。但是您可以使用泰勒展开式和仅f的值来近似任何给定点的导数。 -
感谢 Beasley 和 Fischer 提供帮助的 cmets。另一个问题被证明是有用的:stackoverflow.com/questions/11155367
标签: python math python-3.x solver newtons-method