- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要将三个值中的两个放入参数中,假设我有 a,b,
和 c
并且我知道 a
但我只想适合 b
和 c
。如果我尝试将 a 修复为负值,则会出现以下错误 ValueError: SLSQP Error: lb > ub inbounds True, False, False.
。但是,如果我通过在 a
前面添加负号 (-) 来更改模型,使我的 a
参数为正,它将解决问题,但它会返回所有 NaN。
这是返回错误的代码。如果可能的话,这就是我想要构建模型的方式。
#%% import modules
import IPython as IP
IP.get_ipython().magic('reset -sf')
import matplotlib.pyplot as plt
from symfit import Parameter, Variable
from symfit import Fit
import numpy as np
# data
Y = np.array([7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.50E-01 , 7.49E-01 , 7.49E-01 , 7.49E-01 , 7.49E-01 , 7.49E-01 , 7.48E-01 , 7.48E-01 , 7.48E-01 , 7.47E-01 , 7.47E-01 , 7.46E-01 , 7.46E-01 , 7.45E-01 , 7.44E-01 , 7.44E-01 , 7.43E-01 , 7.42E-01 , 7.41E-01 , 7.40E-01 , 7.39E-01 , 7.38E-01 , 7.37E-01 , 7.36E-01 , 7.35E-01 , 7.34E-01 , 7.32E-01 , 7.31E-01 , 7.30E-01 , 7.28E-01 , 7.27E-01 , 7.25E-01 , 7.24E-01 , 7.22E-01 , 7.21E-01 , 7.19E-01 , 7.17E-01 , 7.16E-01 , 7.14E-01 , 7.12E-01 , 7.10E-01 , 7.08E-01 , 7.06E-01 , 7.04E-01 , 7.02E-01 , 7.00E-01 , 6.98E-01 , 6.96E-01 , 6.94E-01 , 6.92E-01 , 6.90E-01 , 6.88E-01 , 6.86E-01 , 6.83E-01 , 6.81E-01 , 6.79E-01 , 6.77E-01 , 6.75E-01 , 6.72E-01 , 6.70E-01 , 6.68E-01 , 6.65E-01 , 6.63E-01 , 6.61E-01 , 6.58E-01 , 6.56E-01 , 6.54E-01 , 6.51E-01 , 6.49E-01 , 6.46E-01 , 6.44E-01 , 6.42E-01 , 6.39E-01 , 6.37E-01 , 6.34E-01 , 6.32E-01 , 6.30E-01 , 6.27E-01 , 6.25E-01 , 6.22E-01 , 6.20E-01 , 6.17E-01 , 6.15E-01 , 6.12E-01 , 6.10E-01 , 6.08E-01 , 6.05E-01 , 6.03E-01 , 6.00E-01 , 5.98E-01 , 5.95E-01 , 5.93E-01 , 5.91E-01 , 5.88E-01 , 5.86E-01 , 5.83E-01 , 5.81E-01 , 5.79E-01 , 5.76E-01 , 5.74E-01 , 5.71E-01 , 5.69E-01 , 5.67E-01 , 5.64E-01 , 5.62E-01 , 5.60E-01 , 5.57E-01 , 5.55E-01 , 5.53E-01 , 5.50E-01 , 5.48E-01 , 5.46E-01 , 5.43E-01 , 5.41E-01 , 5.39E-01 , 5.36E-01 , 5.34E-01 , 5.32E-01 , 5.29E-01 , 5.27E-01 , 5.25E-01])
X = np.arange(len(Y))
#%% solve the best fit line for the entire data set.
# define the parameters
a = Parameter(value = -0.25,fixed=True)
b = Parameter()
c = Parameter()
x = Variable()
# build the model
model = a + b * (1 - np.e**(-c/x))
# fit the model
fit = Fit(model, X, Y)
fit_result = fit.execute()
model_fit = model(x=X, a=fit_result.value(a), b=fit_result.value(b),c=fit_result.value(c))
#%% Plot the results
plt.figure()
plt.plot(X,Y,'ko',markersize=3,fillstyle='none',label='data')
plt.plot(X, model_fit,'--',label='best fit')
plt.legend()
最佳答案
这似乎是 symfit
的问题,感谢您报告它。
快速解决您的问题;看来 SLSQP 导致了 NaN。因此,从 Fit
对象切换到 NumericalLeastSquares
对象将解决您的问题。 (但它仍然不允许固定负值)
我会尽快修复这个问题。
作为对代码的额外改进,我是否建议将 np.e**(-c/x)
替换为
from symfit import exp
exp(-c/x)
这是一个符号表达式,因此 symfit
(或您)也可以利用它的符号计算的所有功能。
关于python - 在symfit python包中设置负固定参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44562190/
考虑这个简单的优化代码: 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:
我是一名优秀的程序员,十分优秀!