Ich habe gerade ein Beispiel aus Numerische Methoden in Engineering mit Python getestet.ValueError: Math-Domain-Fehler
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)
Wenn ich es laufen, es wird folgende Fehler zeigt:
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
ich es verengt haben in das Protokoll nach unten, wie wenn ich log entfernen und eine andere Funktion hinzuzufügen, es funktioniert. Ich nehme an, dass es wegen einer Art Störung der Basis ist, ich kann nicht herausfinden, wie. Kann jemand eine Lösung vorschlagen?
Ich sehe nicht, wie es ein negatives Protokoll macht, da die Definition den Satz von Gleichungen definiert, das heißt x [0], x [1] und x [2] sind Variablen x, y und z die Newton Raphson verwendet. Es braucht diese Gleichungen, um zu lösen. –
Also, wie ich x [2] = 1.0 sage, wenn ich x im obigen Code definiere, log (1) = 0, zumindest was ich tue, vielleicht bin ich falsch .. Danke für die Hilfe aber .. –
füge ein "print x" am Anfang deiner Funktion hinzu ** f **. Sie werden sehen, wie der Gleichungslöser nacheinander verschiedene Werte von x ausprobiert, was zu Ihrem Fehler führt. – mtadd