首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >ValueError:数学域错误

ValueError:数学域错误
EN

Stack Overflow用户
提问于 2013-04-09 06:58:46
回答 3查看 392.3K关注 0票数 118

我只是在用Python测试工程中数值方法的一个例子。

代码语言:javascript
复制
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)

当我运行它时,它显示以下错误:

代码语言:javascript
复制
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并添加不同的函数时,它可以工作。我猜是因为基地受到了某种干扰,我不知道是怎么回事。有人能给出一个解决方案吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-09 07:06:47

您的代码正在对一个小于或等于零的数字执行log。这在数学上是未定义的,所以Python的log函数会引发一个异常。下面是一个例子:

代码语言:javascript
复制
>>> 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]值来自哪里,但希望这将引导您走上正确的道路。

票数 155
EN

Stack Overflow用户

发布于 2020-06-24 00:37:20

你得到数学域错误的原因之一:你试图在log函数中使用一个负数或一个零值。

票数 3
EN

Stack Overflow用户

发布于 2019-07-02 05:54:38

您正在尝试对非正数的东西进行对数运算。

对数在被给定一个数字和它的幂之后计算出底数。log(0)意味着提升到2的能力的东西是0。指数永远不会导致0*,这意味着log(0)没有答案,因此抛出math domain error

这个问题引起了激烈的争论。

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

https://stackoverflow.com/questions/15890503

复制
相关文章

相似问题

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