2013-04-08 4 views
64

예를 들어 에서 예제를 테스트했습니다. Python을 사용하는 공학의 수치 방법. ValueError : 수학 영역 오류

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 

을, 그것을 작동합니다. 나는 그것이 기지와 어떤 종류의 간섭 때문에 있다고 생각한다. 나는 그 방법을 알 수 없다. 누구든지 해결책을 제안 할 수 있습니까?

답변

79

코드에서 log의 숫자가 0보다 작거나 같습니다. 이것은 수학적으로 정의되지 않았기 때문에 파이썬의 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] 값이 어디에서 오는 추측 할 수 모르겠지만, 희망이 바른 길에 당신을 이끌 것입니다.

+0

정의가 방정식 집합, 즉 x [0], x [1] 및 x [2]가 변수 x, y 및 z를 정의하므로 부정 로그를 수행하는 방법을 알지 못합니다. Newton Raphson이 (가) 사용합니다. 해결할 수있는 방정식 세트가 필요합니다. –

+0

또한, 위의 코드에서 x를 정의 할 때 x [2] = 1.0이라고 말하면서 log (1) = 0이 atleast인데 어쨌든 제가 잘못 생각한 것입니다 .. 도움을 주셔서 감사합니다. –

+1

함수의 처음에'print x'를 추가하십시오 ** f **. 방정식 해법이 x의 다른 값을 연속적으로 시도하여 오류를 일으키는 지 확인하게됩니다. – mtadd