1. ホーム
  2. python

[解決済み] ValueError: 計算領域エラー

2022-09-06 04:22:57

質問

の例をテストしていたところです。 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

logを削除して別の機能を追加すると動作するので、logに絞りました。ベースと何らかの干渉があるためだと思うのですが、方法がわかりません。どなたか解決策を提案していただけませんか?

どのように解決するのですか?

あなたのコードでは 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] の値がどこから来ているのかを推測することはできませんが、これが正しい方向に導いてくれることを願っています。