我有一个讨厌的间断二维积分I(k,k''; J,Jp,a,b,c,d)
,它有4个变分参数{(J,Jp)
。求积分的过程并不简单,有第一步。在
我需要从-pi
找到一维积分的根(mu
)
到pi
A = Integrate [ 1/(exp(E(k; a,b,c,d)-mu)+1 ] dk/2pi = 0.5
其中E
是一个由平方根和余弦组成的复杂函数。
找到mu之后,我需要找到这个二维积分的4D(全局)最小值(a,b,c,d)
值(相同的-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
的第一步,但不确定如何使用这些值的任意值。除了嵌套所有lambda函数之外还有其他方法吗?即使如此,如何嵌套lambda函数来实现我所需要的功能呢?在
我用Mathematica编写了这个过程,但是要得到最小值需要太长时间,有时甚至是错误的。我想把它移植到Python上,我正在学习。谢谢!在
编辑:关于物理系统的更多信息:第一步是通过填充量子系统来寻找费米能级。在费米能级下,我们可以找到使Hartree-Fock系统基态能量最小的变分参数。在
我根本没有看过你的方程式,但我可以告诉你如何嵌套lambdas。您只需将
lambda a, b, c, d:
添加到当前lambda的前面,然后findmu(a, b, c, d)
将返回一个将传递给optimize.fsolve()
的函数,例如:这使得}的值闭包,将
a
、b
、c
、和{findmu
重命名为make_findmu
或类似的东西可能更有意义。在使用实际函数定义而不是此处的lambdas可能会使代码更具可读性:
^{pr2}$相关问题 更多 >
编程相关推荐