问题标签 [curve-fitting]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
python - 使用 Python 拟合模拟和实验数据点
我编写了一些代码来执行蒙特卡罗模拟并产生信号强度与时间的曲线。这种曲线的形状取决于各种参数,我的合作者希望通过我正在模拟的实验的“真实版本”来确定其中两个参数。
我们已经准备好将她的实验数据与我的模拟曲线进行比较,但现在我被卡住了,因为我还不能进行任何拟合(到目前为止,我已经用模拟噪声数据替换了实验数据进行测试)。我尝试使用scipy.optimize.leastsq
,它以代码 2 退出(根据文档,这意味着拟合成功),但它大多只是简单地返回值(不完全相同,但接近)我输入作为初始猜测,无论如何接近或远离真实值。如果它确实报告了不同的值,那么得到的曲线仍然与真实曲线有很大不同。
另一个观察结果是infodict['nfev']
总是包含
在使用我的模拟噪声数据时,我玩弄了两个参数的真实值处于相同数量级(因为我认为使用的步长可能只会对其中一个产生明显影响),数量级非常不同,并且我改变了步长(参数epsfcn
),但无济于事。
有谁知道我可能做错了什么,或者我可以使用什么拟合函数来代替leastsq
?如果是这样:提前非常感谢!
编辑
正如 Russ 所建议的,我现在将提供有关如何执行模拟的一些细节:我们正在研究与大分子结合的小分子。这发生的概率取决于它们的相互亲和力(亲和力是要从实验数据中提取的值之一)。一旦发生结合,我们还模拟复合体再次分解需要多长时间(解离时间常数是我们感兴趣的第二个参数)。还有许多其他参数,但它们仅在计算预期信号强度时才变得相关,因此它们与实际模拟无关。
我们从给定数量的小分子开始,每个小分子的状态都被模拟了多个时间步长。在每个时间步,我们使用亲和力值来确定该分子是否与大分子结合,以防它未结合。如果它已经绑定,我们使用解离时间常数和它已经绑定的时间量来确定它是否在此步骤中解离。
在这两种情况下,参数(亲和力、解离时间常数)都用于计算概率,然后将其与随机数(0 到 1 之间)进行比较,在此比较中,它取决于小分子的状态(结合/未绑定)的变化。
编辑 2
没有明确定义的函数可以确定所得曲线的形状,即使该形状明显可重现,但每个单独的数据点都存在随机性。因此,我现在尝试使用optimize.fmin
而不是leastsq
,但它不会收敛,并且在执行最大迭代次数后简单地退出。
编辑 3
正如 Andrea 所建议的,我已经上传了一个示例图。我真的不认为提供样本数据会有很大帮助,它只是每个 x 值(时间)的一个 y 值(信号强度)......
r - R中绘图的最佳拟合曲线
我在一个名为 ph 的图中有一个概率密度函数,它是在 stackoverflow 用户的帮助下从两个数据样本中得出的,以这种方式
我想拟合 ph 曲线的最佳曲线,但我找不到工作方法。我怎样才能做到这一点?我必须从 ph 中提取值然后对它们进行处理?或者有相同的功能
直接地?
r - 何时选择 nls() 而不是 loess()?
如果我有一些 (x,y) 数据,我可以轻松地通过它绘制直线,例如
但对于曲线数据,我想要一条曲线。似乎可以使用 loess() :
这个问题随着我的打字和研究而演变。我开始想要一个简单的函数来拟合曲线数据(我对数据一无所知),并想了解如何使用nls()
或optim()
做到这一点。这似乎是每个人在我发现的类似问题中的建议。但现在我偶然发现loess()
我很高兴。所以,现在我的问题是为什么有人会选择使用nls
oroptim
而不是loess
(or smooth.spline
)?使用工具箱类比,是nls
螺丝刀loess
还是电动螺丝刀(这意味着我几乎总是选择后者,因为它做同样的事情但我的努力更少)?或者是nls
一字螺丝刀和loess
十字螺丝刀(这意味着黄土更适合解决某些问题,但对于其他问题,它根本无法解决问题)?
作为参考,这是我使用的播放数据,它loess
给出了令人满意的结果:
和:
可悲的是,它在这方面做得不太好:
nls() 或任何其他函数或库能否在没有提示的情况下处理这个和前面的 exp 示例(即没有被告知它是正弦波)?
更新:stackoverflow 上相同主题的一些有用页面:
smooth.spline “开箱即用”在我的第一个和第三个示例中给出了很好的结果,但在第二个示例中却很糟糕(它只是连接了点)。但是 f=smooth.spline(x,y,spar=0.5) 在这三个方面都很好。
更新#2:到目前为止,gam()(来自 mgcv 包)很棒:当它更好时,它给出了与 loess() 相似的结果,而当它更好时,它给出了与 smooth.spline() 相似的结果。所有这些都没有提示或额外的参数。文档离我太远了,我觉得我正眯着眼睛看着头顶上飞过的飞机;但发现了一些试验和错误:
excel - 如何将Excel中的数据曲线拟合到多变量多项式?
我有一组简单的数据,增加了 10 个值。
我想将它们拟合为以下形式的多项式: Z = A1 + A2*X + A3*Y + A4*X^2 + A5*X*Y+ A6*Y^2
其中 Z 输出是上面的数据集,A1 - A6 是我正在寻找的系数,X 是输入范围(当然是 10),而 Y 目前是一个常数值。
如何曲线拟合这个多项式而不是使用“趋势线”创建的标准二阶多项式?
python - python scipy.optimize.curve_fit 使用的参数太多
我正在尝试在类实例方法中进行一些曲线拟合,而 curve_fit 函数给我的类实例方法提供了太多参数。
代码是
然后几行方法可以正常工作,那么我的功能是:
和 curve_fit 函数调用
给出错误
我可以通过在类之外定义 get_flow 并像这样调用它来使其工作:
但这并不好,因为它确实需要成为类中的一种方法才能像我想要的那样多才多艺。我怎样才能将这项工作作为类实例方法?
我还希望能够将 self 传递给 get_flow 以为其提供更多不适合 curve_fit 使用的参数的参数。这可能吗?
bezier - 找到通过 N 个点的曲线的贝塞尔控制点
考虑以下为通过 4 个点的曲线找到三次 Bézier 控制点的好解决方案:
如何在 C# 中找到给定开始、结束和 2 个交叉点的 BezierSegment 的控制点 - AKA Cubic Bezier 4-point Interpolation
我想知道,是否有一个直接的扩展来使贝塞尔曲线通过 N 个点,对于 N > 2 并且可能是 N ≤ 20?
c# - 如何获得最接近给定点的三次贝塞尔曲线?
给定 n 个点:
p0, p1, p2, ..., pn;
我怎样才能得到点 c1, c2 使得三次贝塞尔曲线定义为
p0、c1、c2、pn
最接近给定点?
我尝试了最小二乘法。我在阅读http://www.mathworks.com/matlabcentral/fileexchange/15542-cubic-bezier-least-square-fitting中的 pdf 文档后写了这篇文章。但我找不到好的 t(i) 函数。
获得最接近给定点的三次贝塞尔曲线的最佳方法是什么?
例如,这里有 30 分:
这些点分布在由四个点控制的三次贝塞尔曲线周围:
P0 (0, 256), P1 (512, 0), P2 (0, 0), P3 (256, 256)。
假设曲线是从 (0, 256) 到 (256, 256),如何得到靠近原点的剩余两个控制点?
c# - C#中的高斯拟合
在我正在进行的一个项目中,我需要从一组点中获得高斯拟合 - 需要一些处理的均值和方差,并且可能需要一个错误程度(或准确度级别)来让我弄清楚这组点是否真的具有正态分布。
我发现了这个问题
但它仅限于 3 点 - 而我需要一个可以处理任意数量点的合身。
我需要的是类似于labview Gaussian Peak Fit
我查看了 mathdotnet 和 aforge.net (在同一个项目中使用两者),但我没有找到任何东西。
有人知道任何 C# 或(易于转换的)C/C++ 或 Java 解决方案吗?
或者,有人告诉我应该使用迭代算法——我可以自己实现它(如果数学不太复杂的话)。关于我可以使用什么的任何想法?我已经阅读了很多文章(在 Wikipedia 和其他通过 Google 找到的文章),但我没有找到任何明确的解决方案指示。
python - 用python拟合直方图
我有一个直方图
我可以看到形状几乎是高斯的,但我想用高斯函数拟合这个直方图并打印我得到的平均值和西格玛的值。你能帮助我吗?
matlab - 线性最小二乘法符合约束 - 有什么想法吗?
我有一个问题,我使用线性最小二乘法将高阶多项式拟合到(不是很)嘈杂的数据。目前我正在使用 15 - 25 左右的多项式阶数,效果出奇的好:依赖性非常接近线性,但对“非常接近”进行建模的准确性至关重要。我正在使用 Matlab 的 polyfit() 函数,并且(显然)对 x 数据进行规范化。这通常工作正常,但我遇到了一些最近的数据集的问题。拟合多项式在 x 数据区间内具有极值。对于我正在处理的应用程序,这是一个非否。多项式模型在 x 区间上必须没有固定点。
所以我需要为最小二乘问题添加一个约束:拟合多项式的导数必须在已知 x 范围内严格为正(或严格为负 - 这取决于数据,但简单的线性拟合会很快告诉我哪个是的。)我已经快速浏览了可用的优化工具箱功能,但我承认我不知道如何去做。有没有人有什么建议?
[我很欣赏这个数据可能有比多项式更好的模型,但在短期内改变模型的形式是不可行的]
[结束语:我终于可以替换这个糟糕的多项式模型了!我将采用Jonas Lundgren出色的SPLINEFIT代码采用非参数方法,样条平滑。这样做的好处是我已经在最终用户应用程序中使用样条模型,所以我已经有 C# 代码可用于评估样条模型]