Python lmfit 施加微妙的约束

Python lmfit impose subtle constraints

我正在处理以下问题:

d1=-1/b1*log((p1*t-a1)/c1)
d2=-1/b2*log((p2*t-a2)/c2)
d3=-1/b3*log((p3*t-a3)/c3)

其中 a1,a2,a3,b1,b2,b3,c1,c2,c3,p1,p2,p3 是已知的,理论上 d1=d2=d3>0,所以我尝试找到合适的 t 来最小化 (d1-d2)^2+(d2-d3)^2+(d3-d1)^2。我尝试使用lmfit来做,但不知道施加d>0之类的限制并且log中的东西大于0,即(p*t-a)/c>0There are simple examples in lmfit's document,就我而言,我不知道该怎么做。有人可以帮忙吗?非常感谢你。

假设您知道 b1b2b3c1c2c3 的值,您可以将t 的值的界限,因此 d1>0。如果 b1 为正数, d1>0 表示 log((p1*t-a1)/c1) > 0,因此 log 函数的参数 大于 1(不仅是 "greater than 0")。这意味着 p1*t-a1 > c1t > (c1 + a1)/p1,依此类推。因此,您可以为 t 创建一个参数并将其最小值设置为 [(c1+a1)/p1, (c2+a2)/p2, (c3+a3)/p3] 中的最大值以满足 d1,d2,d3>0.