Python SciPy Leastsq实施问题
我使用下面的代码来实现我的模型与一些实验数据的最小平方拟合。 程序一直在运行,我的实现似乎有问题,但我无法解决。两个函数simulatefunc和fit中的Print语句表明,精确地说,它们被调用了几次9,但之后没有响应 谁能告诉我我的实现有什么问题吗?该程序运行良好,没有使用leastsq函数,我可以通过调用带有一些参数的fit函数获得返回给我的残差 示例数据点:我的文件中总共有100个 0.944444444,2.838888889,5.711111111,2.962962963,0.481481481 0.82222222,2.67222222,5.8555556,3.259259259,0.351852Python SciPy Leastsq实施问题,python,numpy,scipy,least-squares,Python,Numpy,Scipy,Least Squares,我使用下面的代码来实现我的模型与一些实验数据的最小平方拟合。 程序一直在运行,我的实现似乎有问题,但我无法解决。两个函数simulatefunc和fit中的Print语句表明,精确地说,它们被调用了几次9,但之后没有响应 谁能告诉我我的实现有什么问题吗?该程序运行良好,没有使用leastsq函数,我可以通过调用带有一些参数的fit函数获得返回给我的残差 示例数据点:我的文件中总共有100个 0.944444444,2.838888889,5.711111111,2.962962963,0.481
#!/usr/bin/python
#Simulate egg-laying in hermaphrodites
import math
import csv
import numpy as np
from scipy.optimize import leastsq
f = open('dataPointsCSV.csv')
csv_f = csv.reader(f)
for row in csv_f :
####### My Model #######
def simulateFunc(parms) :
oocytes = 0
sperm = 300
eggs = []
total_t = 0
delta_t = 0.1
bin_size = 4
k_o = parms[0]
k_c = parms[1]
k_f = parms[2]
k_s = parms[3]
while(sperm > 1) :
oocytes += delta_t*(k_o-k_c*oocytes)
new_eggs = delta_t*min(k_f*oocytes,k_s*sperm)
sperm -= new_eggs
oocytes -= new_eggs
index = int(total_t/bin_size)
if(len(eggs)<=index) :
eggs.append(new_eggs)
else :
eggs[index] += new_eggs
total_t += delta_t
for i in range(0,len(eggs)) :
eggs[i] = eggs[i]/bin_size
return eggs
######## Returns the residuals #########
def fit(para) :
newEggs = []
modelEggs = simulateFunc(para)
exp = np.array(row)
expEggs = exp.astype(np.float)
########## Get the required points for calculating the residuals from the model data ############
for i in range(0,len(modelEggs)):
if(i == 2 or i == 4 or i == 9 or i == 15 or i == 22):
newEggs.append(modelEggs[i])
newEggs = np.array(newEggs)
res = expEggs - newEggs
return res
######## Parameter Initializations ##########
parameters = [6,-.02,.0266,.0625]
x, cov, infodict, mesg, ier = leastsq(fit,parameters, full_output = True, epsfcn = 1.0e-2)
print x
输入中总是同一行导致程序停止吗?它不停止,只是继续运行,不产生输出。它本身保留在第一行。我添加了epsfcn=1.0e-4/1.0e-5/1.0e-3作为leastsq函数的附加参数,并且在再次卡住之前,它会产生一些输出,它给了我一些警告,比如:RuntimeWarning:在double_scalars Occomates+=delta_t*k_o-k_c*Occomates RuntimeWarning:在double_scalars Occomates中遇到溢出-=new_Eggs您需要修复部分代码显示:在点处缩进不正确,fit函数被切分为两段,这使得它看起来好像不会返回。也许你可以复制粘贴你所有的数据,100行看起来不会太多;然后将您的代码转换为一个我们可以尝试的自包含程序。