gpt4 book ai didi

r - 寻找曲线以匹配数据

转载 作者:行者123 更新时间:2023-12-04 03:02:52 25 4
gpt4 key购买 nike

我正在寻找一个非线性曲线拟合例程(可能最有可能在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"

我将从中得到的至少是常数(A,B,C等)的值,并希望统计有关比赛适用性的统计数据。

有商业程序可以做到这一点,但是我希望现在能够在语言库中找到与所需表达相适应的通用内容。我怀疑SciPy的优化工具可以做到这一点,但是我看不到它可以让我定义一个方程式。同样,我似乎无法在R中找到我想要的东西。

我是在外面找什么,还是我需要自己动手?我讨厌这样做,但我很难找到它。

编辑:我想比从LAB Fit获得更多的过程控制能力。 LAB Fit用户界面令人恐惧。我还希望能够将范围分成多个部分,并用不同的曲线代表范围的不同部分。最后,结果必须能够(在速度上)通过线性插值击败LUT,否则我将不感兴趣。

在我当前的问题集中,我有触发函数或exp(),我需要每秒每秒实时执行352,800次(并且仅使用CPU的一小部分)。因此,我绘制了曲线并使用数据来驱动曲线拟合器,从而获得了较便宜的近似值。在过去,LUT几乎始终是解决方案,但是如今,跳过内存查找并进行近似有时会更快。

最佳答案

为了从一般意义上回答您的问题(关于R中的参数估计)而不考虑您指出的方程式的细节,我认为您正在寻找nls()或optim()...“nls”是我的首选它为每个估计的参数提供错误估计,当它失败时,我使用“optim”。如果您有x,y变量:

out <- tryCatch(nls( y ~ A+B*x+C*x*x, data = data.frame(x,y), 
start = c(A=0,B=1,C=1) ) ,
error=function(e)
optim( c(A=0,B=1,C=1), function(p,x,y)
sum((y-with(as.list(p),A + B*x + C*x^2))^2), x=x, y=y) )

得到系数,像
getcoef <- function(x) if(class(x)=="nls") coef(x) else x$par
getcoef(out)

如果您要在“nls”的情况下使用标准错误,
summary(out)$parameters

帮助文件和r-help邮件列表帖子包含许多讨论,这些讨论涉及由每个实现的特定最小化算法(以上每个示例中使用的默认算法)以及它们对于手头方程的特定形式的适用性。某些算法可以处理框约束,而另一个名为constrOptim()的函数将处理一组线性约束。该网站还可以帮助:

http://cran.r-project.org/web/views/Optimization.html

关于r - 寻找曲线以匹配数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1358238/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com