Я пытаюсь решить и воспроизвести решение системы нелинейных уравнений, используя scipy.Я многому научился из разных постов, и я мог выяснить некоторые проблемы, которые у меня были до .Однако, исходя из решения, которое я выложил выше для моего собственного вопроса, кажется, что scipy.optimize
весьма чувствителен к различным доступным методам Я пытаюсь использовать нелинейных решателей в качествекто-то еще указал это здесь, но я получаю те же решения, которые, как я полагаю, ошибочны.Я говорю это потому, что в научной статье, за которой я следую (и пытаюсь воспроизвести результаты), они решили одну и ту же систему с Mathematica
и получили другой результат, более близкий к ожидаемому.Раньше я размещал лишь минимальный пример работы своего кода, но теперь я решил опубликовать реальную вещь.
Мне было интересно, может ли Mathematica
легко управлять выбором решателя и решать проблему,Сначала я хотел использовать Python, но сейчас мой приоритет - решить эту проблему, независимо от языка.Если кто-то найдет способ решить с помощью scipy
намного лучше.
Следуйте моему коду:
import numpy as np
from scipy import optimize
c1 = 43.524e-3
Z1 = 1
Z2 = 3
b = 1.7e-10
q = 1.6e-19
k_B = 1.38e-23
T = 296.15
N = 6.02e23
lB=0.71e-9
xi = 4.2
v1 = 4*np.pi*np.exp(1.0)*N*(1.0+Z1)*(xi-Z1**(-1.0))*b**(3.0)
v2 = 4*np.pi*np.exp(1.0)*N*(1.0+Z2)*(xi-Z2**(-1.0))*b**(3.0)
epsilon = q**2/(xi*k_B*T*b)
I = 46.311e-3
kappa2 = (3.29e7)*c1**(0.5) * (1e2)
def f(p,*args):
theta1,theta2 = p
c2 = args[0]
eq1 = theta1-(c1*v1/10**3)*np.exp(-1-2*Z1*xi*(1-Z1*theta1-Z2*theta2)*np.log(1-np.exp(-kappa2*b)))
eq2 = theta2-c2*((v2/(10**3*np.exp(1)))*((10**3*theta1*np.exp(1))/(c1*v1))**3)
return(eq1,eq2)
c2 = np.arange(0,150e-6,1e-6)
THETA1 = []
THETA2 =[]
THETA = []
for i in c2:
sol=optimize.root(f,np.array([0.12024367, 0.00062351]),args=(i),method='hybr')
theta1,theta2 = sol.x[0],sol.x[1]
sol.message
theta=3*theta2+theta1
THETA1.append(theta1)
THETA2.append(theta2)
THETA.append(theta)
print (theta1,theta2,theta)
Что якобы неверно, так это то, что theta1
падает очень быстро, числовое значениезначения для двух первых взаимодействий:
theta1,theta2,theta
0.12154778645003049, 6.444608966498463e-30, 0.12154778645003049
6.961522754431233e-05, 0.17477403029874458, 0.5243917061237781
А вот эволюция тета1, тета2 и тета как функции с2.
РЕДАКТ. Результаты из вышеупомянутой бумаги: