ValueError: ошибка математического домена


Я просто тестировал пример из численные методы в технике с 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

я сузил его до журнала, так как когда я удаляю журнал и добавляю другую функцию, он работает. Я предполагаю, что это из-за какого-то вмешательства в базу, я не могу понять, как. Может кто-нибудь предложить решение?

1 70

1 ответ:

ваш код делает 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] значение, но, надеюсь, это приведет вас на правильный путь.