问题标签 [function-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.

0 投票
1 回答
159 浏览

algorithm - 通过区间拟合函数

我有实数区间的有限序列,R i = (R imin , R imax ) 和实数序列 t i,i=1..N。

我的目标是找到一个函数 f:R->R,其中每个 i 是区间 R i中的 f(t i ) 。

在下图中 X 轴上的图像是每条红线下的 t i值,对应于间隔 R i,绿线是可能的解决方案之一(在这种情况下为常数)。

拟合函数

我知道我需要函数 f 是连续的并且至少可以微分到三阶,并且它也应该“尽可能平滑”。当可能是线性的时,它应该是。我想到了用一些样条拟合区间中点的解决方案,但这会带来过度拟合的问题,而且很明显,该函数在某种意义上可能是“更平滑”的,尽管我没有确切的度量为了那个原因。在我的示例图像中,它将创建一个明显不好的解决方案,即使不存在线性解决方案也是如此。

我知道这个“平滑度”标准有点模糊。函数 f 将是机器在一个轴上及时的运动,所以我需要它尽可能少地移动而没有任何跳跃或快速的速度变化,但我不想太精确地定义它,因为它会缩小可能方法。

我在工作和学习期间从未遇到过类似的问题,我不知道它是否有一些标准名称,我可以谷歌搜索并进一步研究。我试图搜索我的问题的描述和关键字,但没有成功。

我不知道这是 SO 还是 MO 的问题,但我需要创建一个算法来查找函数 f,所以我将它发布在这里。

任何帮助都感激不尽。

马泰

0 投票
1 回答
353 浏览

python - Python中的电阻率非线性拟合

我试图在一组实验数据中拟合固体中电阻率的爱因斯坦近似值。我有电阻率与温度的关系(从 200 到 4 K)

但我收到这些警告

我不明白为什么它一直说在 sinh 中除以零,因为我有严格的正值。改变我的起始猜测对其没有影响。

编辑:我的数据集是这样组织的:

其中第一列是温度,第二列是电阻率(负值是由于试验电流中的噪声,因为样品是 PbIn 合金,它在低于 6.7-6.9K 的温度下变得超导,这里我们是 4.5K)。

我提供给 sinh 的参数是 Numpy 数组,ro0 + AE*T我的代码具有线性函数。我试过了,scipy.optimize.minimize但结果是一样的。现在我看到我的文件中有将近九百个值,这可能是问题所在吗?

我已经编辑了我的数据集删除了一些行,现在唯一显示的警告是

我该如何解决?

0 投票
1 回答
4227 浏览

csv - gnuplot - 如何计算 csv 文件列中的条目数?

我有一个 gnuplot 代码,其中包括一个函数拟合例程。

当必须拟合大量数据点时,此例程很慢。我的输入文件中的数据点数量是可变的,具体取决于我正在运行的一些模拟的参数。

我希望只适合 100 分。到目前为止,我一直在通过手动计算输入文件中的条目数并除以 100 并将结果数用作拟合命​​令的“每个 N”命令来执行此操作。

更多详情:

我正在使用的拟合命令是:

其中 N = integer_round_down(output_file_length / 100.0) - 我在计算器上手动计算这个值,然后在我的 gnuplot 脚本中手动替换 N 的值。(好吧,除以 100,我是在脑海中计算的,而不是在计算器上。)

有什么方法可以让我获得任何列中的条目数,例如 col 1、col 4 或 col 9 ... 然后在我的脚本中使用变量来计算 N,而不必每次更改我的模拟时编辑我的脚本参数?

0 投票
1 回答
1223 浏览

plot - gnuplot - 如何每 N 个数据点拟合一个函数

我正在使用 gnuplot 和函数拟合工具对我的一些数据执行最小二乘拟合。

我有很多数据点(有时数千万),因此不可能拟合所有数据点。(或者至少太慢以至于不实用。)

可以使用关键字(编辑:不应该!)后跟一个整数 N 来绘制数据点,every以便每隔 N 个点绘制一次。pointintervalevery

例如plot 'data.csv' using 1:2 pointinterval 1000绘制每千个数据点。在绘制数百万个点时很有用——否则你看不到任何有用的东西。

是否有类似的拟合方法,即只拟合每 1000 个点?

我试过fit 'data.csv' f(x) using 1:2 pointinterval 1000 via a,bwhereabare parameters of my f(x)- 但我只是得到一个错误:';' expected.

我还尝试使用谷歌搜索并阅读有关 gnuplot 绘图的文档,但没有找到任何东西。

或者,我可以将我的程序代码更改为仅将每 1000 个点写入数据文件,但随后我将必须拥有 2 批数据文件 - 一个包含所有点,一个包含每 1000 个数据点中的 1 个......这似乎有点浪费。

编辑:我不确定为什么我认为every这是正确的语法。原来它应该是pointintervalpi短)后跟一个整数。

但是,这仅适用于绘图,不适用于函数拟合,因此问题仍然悬而未决。

0 投票
1 回答
5338 浏览

variables - gnuplot - 获取拟合参数错误,获取拟合输出值作为变量,将变量打印到屏幕

最初的问题(部分回答)

我正在使用 gnuplot 的拟合例程将函数拟合到某些数据,并提取“特征衰减时间常数”。d(我在我的拟合函数中调用这个参数。)

我使用脚本代码set fit quiet来防止将大量文本打印到终端。但是我现在无法知道最终的拟合值是多少!(除了检查日志文件......这是艰巨的......)

有没有办法我可以取回最终的拟合参数值,将它们存储在变量中,然后打印该变量?

我想这是一个 2 个问题...如何打印变量值?

回答最初的问题

因此,在玩了一些 gnuplot 之后,我发现该print命令可以将变量打印到屏幕上,并且参数,例如d,已经可用作变量 - 即;它们已经是变量。

所以我可以执行以下操作:print "d=",d- 这里的逗号用于分隔您要打印的内容。所以我首先打印一个字符串"d=",然后是d.

下一个问题

如何获取我使用的变量的错误?例如; 如果我用参数 a、b 和 c 拟合一个函数,我如何在这些值上打印错误?

0 投票
0 回答
471 浏览

gnuplot - gnuplot - 由于复数(未定义值),函数拟合失败

我正在使用 gnuplot 来拟合一些数据,但是我注意到有时我的函数无法拟合。我相信这是由于undefined value取负数的平方根而引起的。(我的理解是 gnuplot fit 无法处理复数。)

我正在使用循环批处理我的所有数据文件,这个问题导致脚本中止。

我不介意它不适合该功能 - 但脚本不应中止,因为这会使批处理的全部意义变得毫无意义,因为它在数百个数据文件 5 上失败。

我已启用set fit quiet,但这似乎并不能解决问题。

continue即使一次拟合失败,我如何强制 gnuplot尝试拟合下一个数据文件?

作为参考,我正在拟合的函数如下:(这不是最简单的代数形式 - 这种形式用于避免被小数除。)

f(x) = (b c) / ( [c 2.0] + c [b 2.0 - c**2.0]*exp(x/e) ) - 其中 b,c,e 是拟合参数

所以要澄清一下 - 有时拟合“收敛到 c 为负的拟合”,这导致底部平方根无法评估 - 这打破了包含 fit 命令的 for 循环 - 我怎样才能阻止拟合失败跳出循环?

0 投票
2 回答
11676 浏览

gnuplot - gnuplot - Does `set xrange [x_min:x_max]` limit the ranged used for function fit?

Simple question - the range drawn on a plot can be changed with the set xrange [x_min:x_max] command.

Does this command also limit the range used when fitting a function using the data fitting tools in gnuplot? Is there a way to manually specify the ranged used for function fits? (One guess might be the command every? Do I need to over-ride xrange using every?)

The reason I ask is that I am using xrange to plot outputs zoomed in on the low value x region to view transient behaviour more clearly, but I think this may be "slicing off" values from the function fitting at larger x values outside the xrange region selected?

0 投票
0 回答
65 浏览

matlab - 将高斯分布拟合到经验数据

我有 2 个数据向量(蓝色的 data1,红色的 data2)代表某种概率(它们不是真正的概率,即总和可能与 1 不同)。从下图中可以看出,data1 可以近似为高斯分布。

data2 应遵循二元高斯分布(仅应考虑靠近蓝线起点和终点的峰,其余的可视为噪声)。

我的问题是:在 matlab 中有没有办法用高斯和双变量高斯分布来近似蓝线和红线?如何?

我想这样做是为了过滤掉 data1 中的第一个凸起以及 data2 中的第一个和第三个凸起。我想使用这种方法而不是一些平滑...

在这里您可以下载data1data2来重现图表。

谢谢

在此处输入图像描述

0 投票
0 回答
444 浏览

matlab - Matlab - 使用 lsqcurvefit 的 MultiStart

我正在尝试使用lsqcurvefitlinked with来拟合函数MultiStart。问题是获得的结果与训练数据高度不一致。

整个问题与串联连接的两个 RC 并联电路的频率响应(通过实验获得 -xdata,ydata-)以及通过拟合适当的阻抗方程计算 R、C 值有关。

我遵循的步骤是(根据 mathworks 教程):

第一步(创建目标函数)

第二步(创建训练数据)

第三步(设定界限)

第四步(设置问题)

第五步(运行MultiStart

运行上述过程后,我得到的结果如下:

在线下方附加的图中,空心圆圈分别对应于 c 初始值和优化值。

在此处输入图像描述

我无法理解为什么错误如此之大。我的代码或我处理问题的方式有问题吗?这可能是由于我的小 matlab 经验,但我一直在努力寻找解决方案。

任何帮助将不胜感激。

提前感谢您的宝贵时间。

0 投票
2 回答
3299 浏览

r - 非常高的残差平方和

我对拟合的残差平方和有疑问。残差的平方和太高,说明拟合不是很好。但是,从视觉上看,拥有如此高的剩余价值看起来不错……谁能帮我知道发生了什么?

我的数据:

然后使用 nlsLM 函数(minpack.lm 包)进行拟合:

情节:点和拟合

这个值是残差:

平方和残差太高:12641435 ...

是这样还是调整有问题?这是坏的?