【发布时间】:2020-04-05 15:01:10
【问题描述】:
我有一个要解决的问题:
- 我想用一个方程拟合一组曲线(参见代码)
- 拟合参数 (C1-C4) 应该是常量
- 所以我可以通过更改“Sigma 和 T”来拟合(或描述)该族的一条曲线
我希望我能描述我的问题,希望你们能提供帮助,我将非常感激!
问题已编辑(由于误解 - 2020_04_04)
我现在会尝试更具体一些,因为我附上了一张图片,您可以在其中看到“曲线族”的示例,该示例会随着不同的“西格玛”而变化。我想用一对常数来描述这些曲线族——C1、C2、C3 和 C4,而不改变它们。线索是找到一个常数的最佳值,它可以仅以改变 Sigma 和 T 作为变量来描述这个曲线族。因此,我必须以最小的误差拟合一堆曲线的参数。之后,只需更改“Sigma 和 T”,方程就应该涵盖整个曲线族。
最好的问候!
import matplotlib.pyplot as plt
import numpy as np
from scipy.optimize import curve_fit
#Equation --> Eps_Cr = (C1*Sigma**C2*x**(C3+1)*e(-C4/T))/(C3+1)
def func(x, C1, C2, C3,C4):
Sigma = 20
T = 1
return (C1*Sigma**C2*x**(C3+1)*np.exp(-C4*1/T))/(C3+1)
#Example Data 1
xdata = [1, 10, 100, 1000, 10000, 100000]
ydata = [0.000382,0.000407,0.000658,0.001169,0.002205,0.004304]
#Example Data 2
xdata1 = [1, 10, 100, 1000, 10000, 100000]
ydata1 = [0.002164,0.002371,0.004441,0.008571,0.016811,0.033261]
#Example Data 3
xdata2 = [1, 10, 100, 1000, 10000, 100000]
ydata2 = [0.001332,0.001457,0.002707,0.005157,0.010007,0.019597]
plt.plot(xdata, ydata, 'b-', label='data')
plt.plot(xdata1, ydata1, 'g-', label='data')
plt.plot(xdata2, ydata2, 'y-', label='data')
popt, pcov = curve_fit(func, xdata, ydata)
plt.plot(xdata, func(xdata, *popt), 'r--',
label='fit: C1=%5.2e, C2=%5.3f, C3=%5.3f,C4=%5.3f' % tuple(popt))
plt.xlabel('X')
plt.ylabel('Y')
plt.legend()
plt.show()
【问题讨论】:
-
嗨!请让你的问题更具体。你的代码在做什么,你想让它做什么?
标签: python scipy curve-fitting scipy-optimize