Есть ли какой-нибудь способ предотвратить решение проблемы с помощью fsolve в python? - PullRequest
0 голосов
/ 08 января 2020

У меня возникли проблемы с попыткой численно решить нелинейную систему уравнений с помощью fsolve из scipy.optimize. Я решаю эту систему для множества кратных и субмножений одного параметра (nuc_den), решение подходит для одной трети значений этого параметра (ошибка мала), я начинаю с самого низкого множителя sob-multip и go решение и увеличение значения кратных значений и использование предыдущего ответа fsolve в качестве предположения для следующей попытки решения. Но после некоторых взаимодействий fsolve находит решение для системы с большой ошибкой в ​​одной из переменных (err = 10 ^ 5), и после этого все решения для всех переменных имеют одинаковое предыдущее значение (когда ошибка стала огромной ) для оставшихся значений этого параметра.

Переменные (SIGMA, k_n, k_p, k_e, k_mu, k_lam) и для системы:

(self.m_SIGMA**2)*SIGMA + self.b*self.m_n*(self.g_SIGMA**3)*(SIGMA**2) + self.c*(
            self.g_SIGMA**4)*(SIGMA**3) - self.g_SIGMA*(ns_p + ns_n + ns_lam),
k_p - np.power(k_e**3 + k_mu**3, 1/3),
k_p**3 + k_n**3 + k_lam**3 - nuc_den*(3*(np.pi**2)),
np.sqrt(k_mu**2 + self.m_mu**2) - np.sqrt(k_e**2 + self.m_e**2),
np.sqrt(k_n**2 + m_eff_n**2) - np.sqrt(k_p**2 + m_eff_p**2) - np.sqrt(k_e**2 + self.m_e**2
                ) - ((self.g_RHO**2)/(self.m_RHO**2))*((k_p**3 - k_n**3)/(6*(np.pi**2))),
np.sqrt(k_lam**2 + m_eff_lam**2) - np.sqrt(k_n**2 + m_eff_n**2) - (1/(9*np.pi**2)
                )*(self.g_OMEGA**2/(self.m_OMEGA**2))*(k_n**3 + k_p**3 + (2/3)*k_lam**3) + 
                (1/(6*np.pi**2))*(self.g_RHO**2/(self.m_RHO**2))*((1/2)*k_p**3 - (1/2)*k_n**3)

Сочетания клавиш здесь : ns_n, ns_p, ns_lam и каждый член с "_eff", они:

ns_n = (1/(2*(np.pi**2)))*(k_n*np.sqrt((k_n)**2 + (m_eff_n)**2) - 
                (m_eff_n**2)*np.log((k_n + np.sqrt((k_n)**2 + (m_eff_n)**2))/m_eff_n))*m_eff_n

одинаковы для ns_p и ns_lam, изменяя только индексы в переменных. И:

m_eff_n = self.m_n - self.g_SIGMA*SIGMA

опять то же самое для остальных, только меняя индексы.

Я уже проверял уравнения много раз, в течение месяцев, кажется, ничего плохого с ними. Так что я не знаю, что еще делать, может быть, так я написал систему или что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...