【发布时间】:2016-06-05 15:45:18
【问题描述】:
我正在尝试使用scipy.optimize.curve_fit 将一些数据拟合到函数中,但不断收到值错误,类似于this post 中描述的错误,但是按照 cmets 中的建议将所有输入放入 numpy 数组中并没有似乎解决了我的问题。
这是我的基本代码:
def RamanHamiltonian(k, omega, delta, epsilon):
H = np.array([[(k+2.0)**2.0 - delta, omega/2.0, 0.0],
[omega/2.0, k**2.0-epsilon,omega/2.0],
[0.0,omega/2.0,(k-2.0)**2.0 + delta]])
return H
def propagateHamiltonianTest(t, omega, delta, epsilon):
k = 0.0
psi0 = np.array([0+1j*0.0, 1.0+1j*0.0, 0.0+1j*0.0])
H = RamanHamiltonian(k, omega, delta ,epsilon)
Energy, V = LA.eig(H)
V = V + 1j*0.0
Vinv = np.conjugate(np.transpose(V))
U = np.diag(np.exp(-1j*np.array(Energy)*t))
a =np.dot(Vinv,psi0)
b = np.dot(U,a)
psi = np.dot(V,b)
pop0 = np.absolute(psi[0])**2.0
return pop0
popt, pcov = optimize.curve_fit(propagateHamiltonianTest,
np.array(tRecoils),
np.array(frac0),
p0=(3.0,0.05,0.03))
下面是tRecoils 和frac0 的值,它们的长度都是24 个数组:
tRecoils = array([ 2.88597836, 1.15439135, 1.73158702, 2.19334356, 0.23087827,
2.07790442, 0.11543913, 1.50070875, 2.77053923, 1.61614788,
1.03895221, 2.42422183, 0.92351308, 0.80807394, 0.3463174 ,
0.57719567, 2.6551001 , 0.46175654, 1.84702615, 1.38526961,
2.53966096, 0.69263481, 2.30878269, 1.96246529])
frac0 = array([ 0.15761062, 0.02044625, 0.17275937, 0.02236243, 0.07388558,
0.00967176, 0.01886309, 0.20412516, 0.21667489, 0.21783697,
0.00173812, 0.14038657, 0.03145599, 0.08644404, 0.13153078,
0.18794377, 0.2139092 , 0.17141201, 0.13021916, 0.12671806,
0.21090369, 0.1611094 , 0.08732627, 0.05764911])
我收到此错误:
U = np.diag(np.exp(-1j*np.array(能量)*t))
ValueError: 操作数不能与形状一起广播 (3) (24)
因此,由于某种原因,curve_fit 读取整个 tRecoil 数组,而不是按元素进行读取,我似乎无法通过更改输入格式来解决这个问题。
【问题讨论】:
-
LA是如何定义的(在Energy, V = LA.eig(H)行中)? -
numpy.linalg,我猜。
标签: python scipy curve-fitting