繁体   English   中英

Python.scipy:Curve_fit一个具有多个输入和输出的函数

[英]Python.scipy: Curve_fit a function with several inputs and ouputs

我想使用两个参数(Km,kcat)和一些数据的4个输入和输出来拟合一个函数。 该函数是:

def dxdt(x, t, Km, kcat):
    y = np.zeros(4)
    reaction1 = Km * x[2] * x[0]
    reaction2 = kcat * x[3]
    y[0] = - reaction1
    y[1] = reaction2
    y[2] = reaction2 - reaction1
    y[3] = reaction1 - reaction2
return y

例如,数据可以是:

x = [[7.2, 6.1, 5.5, 4.1, 3.3, 2.1, 1.9, 0.2], [0., 1.1, 2.2, 3.5, 
4.5, 6.0, 6.6, 7.3], [10., 9.5, 8., 7.1, 6.8, 5., 5.9, 9.9], [0., 1.2, 
3., 4.5, 5., 6.1, 2.5, 0.4 ]]

随着时间跨度:

t = range(9)

和固定的起始值:

initial_values = [7.2., 0., 10., 0.]

我定义了一个函数,用于计算给定参数集的输出:

def y(timerange, a, b):    
    result = odeint(dxdt, initial_values, timerange, 
                    args=(a, b))
return result.transpose()

现在,我不知道如何正确使用scipy.optimize.curvefit()。 我只看过带有来自R ^ n-> R而不是R ^ n-> R ^ n的函数的curve_fit示例。 这有可能吗?

使用可以使用leastsq

import numpy as np
from scipy.optimize import leastsq
from scipy.integrate import odeint
def dxdt(x, t, Km, kcat):
    y = np.zeros(4)
    reaction1 = Km * x[2] * x[0]
    reaction2 = kcat * x[3]
    y[0] = - reaction1
    y[1] = reaction2
    y[2] = reaction2 - reaction1
    y[3] = reaction1 - reaction2
    return y
x = np.array([[7.2, 6.1, 5.5, 4.1, 3.3, 2.1, 1.9, 0.2], [0., 1.1, 2.2, 3.5, 4.5, 6.0, 6.6, 7.3], [10., 9.5, 8., 7.1, 6.8, 5., 5.9, 9.9], [0., 1.2, 3., 4.5, 5., 6.1, 2.5, 0.4 ]])
t = range(8)
initial_values = [7.2, 0., 10., 0.]
def y(timerange, a, b):    
    result = odeint(dxdt, initial_values, timerange, 
                args=(a, b))
    return result.transpose()
def residuals(params):
    a,b=params
    return (y(t,a,b)-x).flatten()
result=leastsq(residuals,[0.1,0.1])
print(result)  

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM