给定某些实时物理过程(例如网络流量)的数据值,找到“最多”与数据匹配的函数的名称。
我有一组y=f(t)
类型的函数,其中y
和t
是真实的:
funcs = set([cos, tan, exp, log])
和数据值列表:
vals = [59874.141, 192754.791, 342413.392, 1102604.284, 3299017.372]
从命令集中查找函数的最简单的方法是什么,它将生成非常相似的值?
PS:t
从一些正值开始增加几乎相等的间隔
答案 0 :(得分:2)
只需为集合的每个函数写入错误(例如,每个点的错误的二次和),并选择给出最小值的函数。
但在选择
之前,您仍然应该适合每个功能答案 1 :(得分:1)
Scipy有functions来拟合数据,但它们使用多项式或样条函数。你可以使用Gauß'很多discoveries之一,least squares的方法来适应其他功能。
答案 2 :(得分:1)
我会尝试一种基于拟合的方法。对于四个测试函数中的每一个(f1-4见下文),a和b的值最小化平方误差。
f1(t) = a*cos(b*t)
f2(t) = a*tan(b*t)
f3(t) = a*exp(b*t)
f4(t) = a*log(b*t)
拟合后,四个函数的平方误差可用于评估拟合优度(低值意味着良好拟合)。
如果根本不允许拟合,则可以将四个函数分为两个不同的子组,重复函数(cos和tan)和严格增加函数(exp和log)。 通过检查所有给定值是否在整个测量间隔内增加,可以识别严格增加的功能。
在伪代码中,算法可以像
那样构造if(vals are strictly increasing):
% Exp or log
if(increasing more rapidly at the end of the interval):
% exp detected
else:
% log detected
else:
% tan or cos
if(large changes in vals over a short period is detected):
% tan detected
else:
% cos detected
请注意,这种方法并不稳定,很容易导致错误的结论。
答案 3 :(得分:0)