- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 symfit 执行全局拟合包,以下 symfit documentation .
import numpy as np
import symfit as sf
import matplotlib.pyplot as plt
%matplotlib inline # for ipynb
# Generate example data
t = np.arange(0.0, 600.1, 30)
k = 0.005
C1_0, C2_0 = 1.0, 2.0
C1 = C1_0 * np.exp(-k*t)
C2 = C2_0 * np.exp(-k*t)
# Construct model
x_1, x_2, y_1, y_2 = sf.variables('x_1, x_2, y_1, y_2')
kg = sf.Parameter(value=0.01, min=0.0, max=0.1)
a_1, a_2 = sf.parameters('a_1, a_2')
globalmodel = sf.Model({
y_1: a_1 * np.e**(- kg * x_1),
y_2: a_2 * np.e**(- kg * x_2),
})
# Do fit
globalfit = sf.Fit(globalmodel, x_1=t, x_2=t, y_1=C1, y_2=C2)
globalfit_result = globalfit.execute()
print(globalfit_result)
### EDITED START
while globalfit_result.r_squared < 0.99:
kg = sf.Parameter(value=globalfit_result.params['kg'])
a_1 = sf.Parameter(value=globalfit_result.params['a_1'])
a_2 = sf.Parameter(value=globalfit_result.params['a_2'])
globalmodel = sf.Model({
y_1: a_1 * np.e**(- kg * x_1),
y_2: a_2 * np.e**(- kg * x_2),
})
globalfit = sf.Fit(globalmodel, x_1=t, x_2=t, y_1=C1, y_2=C2)
globalfit_result = globalfit.execute()
### EDITED END
y_r = globalmodel(x_1=t, x_2=t, **globalfit_result.params)
# Plot fit
plt.plot(t,C1,'ro')
plt.plot(t,C2,'b+')
plt.plot(t,y_r[0],'r-')
plt.plot(t,y_r[1],'b-')
plt.show()
在此示例中,我希望“globalmodel”中的“kg”参数优化为 0.005。然而,“kg”的值约为9.6e-3,与初始值(10.0e-3)太接近。我想我做了一些愚蠢的事情,但我无法弄清楚。
欢迎任何意见和建议!
已编辑
我添加了(一个非常难看的)while 循环以获得最佳拟合。我不确定为什么会这样,但它似乎有效。
最佳答案
看来是边界导致了问题。我在测试中删除了它们,然后一切正常。这是 symfit 0.3.3 中的已知问题,a̶n̶d̶ ̶o̶n̶e̶ ̶I̶ ̶a̶l̶r̶e̶a̶d̶y̶ ̶f̶i̶x̶e̶d̶ ̶i̶n̶ ̶t̶h̶e̶ ̶[̶̶ m̶a̶s̶t̶e̶r̶
̶]̶[̶1̶]̶ ̶b̶r̶a̶n̶c̶h̶ ̶o̶n̶ ̶G̶i̶t̶h̶u̶b̶.̶ ̶ ̶ ̶I̶ ̶u̶p̶l̶o̶a̶d̶e̶d̶ ̶a̶ ̶n̶e̶w̶ ̶d̶e̶v̶ ̶v̶e̶r̶s̶i̶o̶n̶ ̶y̶o̶u̶ ̶c̶o̶u̶l̶d̶ ̶n ̶o̶w̶ ̶i̶n̶s̶t̶a̶l̶l̶ ̶u̶s̶i̶n̶g̶ ̶̶p̶i̶p̶ ̶i̶n̶s̶t̶a̶l̶l̶ ̶s̶y̶m̶f̶i̶t̶=̶=̶0̶. 3̶.̶3̶.̶d̶e̶v̶1̶5̶5̶ ̶-̶-̶u̶p̶g̶r̶a̶d̶e̶
̶,̶ ̶u̶n̶t̶i̶l̶ ̶I̶ ̶o̶f̶f̶i̶c̶i̶a̶l̶l̶y ̶ ̶r̶e̶l̶e̶a̶s̶e̶ ̶0̶.̶3̶.̶4̶ ̶ (̶w̶h̶i̶c̶h̶̶w̶i̶l̶l̶̶b̶e̶̶i̶d̶e̶n̶t̶i̶c̶a̶l̶̶b̶u̶t̶̶w̶i̶t̶h̶̶e̶x̶t̶e̶n̶d̶e ̶d̶ ̶d̶o̶c̶u̶m̶e̶n̶t̶a̶t̶i̶o̶n̶)̶,现已在新版本中修复。
请注意,我将您的 np.e
更改为 sf.exp
因为这是象征性的。我的工作代码如下,与您的相同,除了提到的更改并在 0.3.3.dev155
中运行。
import numpy as np
import symfit as sf
import matplotlib.pyplot as plt
# Generate example data
t = np.arange(0.0, 600.1, 30)
k = 0.005
C1_0, C2_0 = 1.0, 2.0
C1 = C1_0 * np.exp(-k*t)
C2 = C2_0 * np.exp(-k*t)
# Construct model
x_1, x_2, y_1, y_2 = sf.variables('x_1, x_2, y_1, y_2')
kg = sf.Parameter(value=0.01, min=0.0, max=0.1)
a_1, a_2 = sf.parameters('a_1, a_2')
globalmodel = sf.Model({
y_1: a_1 * sf.exp(- kg * x_1),
y_2: a_2 * sf.exp(- kg * x_2),
})
# Do fit
globalfit = sf.Fit(globalmodel, x_1=t, x_2=t, y_1=C1, y_2=C2)
globalfit_result = globalfit.execute()
print(globalfit_result)
y_r = globalmodel(x_1=t, x_2=t, **globalfit_result.params)
# Plot fit
plt.plot(t,C1,'ro')
plt.plot(t,C2,'b+')
plt.plot(t,y_r[0],'r-')
plt.plot(t,y_r[1],'b-')
plt.show()
关于python - 使用 symfit 进行全局拟合示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40958688/
考虑这个简单的优化代码: from symfit import * x1 = 1 x2 = 4 p1, p2 = parameters('p1, p2') model = p1*p2 constrai
多个 symfit 模型实例共享同名参数对象。我想了解此行为的来源、意图是什么以及是否可以停用。 为了说明我的意思,举一个最小的例子: import symfit as sf # Create Par
我正在尝试使用 symfit 执行全局拟合包,以下 symfit documentation . import numpy as np import symfit as sf import matpl
我正在尝试编写一个代码,用于使用 symfit 模块同时使用两个不同的方程和一些共享参数来拟合两个数据集。它太复杂了,无法在这里展示,所以我展示了具有相同命令且更简单的另一个代码。在这里,我尝试用线性
我已经建立了一个模型来拟合一些指数减法的数据。它适合拟合,但当我显式评估模型时,我得到奇怪的结果和 AttributeError:“Mul”对象没有属性“exp”。 问题似乎源于 lambdify 的
我想使用 symfit 对具有共享变量的数据集进行全局拟合.我有一个 numpy 数组 xdata,它对于所有数据集 ydata_i 都是通用的,它们也是 numpy 数组。 在 example in
我想知道如何提取状态变量的初始值。 基本上,初始值也被视为参数。 我提供初始值是因为集成需要它们。然而,这些值有时被视为附加参数(模型参数旁边),因此提供的初始值也被视为初始猜测。事实上,在做生长实验
我正在使用 pandas 读取 .csv 文件。然后,我从数据框中取出 x 和 y 对,并使用 symfit 对数据执行全局拟合。我是 pandas 数据框和 symfit 的新手。我目前的概念验证代
我试过运行这段代码,但无论我如何简化它,我总是遇到同样的错误。 /home/runner/.site-packages/symfit/core/fit.py:1046: RuntimeWarning:
我是一名优秀的程序员,十分优秀!