问题标签 [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.
matlab - 求解受限于给出非负解的延迟微分方程 (DDE) 系统
在 MATLAB 中,ode45
有一个名为的参数NonNegative
将解约束为非负数。他们甚至写了一篇关于这种方法如何工作的论文,以及它如何不像将 y_i 设置为 0 那样愚蠢,因为它通常不会起作用。
现在,MATLAB 也有dde23
用于求解延迟微分方程的功能,但NonNegative
该积分器没有等效参数。
不幸的是,我的任务是向现有的 ODE 系统添加延迟,该系统可以使用ode45
with NonNegative
enabled 解决。
任何想法我应该如何进行?
编辑:
我不确定这是否有帮助,但是...
我系统的 DDE 部分基本上如下所示:
其中X
(第三个等式中的大写字母变量)是 的延迟版本x
。然后,我将这个 DDE 系统链接到现有的(和更大的)ODE 系统,方法是在x
和的方程中添加几个项z
,然后将组合系统整合在一起。
matlab - 求解超定约束系统
我有n
实数变量(不知道,不在乎),我们称它们为X[n]
. 我也有m >> n
他们之间的关系,我们称他们R[m]
为 ,形式为:
X[i] = alpha*X[j]
,alpha
是一个非零正实数,i
并且j
是不同的,但该(i, j)
对不一定是唯一的(即具有不同 alpha 因子的相同变量之间可能存在两种关系)
我正在尝试做的是找到一组alpha
参数,以某种最小二乘的方式解决超定系统。理想的解决方案是最小化每个方程参数与其选择值之间的差异平方和,但我对以下近似值感到满意:
如果我将 m 个方程转换为 n 个未知数的超定系统,任何基于伪逆的数值求解器都会给我一个明显的解(全为零)。所以我目前所做的是在混合中添加另一个方程x[0] = 1
(实际上任何常数都可以)并使用 Moore-Penrose 伪逆以最小二乘法求解生成的系统。虽然这试图最小化 的总和(x[0] - 1)^2
和 的平方和x[i] - alpha*x[j]
,但我发现它是我的问题的一个很好且数值稳定的近似值。这是一个例子:
在八度:
a
这会产生, b
, c
:的值,[0.99383; 0.51235; 0.19136]
这给了我以下(合理的)关系:
所以现在我需要在 C/C++/Java 中实现这个,我有以下问题:
有没有更快的方法来解决我的问题,或者我在生成超定系统和计算伪逆方面是否走在正确的轨道上?
m
我目前的解决方案需要一个奇异值分解和三个矩阵乘法,考虑到可能是 5000 甚至 10000有点多。是否有更快的方法来计算伪逆(实际上,我只需要它的第一列,而不是给定矩阵的稀疏性(每行恰好包含两个非零值,其中一个始终为一个,另一个始终为负)
您建议为此使用哪些数学库?LAPACK好吗?
我也对任何其他建议持开放态度,只要它们在数值上稳定且渐近快速(比如说k*n^2
,哪里k
可以很大)。
numpy - 找到最平滑的 15% 曲线
找到类似于下面曲线的最平滑 15% 的最佳方法是什么?
我需要知道开始和结束的 x 坐标。我曾考虑过使用导数函数,但这会给我一个具有最小导数的点,它可能总是也可能不总是最平滑的 15% 的一部分。
我应该查看或建议的任何算法?
java - 限制 GWT 中的小数位数?
decimalCount
在纯 Java 中,我通常会有一个类似下面的函数来限制给定数字的小数位数value
。但是,根据 GWT 文档,“GWT 没有为日期和数字格式化类(例如 java.text.DateFormat、java.text.DecimalFormat、java.text.NumberFormat 和 java.TimeFormat)提供完整的模拟。” 为了使其在 GWT 中工作,人们会对以下功能做什么?
algorithm - 多项式最小不动点的高效计算
让 P(x) 表示所讨论的多项式。P 的最小不动点 (LFP) 是 x 的最小值,使得 x=P(x)。多项式具有实系数。一般来说,不能保证 LFP 会存在,尽管如果度数为奇数且 ≥ 3,则可以保证存在。如果度数为 3,我知道一个有效的解决方案。x=P(x) 因此 0=P( x)-x。有一个封闭形式的三次公式,求解 x 有点简单,可以硬编码。2 级和 1 级同样容易。这是我遇到麻烦的更复杂的情况,因为我似乎无法为任意程度提出一个好的算法。
编辑:
我只考虑真正的不动点并取其中最少的,不一定是绝对值最小的不动点。
algorithm - 可变半径高斯模糊,逼近内核
我正在编写具有可变半径(标准偏差)的高斯模糊,即图像的每个像素都使用不同的内核进行卷积。计算高斯模糊的标准技术在这里不起作用:FFT、轴分离、重复框模糊——它们都假设内核对于整个图像是相同的。
现在,我正在尝试使用以下方案来近似它:
使用由一组 N 组轴对齐矩形 R k和系数 α k定义的分段常数函数 f(x,y) 逼近高斯核 K(x,y) :
f(x,y) = ∑<sub>k=1 N α k ·χ R k (x,y)
让 g(x,y) 成为我们的图像,然后
∬<sub>ℝ<sup>2 K(x,y)·g(x,y) dxdy ≈ ∬<sub>ℝ<sup>2 f(x,y)·g(x,y) dxdy = ∑< sub>k=1 N α k ·∬<sub>R k g(x,y) dxdy
RHS 上的积分是矩形上的简单积分,因此可以通过预先计算整个图像的部分和来在恒定时间内计算。
生成的算法在 O(W·H·N) 中运行,其中 W 和 H 是图像的尺寸,N 与近似误差成反比 (AFAIK)。
剩下的部分是找到一个好的逼近函数 f(x,y)。当给定矩形数量 N(最小化误差)或给定误差(最小化矩形数量)时,如何找到高斯的最佳近似值?
c++ - 计算平均值的最佳数值方法是什么
计算平均值的最佳方法是什么?有了这个问题,我想知道哪种计算平均值的算法在数字意义上是最好的。它应该具有最小的舍入误差,不应该对上溢或下溢等敏感。
谢谢你。
附加信息:首选增量方法,因为值的数量可能不适合 RAM(对大于 4 GB 的文件进行多次并行计算)。
algorithm - 有没有什么快速的方法来确定 n^n 上的前 k 位数字
我正在编写一个程序,我只需要知道另一个大数字的前 k 个(k 可以是 1-5 之间的任何位置)数字,可以表示为 n^n,其中 n 是一个非常大的数字。
目前我实际上正在计算 n^n 然后将其解析为字符串。我想知道是否存在更好更快的方法。
c++ - 是否有用于常微分方程 (ODE) 求解器的 c++ 库?
更具体地说,我对基于 Runge-Kutta 和刚性方程的 8 阶 Dormand-Prince 嵌入式方法感兴趣。
我使用 Numerical Recipes 3,但我经常无法编译他们的库。我想知道替代方案。
c++ - 将 boost 与数字配方 3 代码集成
当我同时使用 nr3.h 和 boost 库时,我得到了一堆错误。
我使用带有 libboost1.40 的 ubuntu 10.04 和来自http://www.nr.com/的代码(第 3 版)
尝试.cc:
我编译了代码“g++ try.cc”,我得到了错误。如果我注释掉 nr3.h 行或 < boost ... > 行,代码编译得很好。
以下是错误:
更新:我还在 nr.com 论坛 (http://www.nr.com/forum/showthread.php?t=2148) 上发布了它。并得到回应,问题是 nr3.h 为 throw() 定义了宏。我仍然不确定什么可能是一个强大的解决方案。