我只是在测试来自使用Python的工程数值方法一书中的示例。
from numpy import zeros, array
from math import sin, log
from newtonRaphson2 import *
def f(x):
f = zeros(len(x))
f[0] = sin(x[0]) + x[1]**2 + log(x[2]) - 7.0
f[1] = 3.0*x[0] + 2.0**x[1] - x[2]**3 + 1.0
f[2] = x[0] + x[1] + x[2] -5.0
return f
x = array([1.0, 1.0, 1.0])
print(newtonRaphson2(f,x))
当我运行它时,它显示以下错误:
File "example NR2method.py", line 8, in f
f[0] = sin(x[0]) + x[1]**2 + log(x[2]) - 7.0
ValueError: math domain error
我已经缩小了问题范围,确定是由于日志函数导致的,因为当我删除日志并添加一个不同的函数时,它可以工作。我认为这是由于与基础部分的某种干扰,但我无法弄清楚原因。请问有人能提供解决方案吗?
另请参见:使用math.acos函数出现Python math domain error的等效问题;使用math.sqrt函数出现Python math domain error的等效问题。
print x
语句。这样你就可以看到方程求解器如何逐步尝试不同的x值,从而导致错误。 - mtadd