我只是在用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
我已经将它缩小到log,因为当我删除log并添加不同的函数时,它可以工作。我猜是因为基地受到了某种干扰,我不知道是怎么回事。有人能给出一个解决方案吗?
发布于 2013-04-09 07:06:47
您的代码正在对一个小于或等于零的数字执行log
。这在数学上是未定义的,所以Python的log
函数会引发一个异常。下面是一个例子:
>>> from math import log
>>> log(-1)
Traceback (most recent call last):
File "<pyshell#59>", line 1, in <module>
log(-1)
ValueError: math domain error
在不知道newtonRaphson2
函数的作用的情况下,我不确定我能猜出无效的x[2]
值来自哪里,但希望这将引导您走上正确的道路。
发布于 2020-06-24 00:37:20
你得到数学域错误的原因之一:你试图在log函数中使用一个负数或一个零值。
发布于 2019-07-02 05:54:38
您正在尝试对非正数的东西进行对数运算。
对数在被给定一个数字和它的幂之后计算出底数。log(0)
意味着提升到2
的能力的东西是0
。指数永远不会导致0
*,这意味着log(0)
没有答案,因此抛出math domain error
这个问题引起了激烈的争论。
https://stackoverflow.com/questions/15890503
复制相似问题