Właśnie testowałem przykład z Metody numeryczne w inżynierii z Pythonem.ValueError: błąd dziedziny matematyki
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)
Kiedy go uruchomić, to pokazuje następujący błąd:
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
mam zmniejszyła go do dziennika jako dziennika kiedy usunąć i dodać inną funkcję, to działa. Zakładam, że dzieje się tak z powodu jakiejś ingerencji w bazę, nie wiem jak. Czy ktoś może zaproponować rozwiązanie?
Nie widzę sposobu wykonywania logu ujemnego, ponieważ definicja definiuje zbiór równań, tj. X [0], x [1] i x [2] to zmienne x, yiz, które Używa Newton Raphson. Ten układ równań wymaga rozwiązania. –
Również, jak mówię x [2] = 1.0, kiedy definiuję x w powyższym kodzie, log (1) = 0, przynajmniej tak myślę, może się mylę .. Dzięki za pomoc chociaż .. –
dodaj 'print x' na początku swojej funkcji ** f **. Dowiesz się, jak solver sukcesywnie próbuje różnych wartości x, prowadząc do twojego błędu. – mtadd