RuntimeWarning: недопустимое значение, встречающееся в double_scalars при решении системы уравнений - PullRequest
0 голосов
/ 08 октября 2018

Я знаю, что это повторяющийся вопрос, но я не могу найти ошибку в своем коде, который генерирует эту ошибку.

Я хочу решить систему уравнений следующего вида

Система уравнений

Когда я пытаюсь запустить это на Python с помощью fsolve, я получаю ошибку RuntimeWarning: недопустимое значение, встречающееся в double_scalars .Из других сообщений я понимаю, что это происходит при делении на ноль, но я не могу найти способ решить проблему.

Пожалуйста, дайте мне знать, если есть альтернативная версия для решения этой системы уравнений.Вот код, который я использую со значениями параметров для всех остальных переменных.

    import numpy as np
    from scipy.optimize import fsolve

    class PS3_2:

        def __init__(self, 
                     sigma = 3, 
                     kappa = 4,
                     nu = 4,
                     eta = 1,
                     r = 4,
                     epsilon = 0.05,
                     y0 = 0.001, 
                     beta = 0.99):

            self.sigma, self.kappa, self.nu, self.eta, self.r, self.epsilon, self.y0, self.beta = sigma, kappa, nu, eta, r, epsilon, y0, beta

        def conditions_ss(self, x):
            return np.array([-x[0]**(-self.sigma) + (1+self.r)*self.beta*x[1]**(-self.sigma), 
                             self.eta*x[0]**(-self.sigma) - self.kappa*x[2]**(1/self.nu),
                             (1/2*(self.eta+self.epsilon) + 1/2*(self.eta-self.epsilon))*x[1]**(-self.sigma) - self.kappa*x[3]**(1/self.nu),
                             x[0] + x[1]/(1+self.r) - self.eta*x[2] - ((1/2*(self.eta-self.epsilon)+1/2*(self.eta+self.epsilon))*x[3])/(1+self.r)])

        def solve_ss(self, x0):
            return fsolve(self.conditions_ss, x0)

И в моем основном файле я использую

    from PS3_2_class import PS3_2
    import numpy as np

    ra_model = PS3_2()

    x0 = np.array([4, 0.06, 0.25, 0.25])
    params_1 = ra_model.solve_ss(x0)

и получаю точную ошибку:

    /path/to/PS3_2_class.py:32: RuntimeWarning: invalid value encountered in double_scalars
      return fsolve(self.conditions_ss, x0)
    /path/to/PS3_2_class.py:33: RuntimeWarning: invalid value encountered in double_scalars
...