问题标签 [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.
numerical-methods - 数值方法教学中效果更好的语言或环境提示
我正在准备我的第一门电气工程数值方法课程,并希望从具有该学科经验的同事那里收集反馈,了解哪种语言或环境在学生学习方面产生了更积极的结果。MATLAB / Octave?,Python?C/C++?使用 R 会很有趣吗?对不起,如果问题超出了网站的范围。
感谢您的反馈
clojure - Scheme / Common Lisp / Clojure 中的自动微分库
我听说 McCarthy 发明 Lisp 的最初动机之一是编写一个用于自动区分的系统。尽管如此,我的谷歌搜索并没有产生任何库/宏来执行此操作。是否有任何 Scheme/Common Lisp/Clojure 库(宏)用于获取函数 F 并返回计算 F 导数的函数 dF/dx?
我希望它支持具有多个参数的 F。用户将选择其中哪个是要区分的 x。理想情况下,微分器甚至适用于向量值 F 和 x。
编辑:有几个人提到了符号分化。符号微分和自动微分之间的区别是一个微妙的区别,但它在维基百科中得到了很好的总结,尤其是在这张图片中。这种区别在 lisp 中没有那么明显,其中符号表达式可以按原样转换为工作程序,但仍然存在潜在的困难:
符号微分要求被微分的表达式由已知导数的运算组成。例如,有人提到了 SICP 的宏示例,该示例通过简单的性别来搅动(+ y (* (x y)))
,并使用链式法则,以及如何区分+
和的知识*
,返回代表导数的性别。我需要它来处理诸如(* (foo x y) (bar x))
, where之类的表达式,foo
并且bar
可能反过来调用其他函数,这些函数的导数在微分时是未知的。
如果有一种方法可以将表达式 like(foo x y)
替换为它的函数体,用x
和y
以一种卫生的方式替换任何对参数的提及,这将是很好的。有没有?
此外,以上都没有解决向量值函数相对于向量值参数微分时出现的复杂性......这是大多数自微分实现所针对的。
c - 找到(三次)多项式实根的简单方法是什么?
这对我来说似乎是一个显而易见的问题,但我在 SO 的任何地方都找不到它。我有一个三次多项式,我需要找到函数的实根。这样做的方法是什么?
我找到了几个三次函数根的封闭形式公式,但它们都使用复数或大量测角函数,我不喜欢它们(也不知道该选择哪一个)。
我需要一些简单的东西;越快越好;而且我知道我最终将需要求解高阶多项式,因此拥有一个数值求解器可能也会有所帮助。我知道我可以使用一些库来为我做艰苦的工作,但可以说我想把它作为一个练习来做。
我正在用 C 编码,所以import magic_poly_solver
请不要。
额外的问题:我如何只找到给定区间内的根?
math - 为什么这些稍微不同的寻根方法会产生不同的结果?
考虑这两种稍微不同的计算第五根的方法:
两者都试图通过对固定点的平均衰减搜索来计算第五个根,因为 x 的第五个根是映射 y -> x/(y^4) 的一个固定点。我已经定义
尝试这两种方法,我们得到
为什么第二种方法无法正确计算第五个根?更奇怪的是,如果我们在第四或第三根上尝试这种错误的方法,它会正常工作:
作为参考,此代码尝试解决计算机程序的结构和解释中的练习 1.45。现在我有了正确的方法,我的代码可以工作,但我不明白为什么我的错误方法是错误的。
matlab - MATLAB数值积分函数的区别
我需要使用 MATLAB 集成一个表达式。这些功能有什么区别?
QUAD
, QUAD8
, QUADL
,DBLQUAD
matlab - 实现 Newton-Raphson 迭代方法
我正在尝试使用 Newton Raphson 迭代来实现反向欧拉方案。我知道每次迭代都会进行初始猜测,计算残差并解决变化。就我而言,变化是del w。之后,我知道将值添加到 w^m 并在下一次 m 迭代中获取 w 的更新值。我知道随着迭代的进行检查解决方案的收敛性。我遇到的问题是如何将时间步长 dt 实现为 t=0:Tmax/dt,其中 Tmax 是 10。我对时间步长如何进入感到困惑。我一直在尝试解决这个问题同时,我们将不胜感激任何帮助。谢谢!
python - 生成 2 的平方根的位数
我想生成两到三百万位数的平方根的位数。
我知道Newton-Raphson,但由于缺乏大整数支持,我不太了解如何在 C 或 C++ 中实现它。有人可以指出我正确的方向吗?
另外,如果有人知道如何在 python 中做到这一点(我是初学者),我也将不胜感激。
c - 定点乘法算法
我正在尝试将时间戳(仅秒的小数部分)从纳秒(以 10^-9 秒为单位)重新调整为 NTP 时间戳的下半部分(以 2^-32 秒为单位)。实际上,这意味着乘以 4.2949673。但是我需要在没有浮点数学的情况下进行,并且不使用大于 32 位的整数(事实上,我实际上是为 8 位微控制器编写的,所以即使是 32 位数学也很昂贵,尤其是除法)。
我提出了一些运行良好的算法,但我在数值方法方面没有任何真正的基础,所以我很感激任何关于如何改进它们的建议,或者任何其他更准确的算法和/ 或更快。
算法 1
选择前两个常数是为了稍微低于而不是超过正确的数字,并且根据经验确定最终因子 67078 来纠正这一点。在正确值的 +/- 4 NTP 单位内产生结果,即 +/- 1 ns - 可接受,但残差随ns
. 我想我可以添加另一个术语。
算法 2
基于 4.2949673 的二进制展开(实际上是基于 2.14748365 的二进制展开,因为我是先加倍加一来完成四舍五入的)。可能比算法 1 更快(我还没有完成基准测试)。+3 是根据经验确定的,以抵消截断所有这些低位的下冲,但它并没有做最好的工作。
c++ - 评估多重积分
有没有评估多维积分的库?我至少有 4 个(通常比这更多),其中被积函数是变量的组合,所以我无法将它们分开。您知道任何用于数值评估的库吗?我特别在寻找 matlab 或 c++,但我会使用任何可以完成工作的东西。
c - 创建一个迭代程序来估计多项式的根
我正在用 c 创建一个程序,该程序假设使用牛顿拉夫森方法估计 10 阶多项式的根。用户输入 10 个系数,假设估计方程的根。绝对相对误差为 0.00000001,允许的最大迭代次数为 70。示例代码如下。
函数 poly 和 poly_der 分别计算多项式的值及其导数。定义如下。
deri 是计算多项式中一项的导数的函数。不幸的是,这个程序产生了意想不到的结果。我不知道哪里错了,因为它编译并运行良好。有没有另一种方法可以使用牛顿法估计根。我怎样才能改进程序,使其产生所需的结果。