У меня неприятный прерывистый 2-мерный интеграл I(k,k''; J,Jp,a,b,c,d)
, который имеет 4 вариационных параметра (a,b,c,d)
и 2 фиксированных константы (J,Jp)
. Процедура нахождения интеграла не проста и имеет первый шаг.
Мне нужно найти корень (mu
) для одномерного интеграла от -pi
до pi
A = Integrate [ 1/(exp(E(k; a,b,c,d)-mu)+1 ] dk/2pi = 0.5
, где E
- сложная функция, состоящая из квадратных корней и косинусов.
Найдя mu, мне нужно найти 4D (глобальные) минимальные значения (a,b,c,d)
для этого двумерного интеграла (с теми же пределами от 1022 * до pi
) с J
, Jp
.
result(J,Jp) = Minimum[ Integrate [ I(J,Jp;k,k''; a,b,c,d,mu) ] dk/2pi dk''/2pi ]
Сложная функция I
в основном выглядит как
I(J,Jp;k,k''; a,b,c,d,mu) = A(k)*A(k'')*f(a,b,c,d)*[J cos(k+k'') + Jp cos(k-k'')]
Я сделал первый шаг к нахождению mu
с предполагаемыми значениями a,b,c,d
, но не уверен, как поступить с произвольными значениями из них. Есть ли другой способ, кроме вложенности всех лямбда-функций? Тем не менее, как мне вложить лямбда-функции для выполнения того, что мне нужно?
beta=100.0
a=1.2
b=1.5
c=0.1
d=0.5
findmu = lambda mu: integrate.quad(lambda k:1.0/(2.0*pi)*1.0/(exp(beta*(0.5*(c+d-2.0*(1.0+b)*cos(k)-sqrt(32.0*(b*cos(k/2.0))**2.0+(c-d-2.0*(1-b)*cos(k))**2.0))-mu))+1.0)-0.5/(2.0*pi), -pi,pi)
mu0 = optimize.fsolve(findmu,0.0)
У меня есть процедура, написанная в Mathematica, но она занимает слишком много времени, чтобы получить минимум, а иногда и ошибочна. Я хотел бы попробовать перенести его на Python, который я сейчас изучаю. Спасибо!
РЕДАКТИРОВАТЬ: Больше информации о физической системе: Первый шаг - это найти уровень Ферми квантовой системы, наложив заполнение системы. На уровне Ферми можно найти, какие вариационные параметры минимизируют энергию основного состояния этой системы Хартри-Фока.