У меня есть следующая проблема с поиском корней нелинейного уравнения. Уравнение следующее:
tanh [5 * log [(2 / t) ^ (0.00990099) (1 + x) ^ (0.990099) (1-x) ^ (- 1)]] -x = 0
Решение с помощью NSolve
, для {t, 0, 100}
возвращает следующее с Mathematica :
Это то, что я ожидал, построив полученные корни в зависимости от параметра времени в этом диапазоне. Теперь я попытался воспроизвести этот результат с помощью Python, используя scipy.optimize.root
, но кажется, что мой код возвращает в качестве решения любое значение, которое я использую в качестве начального условия, следовательно, это ничто иное, как карта идентичности. Это также можно увидеть на картинке ниже, где я использовал начальное условие 0.7
:
Я предоставил код ниже:
import math
import numpy as np
import matplotlib.pyplot as plt
from scipy.optimize import root
#Setting up the function
def delta(v,t):
epsilon = 10**(-20)
return np.tanh( 5*np.log( (2/(1.0*t+epsilon))**(0.00990099)*(1+v+epsilon)**(0.990099)*(1-v+epsilon)**(-1)))-v
#Setting up time paramerer
time = np.linspace(0, 101)
res = [root(delta, 0.7, args=(t, )).x[0] for t in time]
print res
plt.plot(time, res)
plt.savefig("plot.png")
Я не совсем уверен, правильно ли я использую scipy.optimize.root
, поскольку функция выглядит нормально, насколько я ожидаю от ее поведения. Возможно, ошибка в том, как я передаю args
?