问题标签 [numerical-analysis]
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.
algorithm - 哪个浮点比较更准确,为什么?
我正在尝试计算平方根的牛顿方法的不同实现。一个重要的决定是何时终止算法。
显然,使用y*y
和x
的y
平方根的当前估计值之间的绝对差是不行的x
,因为对于较大的值,x
它可能无法以足够的精度表示其平方根。
所以我应该使用相对标准。我天真地会使用这样的东西:
这似乎工作得很好。但最近我开始阅读 Kernighan 和 Plauger 的The Elements of Programming Style,他们在第 1 章中给出了相同算法的 Fortran 程序,其终止标准(用 C 语言翻译)是:
两者在数学上是等价的,但是有理由选择一种形式而不是另一种形式吗?
haskell - numeric-prelude 中的多重积分和矩阵(复数元素)
我需要计算形式的积分
其中 P 是一个函数R -> C^(nxn)
,通常是一个矩阵,我想在 Haskell 中执行此操作。我已经为标量函数实现了这一点:
到目前为止,这很有效,尽管对于 n>5 来说速度很慢。
现在我需要将此计算扩展到矩阵,我用数字前奏尝试了这个,因为我可以将函数作为矩阵的元素。我能够积分 的矩阵Double -> Complex Double
,但我在积分内乘以矩阵的实际目标失败了,首先是我的代码:
这里,multipleIntegrationMat
只是一个测试功能,我没有使用折叠,所以 n 是多余的。错误信息是:
我知道没有函数乘法的实例。对于这种情况,最好的方法是什么?另一方面,在标量示例中,乘法有效,尽管复数数据类型取自Data.Complex
. 当我尝试使用标量示例时,Number.Complex
我得到了同样的错误。
我能做些什么来解决这个问题?
谢谢你。
matlab - 使用 9 个数据点进行数值微分
当我尝试在 Matlab 中进行数值微分时遇到问题。但我的问题可能更多是关于数值分析而不是关于 Matlab。
我有一个包含 9 个数据点的数组,代表 9 个不同 x 的 f(x)。我需要以数字方式找到 f''(x) 。我对 x 和 f(x) 的值是
x = [2271.38, 2555.30, 2697.26, 2768.24, 2839.22, 2910.20, 2981.18, 3123.14, 3407.06]
f(x) = [577.4063, 311.3341, 193.0833, 141.3048, 95.1501, 58.8130 32.4931, 6.9511, 0.1481]
我可以插值得到平滑的曲线。我使用样条插值,但是当你要区分时,其他一些插值更可取吗?
我尝试了不同的方法:
只是简单的前向、后向和中心差商
基于小波的方法: http: //www.mathworks.com/matlabcentral/fileexchange/13948-numerical-differentiation-based-on-wavelet-transforms
和派生套件: http: //www.mathworks.com/matlabcentral/fileexchange/13490-adaptive-robust-numerical-differentiation
这些都不是令人满意的。二阶导数在步长方面非常不稳定,并且派生套件中的自适应方法非常糟糕。也许我只是以错误的方式使用它!
任何帮助表示赞赏!
提前致谢
algorithm - Kahan求和和相对误差;或“得到错误结果而不是正确结果”的真实战争故事
我对这样的“战争故事”很感兴趣:
我编写了一个涉及浮点数总和的程序,但我没有使用 Kahan 求和。
总和是
bad_sum
,程序给了我一个错误的结果。我的一位同事比我更精通数值分析,他查看了代码并建议我使用 Kahan 求和,现在求和,
good_sum
程序给了我正确的结果。
我对现实生活中的生产代码感兴趣,而不是为了解释 Kahan 求和算法而“人为”创建的代码示例。
特别是(bad_sum-good_sum)/good_sum
您的应用程序的相对误差是多少?
到目前为止,我还没有类似的故事要讲。也许我会做一些测试(在输入数据集上运行我的程序,记录程序结果和有和没有 Kahan 的总和,估计相对误差)。
linear-algebra - 当基础几乎完成时,有效计算线性基础的扩展完成(理想情况下使用 LAPACK 例程)
我有一个带有正交列的 $p \times n$ 矩阵 $B$(其中 $n < p$),并且希望找到一种数值有效的方法来扩展此矩阵以获得完整的 $p$ 维正交基。换句话说,我想通过 $pn$ 互补矩阵 $W$ 计算 $p$ 以便
$[黑白|宽]$
是正交的。
目前我正在计算秩 $pn$ 投影矩阵的 QR 分解
$P=I-BB^T= QR$
使用 LAPACK 例程dgeqp3
并dorgqr
丢弃 $Q$ 的尾随 $p$ 列。我确信必须有一种更有效的方法,因为在我的应用程序中,$B$ 几乎是一个完整的基础,即 $pn$ 很小。
我想知道如何通过 $P$ 的列递归地构建一个互补的基础 $R$。仅当 $\det([R|C]^T[R|C)\neq0$ 时,在每一步将 $C$ 列添加到当前 $R$。在 $R$ 中有 $pn$ 独立向量后,我可以将 $W$ 形成为 $W=(R^TR)^{-1/2} R$。但是,我不确定这是否是一个数值稳定的解决方案,或者是否有另一种更有效的方法。
理想情况下,我想要一种可以使用标准 LAPACK 例程实现的方法。
c - 特定舍入模式的意外结果
首先,抱歉标题不好:/
我试图重现一篇论文关于计算三对角对称矩阵的特征值的结果。我分别通过四舍五入到正无穷和负无穷来确定一些值“上限和下限”。
我不是每次都更改舍入模式,而是使用“技巧”:fl⁻(y) = -fl⁺(-y),其中 fl⁻(y) 是使用负无穷大舍入模式时 y 的值,并且fl⁺(y) 是使用舍入模式到正无穷大时的 y 值。因此,我在 C 中有以下代码:
它工作正常,除了一个例子 a_inf 给了我正确的结果,但 a_sup 给出了错误的结果,尽管第一个和第二个变量似乎具有相同的值。
但是,如果我这样做:
我得到了正确的结果。因此,如果我使用技巧 fl⁻(y) = -fl⁺(-y),我会得到正确的结果,如果我更改舍入模式并使用原始表达式,我会得到错误的结果。知道为什么吗?
在这两种情况下,变量 first 和 second 的值如下:
a_inf 和 a_sup 的正确值分别是 -1.862645149230957e-09 和 +1.862645149230957e-09,但在第一种情况下 a_sup = 0,这是错误的
我猜它正在发生的是某种灾难性的取消,但我不知道在这种情况下如何解决它......
提前致谢!
matlab - MATLAB calculate angle of rotation
I have 5 points on a circle:..........1
................................... ......... 2 ...... . 3
Now I have its rotated image: .............
.............................................................1. .......3
Note: the points aren't numbered.
I basically have 5 sets of coordinates, which when plotted look like the below image.
I need to calculate the amount by which i have to tilt the image so as to make it look like the above image
gnuplot - 有没有办法在 gnuplot 中绘制平均值?
假设我有一个包含两列数据的文件file.dat
。我通常会用
我想平均超过 10 个(例如)前面的点和 10 个后面的点,并将其绘制在同一个图上。我可以使用一些外部脚本轻松地做到这一点,我在其中创建另一列:
但是,我想知道在 gnuplot 中执行此操作的方法。我的下一步是进行高斯平均。
numerical-analysis - 编程和数值分析
我在秋季上一门数值分析课,主要是应用/编程倾向。我有一个马马虎虎的编程背景(上过几门课并在实习中从事过 Java 编程),但我想在开始这门课之前提高我的技能。所以我的问题是,哪些编程技能对数值分析有用?
数据结构、OOP、算法很重要吗?你有什么资源可以推荐我在上课前翻阅吗?