求函数I(a,b,c,d)积分的4维最小值(a,b,c,d)

2024-09-24 04:25:55 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个讨厌的间断二维积分I(k,k''; J,Jp,a,b,c,d),它有4个变分参数{}和2个固定常数(J,Jp)。求积分的过程并不简单,有第一步。在

  1. 我需要从-pi找到一维积分的根(mu) 到pi

    A = Integrate [ 1/(exp(E(k; a,b,c,d)-mu)+1 ] dk/2pi = 0.5

    其中E是一个由平方根和余弦组成的复杂函数。

  2. 找到mu之后,我需要找到这个二维积分的4D(全局)最小值(a,b,c,d)值(相同的-pi到{}极限),并提供JJp。在

    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的第一步,但不确定如何使用这些值的任意值。除了嵌套所有lambda函数之外还有其他方法吗?即使如此,如何嵌套lambda函数来实现我所需要的功能呢?在

^{pr2}$

我用Mathematica编写了这个过程,但是要得到最小值需要太长时间,有时甚至是错误的。我想把它移植到Python上,我正在学习。谢谢!在

编辑:关于物理系统的更多信息:第一步是通过填充量子系统来寻找费米能级。在费米能级下,我们可以找到使Hartree-Fock系统基态能量最小的变分参数。在


Tags: lambda函数参数过程系统pi常数cos
1条回答
网友
1楼 · 发布于 2024-09-24 04:25:55

我根本没有看过你的方程式,但我可以告诉你如何嵌套lambdas。您只需将lambda a, b, c, d:添加到当前lambda的前面,然后findmu(a, b, c, d)将返回一个将传递给optimize.fsolve()的函数,例如:

beta=100.0
findmu = lambda a, b, c, d: 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(1.2, 1.5, 0.1, 0.5),0.0)
# now just tweak the values for the arguments to findmu in subsequent calls

这使得abc、和{}的值闭包,将findmu重命名为make_findmu或类似的东西可能更有意义。在

使用实际函数定义而不是此处的lambdas可能会使代码更具可读性:

^{pr2}$

相关问题 更多 >