2013-04-08 17 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以下です。これは数学的に定義されていないので、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]値がどこから来ている私は推測することができわからないんだけど、うまくいけば、これは正しい軌道に乗ってあなたを導くでしょう。

+0

x [0]、x [1]、x [2]は変数x、y、zで定義されているので、負のログをどのようにしているのか分かりません。ニュートンラフソンが使用します。解くにはこれらの方程式が必要です。 –

+0

また、私は上記のコードでxを定義するとx [2] = 1.0と言っているので、log(1)= 0、atleastは私のものですが、多分私は間違っています.. –

+1

関数の先頭に 'print x'を追加します** f **。方程式ソルバが連続的にxの異なる値を試してエラーを導く方法を知ることができます。 – mtadd

関連する問題