问题标签 [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 - MATLAB code help. Backward Euler method
Here is the MATLAB/FreeMat code I got to solve an ODE numerically using the backward Euler method. However, the results are inconsistent with my textbook results, and sometimes even ridiculously inconsistent. What is wrong with the code?
floating-point - 我应该如何处理可能变得如此之小以至于变为零的浮点数
所以我刚刚修复了以下代码中的一个有趣的错误,但我不确定我采用的最佳方法:
因为结果不需要精确,我通过简单地保持最小的非零值来解决这个问题,如果 p 变成 0 就使用它。
这行得通,但对我来说似乎有点笨拙。我不做大量这种数值编程,我不确定这是否是人们使用的那种修复方法,或者是否有更好的东西我可以去做。
python - Python+Scipy+Integration:处理带有尖峰的函数中的精度错误
我正在尝试使用 scipy.integrate.quad 在非常大的范围内(0..10,000)集成一个函数。该函数在其大部分范围内为零,但在非常小的范围内(例如 1,602..1,618)有一个尖峰。
积分时,我希望输出为正数,但我猜想quad的猜测算法不知何故变得混乱并输出零。我想知道的是,有没有办法克服这个问题(例如,通过使用不同的算法、其他一些参数等)?我通常不知道尖峰会在哪里,所以我不能只拆分积分范围并对各部分求和(除非有人知道如何做到这一点)。
谢谢!
样本输出:
algorithm - 如何计算算法的精确复杂度?
在不使用渐近符号的情况下,繁琐的步数计算是获得算法时间复杂度的唯一方法吗?如果没有每行代码的步数,我们可以得到任何程序的大 O 表示吗?
细节:试图找出几种数值分析算法的复杂性,以决定哪种算法最适合解决特定问题。例如 - 从用于求解 eqns 的 Regula-Falsi 或 Newton-Rhapson 方法中,目的是评估每种方法的确切复杂性,然后决定(输入“n”的值或存在的任何参数)哪种方法不太复杂。
computational-geometry - 以 3D (R^3) 计算与已知向量的垂直向量,两者均嵌入同一平面
在我看来,这是一个非常简单的问题,但今天我自己似乎找不到一个合理的答案。我有两个点,R^3(3D)中的 A 和 B 属于平面 PI。我想在 PI 中找到一个向量 r,它垂直于向量 v = A - B。我知道向量 n,即平面 PI 的法线。从数学上讲,我可以解 vr = 0 和 vxr = n,但是这个系统在 r 方面的解涉及一些我怀疑可能带来一些数值不稳定性的除法。你能建议我解决这个问题的任何数值/计算上的好方法吗?
提前致谢,
费德里科
language-agnostic - 多元二等分法
我需要一种算法来执行二维二等分法来解决 2x2 非线性问题。示例:两个方程f(x,y)=0
,g(x,y)=0
我想同时求解。我非常熟悉一维二分法(以及其他数值方法)。假设我已经知道解决方案位于界限x1 < x < x2
和y1 < y < y2
.
在网格中,起始边界是:
我知道这些值f(A), f(B), f(C) and f(D)
以及g(A), g(B), g(C) and g(D)
. 要开始二分,我想我们需要将点沿边缘和中间分开。
现在考虑组合的可能性,例如检查是否f(G)*f(M)<0 AND g(G)*g(M)<0
似乎势不可挡。也许我让这有点太复杂了,但我认为应该有一个多维版本的二分法,就像牛顿拉夫森可以很容易地使用梯度算子进行多面化一样。
欢迎任何线索、评论或链接。
c - 使 C 代码自动绘制图形
我编写了一个程序,它将数据列表写入“.dat”文件,然后使用 gnuplot 单独绘制它。有没有办法让我的代码自动绘制它?我的输出形式为:
理想情况下,当我运行代码时,图形也会打印一个 x-label、y-label 和标题(可以从我的 C 代码中更改)。非常感谢。
algorithm - 生成类似于 LCG 但没有奇数/偶数的全周期/全周期随机数或排列
我希望生成在一个范围内“占据”一个完整周期或完整周期的伪随机数/排列。通常可以使用“线性同余生成器”(LCG)来生成这样的序列,使用如下公式:
其中 Xs 是种子,X 是结果,a 和 c 是互质常数,R 是最大值(范围)。
(通过全周期/全周期,我的意思是可以选择常数,以便任何 X 在某个随机/置换序列中仅出现一次,并且将在 0 到 R-1 或 1 到 R 的范围内)。
LCG几乎可以满足我的所有需求。我对 LCG 的问题是奇数/偶数结果的非随机性,即:对于种子 Xn,结果 X 将交替奇数/偶数。
问题:
有人知道如何创建不会交替奇数/偶数的类似东西吗?
我相信可以建造“复合 LCG”,但我没有详细信息。有人可以举一个这个CLCG的例子吗?
是否有可能满足上述细节和以下限制的替代公式?
约束:
- 我想要一些基于简单种子公式的东西。即:要获得下一个数字,我提供种子并获得置换序列中的下一个“随机数”。具体来说,我不能使用预先计算的数组。(见下一点)
- 序列绝对必须是“全周期/全周期”
- 范围R可能是几百万甚至32bit/40亿。
计算不应溢出并且高效/快速,即:没有大指数或数十个乘法/除法。
序列不必非常随机或安全 - 我不需要加密随机性(但如果可行的话可以使用它),只需“良好”随机性或明显随机性,没有奇数/偶数序列。
任何想法表示赞赏 - 在此先感谢。
更新:理想情况下,范围变量可能不是 2 的精确幂,但在任何一种情况下都应该有效。
math - 是否有用于在非标准分析中进行计算的超现实数据类型实现?
非标准数学分析将实数线扩展到包括“超现实”——无穷小和无穷大。是否存在(规范)数据类型的实现以使用超现实实现计算?我正在寻找类似于您在 Python 和 Fortran 以及其他地方找到的复数数据类型的东西。我实际上不知道这样的计算是否有用:我只是好奇。我已经对这个概念进行了一些尝试,但由于我可能犯了错误,所以我会省略你所有的细节。参考关于超现实的维基百科页面。
c - 将简单的 C 代码转换为 CUDA 代码
我正在尝试将一个简单的数值分析代码(梯形规则数值积分)转换为可以在启用了 CUDA 的 GPU 上运行的代码。那里有很多文献,但看起来比这里需要的要复杂得多!我目前的代码是:
这运行良好,直到 N 变得非常大。我已经使用更快的 openMP 实现了一个实现,但我认为了解一点 CUDA 也会很方便。有没有人对从哪里开始或是否有一种无痛的方法来转换此代码有任何建议?非常感谢,杰克。