SciPy Leastsq实施问题

时间:2014-12-08 11:54:26

标签: python numpy scipy least-squares

我使用下面的代码来实现我的模型与一些实验数据的最小平方拟合。 该程序只是继续运行,似乎我的实现有问题,但我无法搞清楚。两个函数中的打印语句(simulateFunc和fit)表示这些语句被调用了几次(准确地说是9),但之后没有响应。

有人能告诉我我的实施有什么问题吗?程序运行正常,没有使用minimalsq函数,我可以通过调用带有一些参数的fit函数来获取残差。

示例数据点:(我的文件中总共有100个) 0.944444444,2.838888889,5.711111111,2.962962963,0.481481481 0.822222222,2.672222222,5.855555556,3.259259259,0.351851852

#!/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

0 个答案:

没有答案