1. ホーム
  2. python

[解決済み] 警告 <RuntimeWarning: invalid value encountered in sqrt> が表示されるのですが。

2022-02-03 05:43:58

質問

Pythonで二次方程式を実行しようとしています。しかし、警告が出続けています

RuntimeWarning: invalid value encountered in sqrt

以下は私のコードです。

import numpy as np


a = 0.75 + (1.25 - 0.75)*np.random.randn(10000)
print(a)
b = 8 + (12 - 8)*np.random.randn(10000)
print(b)
c = -12 + 2*np.random.randn(10000)
print(c)
x0 = (-b - np.sqrt(b**2 - (4*a*c)))/(2 * a)
print(x0)

解決方法は?

これは100%Pythonに関係することではありません。負の数の平方根を計算することはできません(実数を扱う場合ですが)。

のときの注意事項を何もしていないんですね。 b**2 - (4*a*c) が負の数である。

>>> import numpy as np
>>>
>>> np.sqrt(4)
2.0
>>> np.sqrt(-4)
__main__:1: RuntimeWarning: invalid value encountered in sqrt
nan

負の値を持っているかどうかテストしてみましょう。

>>> import numpy as np
>>> 
>>> a = 0.75 + (1.25 - 0.75) * np.random.randn(10000)
>>> b = 8 + (12 - 8) * np.random.randn(10000)
>>> c = -12 + 2 * np.random.randn(10000)
>>> 
>>> z = b ** 2 - (4 * a * c)
>>> print len([_ for _ in z if _ < 0])
71