Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/357.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 拟合指数衰减_Python_Scipy - Fatal编程技术网

Python 拟合指数衰减

Python 拟合指数衰减,python,scipy,Python,Scipy,我试图求解以下线性化方程: ln⁡{1−y/y}=ln⁡(c)−b(x) 使用pythonscipycurvefit或其他类似的方法,您能告诉我如何做到这一点吗 样本数据: x = [15, 16, 17, 18, 19, 20] y = [0.78, 0.67, 0.56, 0.41, 0.31, 0.20] 到目前为止我已经尝试过的代码: import numpy as np import scipy as sp import pylab from scipy.optimize impo

我试图求解以下线性化方程:

ln⁡{1−y/y}=ln⁡(c)−b(x)

使用pythonscipycurvefit或其他类似的方法,您能告诉我如何做到这一点吗

样本数据:

x = [15, 16, 17, 18, 19, 20]

y = [0.78, 0.67, 0.56, 0.41, 0.31, 0.20]
到目前为止我已经尝试过的代码:

import numpy as np
import scipy as sp
import pylab
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt
import math
import warnings   

def sigmoid(x,c,b):
    y = np.log(c)-b*x
    return y

def sigmoid_solve(y, c, b):
    x = (np.log(c)+np.log((1-y)/y))/b
    return x

y_new = []

x_data = [15, 16, 17, 18, 19, 20]
y_data = [0.78, 0.67, 0.56, 0.41, 0.31, 0.20]


for data in y_data:
    y_new.append(np.log((1-data)/data))


popt, pcov = curve_fit(sigmoid, x_data, y_new)
ce50 = sigmoid_solve(0.5,popt[0],popt[1])

x = np.linspace(10,40,10)
y = 1/(1+np.exp(sigmoid(x, *popt)))
plt.plot(x, y, 'r',label='logistic exp curve fit')
plt.plot(x_data, y_data,'o',label='data plot')
plt.ylim(0, 1)
plt.xlim(10, 50)
plt.legend(loc='best')
plt.savefig('test.png')
plt.close("all")

有没有更好的办法解决这个问题?

我不太明白你的问题

在这一刻,我会想很多方法。(当然我不知道他们是不是最好的)

1.-我将承担你的职责

ln⁡{1−y/y}=ln⁡(c)−b(x)

如果这是你想要解的方程(找到曲线的交点),我会找到ln的解⁡{1−y/y}-(ln⁡(c)−b(x))=0

2.-如果您想知道拟合数据的最佳曲线,您将使用bezier曲线的拟合,matplotlib已经有一些函数,请参见此处:

3.-但是如果你想解决这个系统(我认为它是一个EDO),你可以在这里检查一下,python有很多这样的功能:

这是:

干杯


安东尼奥。

我不能很好地理解你的问题

在这一刻,我会想很多方法。(当然我不知道他们是不是最好的)

1.-我将承担你的职责

ln⁡{1−y/y}=ln⁡(c)−b(x)

如果这是你想要解的方程(找到曲线的交点),我会找到ln的解⁡{1−y/y}-(ln⁡(c)−b(x))=0

2.-如果您想知道拟合数据的最佳曲线,您将使用bezier曲线的拟合,matplotlib已经有一些函数,请参见此处:

3.-但是如果你想解决这个系统(我认为它是一个EDO),你可以在这里检查一下,python有很多这样的功能:

这是:

干杯


Antonio。

我怀疑您的代码中的问题是c参数,因为曲线拟合尝试使用负值,导致错误。不幸的是,我在文档中找不到任何关于如何“绑定”输出参数的参考(有人可以通过指出如何做来改进这个答案)。尝试用log_c替换c,它可以有任何值:

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def sigmoid(x, log_c, b):
    return log_c - b * x

def sigmoid_solve(y, log_c, b):
    x = (log_c + np.log((1-y)/y))/b
    return x

x_data = np.array([15, 16, 17, 18, 19, 20])
y_data = np.array([0.78, 0.67, 0.56, 0.41, 0.31, 0.20])
y_new = (np.log((1.0-y_data)/y_data))

popt, pcov = curve_fit(sigmoid, x_data, y_new)
ce50 = sigmoid_solve(0.5,popt[0],popt[1])

x = np.linspace(10,40,10)
y = 1/(1+np.exp(sigmoid(x, *popt)))

plt.plot(x, y, 'r',label='logistic exp curve fit')
plt.plot(x_data, y_data,'o',label='data plot')
plt.ylim(0, 1)
plt.xlim(10, 50)
plt.legend(loc='best')
plt.savefig('test.png')
plt.close("all")

这个代码对我很有效。另外请注意,如果使用np.array而不是list,则可以应用数学函数而不使用循环。

我怀疑代码中的问题是c参数,因为曲线拟合尝试使用负值,导致错误。不幸的是,我在文档中找不到任何关于如何“绑定”输出参数的参考(有人可以通过指出如何做来改进这个答案)。尝试用log_c替换c,它可以有任何值:

import numpy as np
from scipy.optimize import curve_fit
import matplotlib.pyplot as plt

def sigmoid(x, log_c, b):
    return log_c - b * x

def sigmoid_solve(y, log_c, b):
    x = (log_c + np.log((1-y)/y))/b
    return x

x_data = np.array([15, 16, 17, 18, 19, 20])
y_data = np.array([0.78, 0.67, 0.56, 0.41, 0.31, 0.20])
y_new = (np.log((1.0-y_data)/y_data))

popt, pcov = curve_fit(sigmoid, x_data, y_new)
ce50 = sigmoid_solve(0.5,popt[0],popt[1])

x = np.linspace(10,40,10)
y = 1/(1+np.exp(sigmoid(x, *popt)))

plt.plot(x, y, 'r',label='logistic exp curve fit')
plt.plot(x_data, y_data,'o',label='data plot')
plt.ylim(0, 1)
plt.xlim(10, 50)
plt.legend(loc='best')
plt.savefig('test.png')
plt.close("all")

这个代码对我很有效。另外请注意,如果您使用np.array而不是list,则可以应用数学函数而不使用循环。

您提到curvefit,是否尝试过使用它?看看他们在参考页上提供的例子:你提到curvefit,你试过使用它吗?请看他们在参考页上提供的示例: