1
I; m无法为我的代码寻找一个错误消息来找到一些参数,以适应两个参数(eps和sig)中的复杂最小二乘。Python的最小平方与scipy.integrate.quad
from pylab import *
import scipy
import numpy as np
from scipy import integrate, optimize
# Estimate parameters with least squares fit
T = [90, 100, 110, 120, 130, 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280, 290, 300]
B = [-0.2221, -0.18276, -0.15348, -0.13088, -0.11293, -0.09836, -0.086301, -0.076166, -0.067535, -0.060101, -0.053636, -0.047963, -0.04295, -0.038488, -0.034494, -0.030899, -0.027648, -0.02469, -0.022, -0.019534, -0.017268, -0.015181]
def funeval(Temp,eps,sig):
return -2.*np.pi*scipy.integrate.quad(lambda x: np.exp(4.*eps/Temp*((sig/x)**6.-(sig/x)**12.)*(x**2)) ,0.0,Inf)[0]
def residuals(p,y,Temp):
eps,sig = p
err = y-(funeval(Temp,eps,sig))
return err
print funeval(90.,0.001, 0.0002)
plsq = scipy.optimize.leastsq(residuals, [0.00001, 0.0002], args=(B, T))
的funeval
给出了一个合理的浮动,但是当我运行的代码返回:
error: Supplied function does not return a valid float.
错误似乎没有对初始条件的敏感。我是python的新手,所以任何帮助或指导来帮助将不胜感激。谢谢。
当然,感谢您的帮助。这个想法是计算关于第二维里系数的氩气给定数据的Lennard Jones势能参数。因此,描述这种关系的公式是http://i.imgur.com/VfCl5EE.gif 所以这个想法是罚款epsilon和西格玛。 (它们应该在120和341e-9左右) (仍在学习SO接口) – doubletheron
@dthertheron请查看我的编辑,你忘记了'-1'。你也应该使用['np.expm1'](http://docs.scipy.org/doc/numpy/reference/generated/numpy.expm1.html),请查看页面的解释。你可能要考虑加权不同的温度。 – Daniel
我发现教科书在说谎。 Book 1(a liar):http://i.imgur.com/fAO4Fdl.jpg Book 2(很可能说实话):http://i.imgur.com/GVJVSaT.jpg 所以我修好了用“funeval”表示,但仍然没有收敛。 – doubletheron