Stavo testando un esempio da Metodi numerici in ingegneria con Python.ValueError: errore del dominio matematico
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)
quando l'eseguo, mostra il seguente errore:
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
ho ristretto la scelta per il registro come quando rimuovo registro e aggiungi una funzione diversa, funziona. Presumo che sia a causa di una sorta di interferenza con la base, non riesco a capire come. Qualcuno può suggerire una soluzione?
Non vedo come sta facendo un log negativo poiché la definizione sta definendo l'insieme di equazioni, cioè x [0], x [1] e x [2] sono variabili x, yez che Newton Raphson utilizza. Ha bisogno di queste serie di equazioni da risolvere. –
Inoltre, come sto dicendo x [2] = 1.0 quando definisco x nel codice sopra, log (1) = 0, atleast è quello che penso, forse ho torto .. Grazie per l'aiuto però .. –
aggiungi un 'print x' all'inizio della tua funzione ** f **. Vedrai come il risolutore dell'equazione prova successivamente diversi valori di x, portando al tuo errore. – mtadd