标签: approximation

113
推荐指数
5
解决办法
5万
查看次数

神经网络的逼近函数

我试图使用我自己编写的神经网络来近似sine()函数.我已经在一个简单的OCR问题上测试了我的神经网络并且它有效,但我无法应用它来近似sine().我的问题是在训练期间我的误差正好收敛到50%,所以我猜它完全是随机的.

我使用一个输入神经元作为输入(0到PI),一个输出神经元用于结果.我有一个隐藏层,我可以在其中改变神经元的数量,但我目前正在尝试6-10左右.

我有一种感觉问题是因为我使用sigmoid传递函数(这是我的应用程序中的一个要求),它只输出0到1之间,而sine()的输出介于-1和1之间.试图纠正我尝试将输出乘以2然后减去1,但这并没有解决问题.我想我必须在某处做某种转换才能使这项工作成功.

有任何想法吗?

machine-learning approximation neural-network

22
推荐指数
2
解决办法
2万
查看次数

将double加倍到int

我有一个来自int/int的数字("double")(例如10/3).

什么是Excess逼近的最佳方法,并将其转换为C#中的int?

c# math double int approximation

21
推荐指数
2
解决办法
4万
查看次数

为什么浮点数的整数表示提供对数的分段线性近似?

如果您正在阅读有关 20 世纪 90 年代图形学发展的新闻,您可能会关注 Jim Blinn 在IEEE 计算机图形与应用中的专栏“Jim Blinn 的角落”。1997 年夏天,您可能会在名为“浮点技巧”的专栏中打开您的问题。所有的技巧都基于 Blinn 从微软的两位老手 Steve Gabriel 和 Gideon Yuval 那里传授的以下知识:

\n

如果只处理正数,则将浮点数的位模式解释为整数,给出对数函数的分段线性近似

\n

我的问题是,浮点数是什么导致了这个特性?

\n

示范

\n
\n// These will result in undefined behavior\n// and are not the \'right\' way to do this\n// but I am following Blinn 1997 here\nint AsInteger(float f) {\n    return * ( int * ) &f;\n}\n\nfloat AsFloat(int i) {\n    return * ( float * ) &i;\n}\n\n// FISR demonstrating the logaritmic …
Run Code Online (Sandbox Code Playgroud)

math floating-point logarithm approximation

21
推荐指数
3
解决办法
1万
查看次数

如何比较那些双打序列在Java中是否"大致相等"?

我在java中有一个返回双数的方法,我想比较每次调用方法时返回的每个双数(比如说5次),这样我就可以得出每次返回的数字几乎相同的结论.

我怎样才能做到这一点?

java double approximation

20
推荐指数
4
解决办法
3万
查看次数

移动物体的近似,增量最近邻算法

赏金

这个问题提出了几个问题.赏金将回答整体上的问题.


这是我一直在玩的问题.

注意我对不在欧几里得空间的解决方案特别感兴趣.

有一组Actors形成一个大小为K的人群.d(ActorA,ActorB)对于任何两个演员来说,距离很容易计算(解决方案应该适用于'距离'的各种定义)并且我们可以找到任何给定Actor使用的N个最近邻居的集合任何一种已建立的算法.

这个邻居集在第一瞬间是正确的,但是Actors总是在移动,我想维护每个Actor的N个最近邻居的进化列表.我感兴趣的是近似解决方案,它比完美解决方案更有效.

  1. 在引入错误之后,解决方案应该收敛到正确性.
  2. 如果错误变得太大而有时执行完全重新计算是可以接受的,但检测这些错误应该是便宜的.

到目前为止,我一直在使用一个朋友的朋友算法:

recompute_nearest (Actor A)
{
    Actor f_o_f [N*N];
    for each Actor n in A.neighbours
        append n to f_o_f if n != A and n not in f_o_f

    Distance distances [N*N];
    for 0 <= i < f_o_f.size
        distances [i] = distance (A, f_o_f [i])

    sort (f_o_f, distances)
    A .neighbours = first N from f_o_f
}
Run Code Online (Sandbox Code Playgroud)

当人群缓慢移动且N适当大时,这表现得相当好.它在小错误之后收敛,满足第一个标准,但是

  • 我没有很好的方法来检测大错误, …

algorithm optimization distance approximation spatial-index

18
推荐指数
1
解决办法
1413
查看次数

通过球体的联合近似实体

我有一个3D实体,表示为一组多面体凸壳的联合.(或者单个凸起,如果这样可以使事情变得更容易.)我想将该实体近似为一组球体的并集,以最小化集合中球体的数量和近似中的误差.(后一个目标是刻意模糊的:任何合理的误差度量都可以.同样,目标组合的方式在空中;要么球体的数量或误差度量可能受到限制,要么两者的某些功能可以最小化.我不想把自己指定到一个角落.)

近似值不需要完全包含原始集合完全包含在原始集合中.每个球体可以具有任意半径.

这感觉就像NP完全的问题,并且在任何情况下都不太可能使用精确方法,所以我假设解决方案在于随机优化领域.感觉k-means的某些变体可能适合(将未覆盖的位置分配给它们最近的球体,并精炼球体以覆盖其中的一些),但我不确定如何处理多重覆盖的位置,或者如何找到局部的,不一定是覆盖 - 即使对于单个球体也是最佳的.此外,对于迭代方法,效率很重要,并且执行3D布尔操作不会有效.

mathematical-optimization approximation convex computational-geometry

18
推荐指数
2
解决办法
881
查看次数

用 10 条或更少的指令实现 tanh(x) 的最佳非三角浮点近似

描述

\n

对于没有内置浮点三角学的机器,我需要一个相当准确的快速双曲正切,因此例如通常的tanh(x) = (exp(2x) - 1) / (exp(2x) + 1)公式将需要近似值exp(2x)
\n所有其他指令,如加法、减法、乘法、除法,甚至 FMA(= 1 次操作中的 MUL+ADD)都存在。

\n

现在我有几个近似值,但没有一个在准确性方面令人满意。

\n

[评论更新:]

\n
    \n
  • trunc()/的说明floor()可用
  • \n
  • 有一种方法可以透明地将浮点数重新解释为整数并执行各种位操作
  • \n
  • 有一系列称为 SEL.xx(.GT、.LE 等)的指令,它们比较 2 个值并选择要写入目标的内容
  • \n
  • DIV 慢两倍,所以没有什么异常,DIV 可以使用
  • \n
\n

方法一

\n

\n

精度:\xc2\xb11.2% 绝对误差,请参见此处

\n

伪代码(A = 累加器寄存器,T = 临时寄存器):

\n
[1] FMA T, 36.f / 73.f, A, A   // T := 36/73 + X^2\n[2] MUL A, A, T                // A := X(36/73 …
Run Code Online (Sandbox Code Playgroud)

algorithm math floating-point ieee-754 approximation

16
推荐指数
2
解决办法
786
查看次数

使用查找表计算(x指数0.19029)低内存?

我正在为PIC微控制器编写一个C程序,它需要做一个非常具体的指数函数.我需要计算以下内容:

A = k.(1 - (p/p0)^ 0.19029)

k和p0是常数,所以除了找到x ^ 0.19029之外,它们都非常简单

(p/p0)比率总是在0-1范围内.

如果我添加math.h并使用power函数,它会很好用,除了耗尽所有可用的16 kB程序存储器.谈论英国媒体报道!(没有电源功能的其余程序= ~20%闪存使用率;添加math.h和电源功能,= 100%).

我希望该程序还可以做其他一些事情.我想知道我是否可以为x ^ 0.19029编写一个特殊的案例实现,可能涉及迭代和某种查找表.

我的想法是为函数x ^ 0.19029生成一个查找表,在0-1范围内可能有10-100个x值.代码将找到一个紧密匹配,然后(不知何故)通过重新缩放查找表值来迭代地改进它.然而,这是我迷失的地方,因为我的小脑无法想象所涉及的数学.

这种方法有用吗?

或者,我已经看过使用Exp(x)和Ln(x),它可以用泰勒展开来实现.b ^ x可以找到:

b ^ x =(e ^(ln b))^ x = e ^(x.ln(b))

(参见:维基百科 - 通过对数的权力)

不过,这看起来有点棘手和复杂.我可能会比编译器的数学库更小的实现,并且我可以根据我的特殊情况简化它(即base = 0-1,exponent始终为0.19029)?

请注意,此刻RAM使用率还可以,但我在Flash上​​运行不足(用于代码存储).速度并不重要.有人已经建议我使用更大的微处理器和更多的闪存,但这听起来像挥霍无度!

[编辑]当我说"(p/p0)比率总是在0-1"范围内时,我很懒.实际上它永远不会达到0,我昨晚做了一些计算并确定实际上0.3到1的范围就足够了!这意味着下面的一些更简单的解决方案应该是合适的.另外,上面的"k"是44330,我希望最终结果中的误差小于0.1.我猜这意味着(p/p0)^ 0.19029中的误差需要小于1/443300或2.256e-6

c math lookup exponent approximation

14
推荐指数
2
解决办法
1376
查看次数

javascript中最快的斜边?

我在javascript中看到了很多关于模拟和动画的问题,通常涉及计算斜边:

hypot = Math.sqrt(x*x + y*y);
Run Code Online (Sandbox Code Playgroud)

由于笛卡尔坐标是大多数这些引擎中的首选武器,因此需要进行这些计算以找到点对之间的距离等.因此,计算斜边的任何加速都可能对许多项目有很大帮助.

为此,您能看到比上述简单实现更快的方法吗?我发现Chrome中的近似值稍微快一些,但根据SuperCollider中的近似函数, Firefox中的近似值要慢得多.

编辑2015-08-15:我已将接受的答案改为Math.hypot答案; 我怀疑目前的实用方法是使用Math.hypot或合成的hypot函数(如果不可用),并且如果足够并且Math.hypot不可用则与square(每个sch的答案)进行比较.

javascript math approximation

13
推荐指数
3
解决办法
6204
查看次数