Optimization 近似log10[x^k0+;k1]
你好。我在试着近似这个函数 Log10[x^k0+k1],其中.21Optimization 近似log10[x^k0+;k1],optimization,math,sse,simd,approximation,Optimization,Math,Sse,Simd,Approximation,你好。我在试着近似这个函数 Log10[x^k0+k1],其中.21
这将考虑到高于某个值的所有x。您应该能够通过使用改进最小二乘拟合。(这个想法是,你在寻找一个近似值,它在一个范围内的最坏情况偏差是最小的;而最小二乘法寻找的是一个平方差总和最小的近似值。)我想这对你的问题没有太大的影响,但我不确定——希望它能减少你需要划分的范围的数量,有点 如果已经有了
log(x)
的快速实现,可以计算p(x)*log(x)
,其中p(x)是切比雪夫近似选择的多项式。(而不是尝试将整个函数作为多项式近似值来执行--需要更少的范围缩减。)
我是这里的一个业余爱好者——我只是随便说说,因为还没有很多答案。我最近读到了sRGB模型如何将物理三刺激值压缩为存储的RGB值 它基本上与我试图近似的函数非常相似,只是它是逐段定义的: k0x,x<0.0031308 k1 x^0.417-k2否则 我被告知Log[x^k0+k1]中的常数加法是为了使函数的开头更线性。但这很容易通过分段近似实现。这将使近似更加“一致”——只有2个近似范围。由于不再需要计算近似范围索引(整数日志)和执行SIMD系数查找,因此计算成本应该更低
现在,我认为这将是最好的方法,即使它不能精确地近似函数。最困难的部分是提出这一改变并说服人们使用它。那些投票决定结束的人,因此认为数值方法不是编程主题的人,在来世应该遵守克努斯的判断。你得到了什么样的准确度,你需要什么样的准确度?对不起,我忘了说明准确度。我不确定,但我认为一个相对误差,你可以试着用泰勒级数得到一个多项式近似值。然而,导数必须在x=1中计算,因为分数k0使得x=0中的导数未定义。不,这是个坏主意。泰勒级数只使用局部信息,可能是一个非常糟糕的全局拟合。考虑一下用泰勒级数拟合abs(x)。