source

math.log에서 ValueError: math domain error가 발생하는 이유는 무엇입니까?

ittop 2023. 7. 21. 21:57
반응형

math.log에서 ValueError: math domain error가 발생하는 이유는 무엇입니까?

저는 파이썬을 사용한 엔지니어링의 수치 방법의 예를 테스트하고 있었습니다.

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 함수를 사용하는 파이썬 산술 도메인 오류math.acospython math domain error - 다음을 사용하는 동등한 문제에 대한 sqrtmath.sqrt.

코드가 다음 작업을 수행하고 있습니다.log0보다 작거나 같은 숫자의.그것은 수학적으로 정의되지 않았다, 그래서 파이썬의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]가치는 여기서 나오지만, 이것이 여러분을 올바른 길로 인도하기를 바랍니다.

다음을 사용할 수도 있습니다.math.log1p.

공식 문서에 따르면:

math.log1p(x)

1+x(기준 e)의 자연 로그를 반환합니다.결과는 0에 가까운 x에 대해 정확한 방식으로 계산됩니다.

다음을 사용하여 원래 값으로 다시 변환할 수 있습니다.math.expm1어느 쪽이 돌아옵니까?ex의 거듭제곱에서 1을 뺀 값으로 올립니다.

로그 함수 내부에 음수를 사용하거나 0 값을 사용하려고 하는 이유 중 하나로 인해 산술 도메인 오류가 발생했습니다.

우리는 사용할 때 이 문제에 직면합니다.log()또는sqrt()부터math도서관.이 "수학 도메인 오류" 문제에서, 우리는 사용해서는 안 되는 (-1 또는 다른)과 같은 음수나 0을 사용하고 있습니다.

여러분은 긍정적이지 않은 것에 대한 로그를 수행하려고 합니다.

로그는 숫자가 주어진 후의 기저값과 그것이 증가된 거듭제곱을 계산합니다.log(0)의 힘으로 끌어올린 것을 의미합니다.2이라0지수는 절대로 다음을 발생시킬 수 없습니다.0즉,log(0)답이 없어서, 그래서 던집니다.math domain error

*참고:0^0을 초래할 수 있습니다.0그러나 또한 결과를 초래할 수 있습니다.1동시에이 문제는 크게 논의되고 있습니다.

언급URL : https://stackoverflow.com/questions/15890503/why-does-math-log-result-in-valueerror-math-domain-error

반응형