我正在寻找一个非线性曲线拟合程序(可能最有可能在R或Python中找到,但我对其他语言开放),这将采用x,y数据并拟合曲线.
我应该能够将我想要的表达式类型指定为字符串.
例子:
"A+B*x+C*x*x"
"(A+B*x+C*x*x)/(D*x+E*x*x)"
"sin(A+B*x)*exp(C+D*x)+E+F*x"
Run Code Online (Sandbox Code Playgroud)
我得到的是至少常数(A,B,C等)的值,并希望有关比赛适合度的统计数据.
有商业程序可以做到这一点,但我希望能找到适合现在语言库中所需表达式的常用内容.我怀疑SciPy的优化能力可能会做到这一点,但我看不出它让我定义了一个等式.同样,我似乎无法在R中找到我想要的东西.
我正在寻找那里,还是我需要自己动手?我讨厌这样做,如果它在那里,我只是找不到它.
编辑:我想这样做是为了更多地控制过程,而不是从LAB Fit获得.LAB Fit UI非常糟糕.我也希望能够将范围分成多个部分,并且不同的曲线代表范围的不同部分.最后,结果必须能够(速度)用线性插值击败LUT,或者我不感兴趣.
在我当前的一组问题中,我有trig函数或exp(),我需要实时执行它们每秒352,800次(并且只使用一小部分CPU).因此,我绘制曲线并使用数据来驱动曲线拟合器以获得更便宜的近似值.在过去,LUT几乎总是解决方案,但现在跳过内存查找并进行近似有时会更快.
我想用一个断点进行分段线性回归,其中回归线的后半部分有slope = 0.有一些如何进行分段线性回归的例子,例如这里.我遇到的问题是我不清楚如何将模型的一半的斜率修正为0.
我试过了
lhs <- function(x) ifelse(x < k, k-x, 0)
rhs <- function(x) ifelse(x < k, 0, x-k)
fit <- lm(y ~ lhs(x) + rhs(x))
Run Code Online (Sandbox Code Playgroud)
k断点在哪里,但右边的段不是平面/水平段.
我想将第二段的斜率约束为0.我试过:
fit <- lm(y ~ x * (x < k) + x * (x > k))
Run Code Online (Sandbox Code Playgroud)
但是,我不知道如何让下半场得到零斜率.
任何帮助是极大的赞赏.
我自己的解决方案
由于下面的评论,我有一个解决方案.这是我用来优化然后绘制拟合的代码:
x <- c(1, 2, 3, 1, 2, 1, 6, 1, 2, 3, 2, 1, 4, 3, 1)
y <- c(0.041754212, 0.083491254, 0.193129615, 0.104249201, 0.17280516,
0.154342335, 0.303370501, 0.025503008, …Run Code Online (Sandbox Code Playgroud)