问题标签 [numerical-methods]
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.
r - 实三次多项式的最快数值解?
R 问题:寻找最快的方法来数值求解一堆已知具有实系数和三个实根的任意三次方。据报道,R 中的 polyroot 函数将 Jenkins-Traub 的算法 419 用于复杂多项式,但对于实数多项式,作者参考了他们早期的工作。对于实数三次或更一般的实数多项式,更快的选择是什么?
c++ - 使用 Visual Studio 2008 在 C++ 中实现逐次逼近算法的问题
我正在尝试实现我们在数值方法类中所做的算法。我有一个用 Maple 编写的相同程序,它工作正常。我不明白为什么它不能在 C++ 中工作。
任何帮助或提示将不胜感激;提前致谢。
运行代码时,它会询问允许的迭代次数,并在插入后关闭。
math - 半正定矩阵和数值稳定性?
我正在尝试对共现矩阵 (C) 进行因子分析,该矩阵是从术语文档矩阵 (TD) 计算得出的,如下所示: C=TD*TD'
理论上 C 应该是半正定的,但事实并非如此,因此因子分析算法无法使用它。由于速度原因,我无法更改算法)。
我查了一下,这可能是一个数值稳定性问题: 一种用于生成半正定矩阵的简单算法 - 答案 2。
在这里进行的好方法是什么?
binary - 将重复的二进制数转换为十进制数(表示为系列?)
给定一个重复的二进制数,例如 0.(0011) 或 0.0(101),如何将其转换为十进制?
到目前为止,我能够挖掘出的是将终止二进制数转换为十进制的简单方法,如下所示:
其中 res 是步骤 N 之后的结果,N 是当前迭代 (N=0; n->(num binary digits))。例如,将其重复应用于非终止二进制数会得到一个很好的近似值
大约是 0.4。
所以,我有一种计算近似值的方法,但我正在努力寻找表达这一点的方法。我已经开始尝试把它写成一个系列,我可以在极限情况下计算为 n->inf 到目前为止没有太大的成功。
logarithm - 使用对数避免数值下溢的算术问题
我有两个分数列表;
说A = [ 1/212, 5/212, 3/212, ... ]
和B = [ 4/143, 7/143, 2/143, ... ]
。
如果我们定义A' = a[0] * a[1] * a[2] * ...
和B' = b[0] * b[1] * b[2] * ...
我想计算A' / B'
,
我的问题是 A 和 B 都很长,每个值都很小,所以计算乘积会很快导致数值下溢......
我了解通过对数将乘积转化为总和可以帮助我确定 A' 或 B' 中的哪个更大
IEmax( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
但我需要实际比例....
迄今为止,我最好的选择是将数字表示形式保留为分数,即A = [ [1,212], [5,212], [3,212], ... ]
实现我自己的算术,但它变得笨拙,我觉得我只是缺少一种(简单的)对数方式......
A 和 B 的分子不是来自序列。出于这个问题的目的,它们也可能是随机的。如果它有助于 A 中所有值的分母相同,则 B 中的所有分母也相同。
欢迎任何想法!
垫
logarithm - 使用对数避免数值下溢的算术问题(取 2)
我有两个分数列表;
说A = [ 1/212, 5/212, 3/212, ... ]
和B = [ 4/143, 7/143, 2/143, ... ]
。
如果我们定义A' = a[0] * a[1] * a[2] * ...
和B' = b[0] * b[1] * b[2] * ...
我想计算 A' 和 B' 的归一化值
即特别是A' / (A'+B')
和 的值B' / (A'+B')
我的问题是 A 和 B 都很长而且每个值都很小,所以计算乘积会很快导致数值下溢......
我了解通过对数将乘积转化为总和可以帮助我确定 A' 或 B' 中的哪个更大
IEmax( log(a[0])+log(a[1])+..., log(b[0])+log(b[1])+... )
并且使用日志我可以计算出价值,A' / B'
但我该怎么做A' / A'+B'
迄今为止,我最好的选择是将数字表示形式保留为分数,即A = [ [1,212], [5,212], [3,212], ... ]
实现我自己的算术,但它变得笨拙,我觉得我只是缺少一种(简单)对数方式......
A 和 B 的分子不是来自序列。出于这个问题的目的,它们也可能是随机的。如果它有助于 A 中所有值的分母相同,则 B 中的所有分母也相同。
欢迎任何想法!
(ps。我在24 小时前就该比率提出了类似的问题A'/B'
,但这实际上是一个错误的问题。我实际上是在追问A'/(A'+B')
。对不起,我的错误。)
r - 如何在 R 中获得机器 epsilon?
是否存在将机器 epsilon 存储在 R 中的常数?
algorithm - 如何快速找到二进制对数?(最多为 O(1))
有没有什么非常快速的方法可以找到一个整数的二进制对数?例如,给定一个数字 x=52656145834278593348959013841835216159447547700274555627155488768,这样的算法必须找到 y=log(x,2),即 215。x 始终是 2 的幂。
问题似乎很简单。所需要的只是找到最高有效 1 位的位置。有一个众所周知的方法 FloorLog,但它不是很快,特别是对于很长的多字整数。
最快的方法是什么?
algorithm - 为大量数据计算分位数的增量方法
我需要计算大量数据的分位数。
假设我们只能通过某些部分(即大矩阵的一行)获取数据。要计算 Q3 分位数,需要获取数据的所有部分并将其存储在某处,然后对其进行排序并计算分位数:
我想找到一种无需将数据存储在中间变量中即可获得分位数的方法。最好的解决方案是计算第一行的中间结果的一些参数,然后逐步调整下一行。
笔记:
- 这些数据集非常大(每行大约 5000 个元素)
- 可以估计 Q3,它不必是精确值。
- 我将数据的部分称为“行”,但它们可以有不同的长度!通常它变化不大(+/-几百个样本),但它会有所不同!
这个问题类似于用于估计统计中位数、众数、偏度、峰度的“在线”(迭代器)算法,但我需要计算分位数。
该主题中也有几篇文章,即:
在尝试实施这些方法之前,我想知道是否还有其他更快的方法来计算 0.25/0.75 分位数?
lisp - Lisp、OCaml 或 Runge Kutta 的什么?
您建议使用哪种语言来解决系统:
- 一阶微分方程
- 复杂变量
- N维
使用 4 阶 Runge Kutta 等。
速度很重要,但会牺牲:
- 优雅(简洁)的代码
- 灵活性+可扩展性
我主要介于 Lisp 和 OCaml 之间,但欢迎任何其他建议。
谢谢!