- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一组(至少 3 条)曲线(xy 数据)。对于每条曲线,参数 E 和 T 是常数但不同。我正在搜索系数 a、n 和 m 以获得所有曲线的最佳拟合。
y= x/E + (a/n+1)*T^(n+1)*x^m
我尝试了 curve_fit,但我不知道如何将参数 E 和 T 放入函数 f(参见 curve_fit 文档)。此外,我不确定我是否正确理解 xdata。Doc says: M-length sequence or an (k,M)-shaped array for functions with 函数k 个预测变量。什么是预测器?由于 ydata 只有一维,我显然不能将多条曲线输入到例程中。
所以 curve_fit 可能是错误的方法,但我什至不知道搜索正确方法的魔法词。我不可能是第一个处理这个问题的人。
最佳答案
一种方法是使用 scipy.optimize.leastsq
代替(curve_fit
是 leastsq
的便捷包装)。
一维堆叠x
数据; y
数据也是如此。 3 个单独数据集的长度甚至无关紧要;我们称它们为 n1
、n2
和 n3
,因此您的新 x
和 y
将具有形状 (n1+n2+n3,)
。
在要优化的函数内,您可以根据需要拆分数据。它不会是最好的功能,但它可以工作:
def function(x, E, T, a, n, m):
return x/E + (a/n+1)*T^(n+1)*x^m
def leastsq_function(params, *args):
a = params[0]
n = params[1]
m = params[2]
x = args[0]
y = args[1]
E = args[2]
T = args[3]
n1, n2 = args[2]
yfit = np.empty(x.shape)
yfit[:n1] = function(x[:n1], E[0], T[0], a, n, m)
yfit[n1:n2] = function(x[n1:n2], E[1], T[1], a, n, m)
yfit[n2:] = function(x[n2:], E[2], T[2], a, n, m)
return y - yfit
params0 = [a0, n0, m0]
args = (x, y, (E0, E1, E2), (T0, T1, T2), (n1, n1+n2))
result = scipy.optimize.leastsq(leastsq_function, params0, args=args)
这个我没有测试过,但是原理是这样的。您现在将数据分成 3 个不同的调用在要优化的函数中。
请注意,scipy.optimize.leastsq
只需要一个函数来返回您想要最小化的任何值,在这种情况下,您的实际 y
数据之间的差异和拟合函数数据。 leastsq
中实际重要的变量是您想要拟合的参数,而不是 x
和 y
数据。后者作为额外参数与三个独立数据集的大小一起传递(我没有使用 n3,为了方便起见,我对 n1+n2
做了一些处理;请记住leastsq_function
中的n1
和n2
是局部变量,不是原来的。
因为这是一个很难拟合的函数(例如,它可能不会有一个平滑的导数),所以非常有必要
提供良好的起始值(params0
,所以所有的 ...0
值)。
没有跨越多个数量级的数据或参数。一切越接近 1(几个数量级肯定没问题)越好。
关于python - 用 scipy 拟合多条参数曲线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26242979/
gnuplot 中拟合函数的正确方法是什么 f(x)有下一个表格吗? f(x) = A*exp(x - B*f(x)) 我尝试使用以下方法将其拟合为任何其他函数: fit f(x) "data.txt
(1)首先要建立数据集 ? 1
测量显示一个信号,其形式类似于具有偏移量和因子的平方根函数。如何找到系数并在一个图中绘制原始数据和拟合曲线? require(ggplot2) require(nlmrt) # may be thi
我想将以下函数拟合到我的数据中: f(x) = Offset+Amplitudesin(FrequencyT+Phase), 或根据 Wikipedia : f(x) = C+alphasin(ome
我正在尝试使用与此工具相同的方法在 C# 中拟合 Akima 样条曲线:https://www.mycurvefit.com/share/4ab90a5f-af5e-435e-9ce4-652c95c
问题:开放层适合 map ,只有在添加特征之后(视觉),我该如何避免这种情况? 我在做这个 第 1 步 - 创建特征 var feature = new ol.Feature({...}); 第 2
我有一个数据变量,其中包含以下内容: [Object { score="2.8", word="Blue"}, Object { score="2.8", word="Red"}, Objec
我正在尝试用中等大小的 numpy float 组来填充森林 In [3]: data.shape Out[3]: (401125, 5) [...] forest = forest.fit(data
我想用洛伦兹函数拟合一些数据,但我发现当我使用不同数量级的参数时拟合会出现问题。 这是我的洛伦兹函数: function [ value ] = lorentz( x,x0,gamma,amp )
我有一些数据,我希望对其进行建模,以便能够在与数据相同的范围内获得相对准确的值。 为此,我使用 polyfit 来拟合 6 阶多项式,由于我的 x 轴值,它建议我将其居中并缩放以获得更准确的拟合。 但
我一直在寻找一种方法来使数据符合 beta 二项分布并估计 alpha 和 beta,类似于 VGAM 库中的 vglm 包的方式。我一直无法找到如何在 python 中执行此操作。有一个 scipy
我将 scipy.optimize.minimize ( https://docs.scipy.org/doc/scipy/reference/tutorial/optimize.html ) 函数与
在过去的几天里,我一直在尝试使用 python 绘制圆形数据,方法是构建一个范围从 0 到 2pi 的圆形直方图并拟合 Von Mises 分布。我真正想要实现的是: 具有拟合 Von-Mises 分
我有一个简单的循环,它在每次迭代中都会创建一个 LSTM(具有相同的参数)并将其拟合到相同的数据。问题是迭代过程中需要越来越多的时间。 batch_size = 10 optimizer = opti
我有一个 Python 系列,我想为其直方图拟合密度。问题:是否有一种巧妙的方法可以使用 np.histogram() 中的值来实现此结果? (请参阅下面的更新) 我目前的问题是,我执行的 kde 拟
我有一个简单的 keras 模型(正常套索线性模型),其中输入被移动到单个“神经元”Dense(1, kernel_regularizer=l1(fdr))(input_layer) 但是权重从这个模
我正在尝试解决 Boston Dataset 上的回归问题在random forest regressor的帮助下.我用的是GridSearchCV用于选择最佳超参数。 问题一 我是否应该将 Grid
使用以下函数,可以在输入点 P 上拟合三次样条: def plotCurve(P): pts = np.vstack([P, P[0]]) x, y = pts.T i = np.aran
我有 python 代码可以生成数字 x、y 和 z 的三元组列表。我想使用 scipy curve_fit 来拟合 z= f(x,y)。这是一些无效的代码 A = [(19,20,24), (10,
我正在尝试从 this answer 中复制代码,但是我在这样做时遇到了问题。我正在使用包 VGAM 中的gumbel 发行版和 fitdistrplus . 做的时候出现问题: fit = fi
我是一名优秀的程序员,十分优秀!