Python invalid value encountered in log

Доброго времени суток.

Сегодня пришла идея навесить ограничения на свою формулу отрисовки графика, но столкнулся с проблемой:

RuntimeWarning: invalid value encountered in log y = numpy.log(numpy.log(c*x+d)/numpy.log(b))/numpy.log(a)

введите сюда описание изображения

Хотя график отрисовывается, как на мой взгляд правильно. введите сюда описание изображения

Мой код на Python

import matplotlib.pyplot
import numpy
import math
import csv

with open("test.tsv") as tsvfile: # безопасное открытие файла (выполнится в любом случае и закроется файл)
    tsvreader = csv.reader(tsvfile, delimiter="\t")
    data =[list(map(int, row)) for row in tsvreader]
 
x = numpy.arange(-10.0, 10.1, 0.01) # задаются параметры интервала с шагом
for a, b, c, d in data:
    y = numpy.log(numpy.log(c*x+d)/numpy.log(b))/numpy.log(a)
    matplotlib.pyplot.plot(x, y, label = f'a = {a}, b = {b}, c = {c}, d = {d}') # функция создания графика
 
matplotlib.pyplot.xlabel(r'Ось OX',fontsize = '14' ,color = 'r') # устанавливает подпись оси х
matplotlib.pyplot.ylabel(r'Ось OY',fontsize = '14' , color = 'b') # устанавливает подпись оси у
matplotlib.pyplot.title(r'$y = log_alog_b(cx+d)$' ,fontsize = '14' , color = 'g')
matplotlib.pyplot.legend() # добавление легенды
matplotlib.pyplot.show() # отображение окна с графиком

Вот моя функция введите сюда описание изображения


Ответы (1 шт):

Автор решения: MaxU

Эта ошибка возникает если передать np.log(arg) отрицательное значение в качестве аргумента.

И действительно, трудно придумать такое число x при возведении np.e (2.71828) в которое (2.71828x) мы бы получили отрицательное число!

Воспроизведение ошибки:

In [48]: np.log(-1)
/opt/anaconda3/envs/ml/bin/ipython:1: RuntimeWarning: invalid value encountered in log
Out[48]: nan
→ Ссылка