问题标签 [finite-difference]

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.

0 投票
0 回答
134 浏览

r - R中的后向差异和中心差异

我知道在 R 中diff(x, lag = L, differences = K)给你滞后L K阶差。

是否有一个等效的函数来计算L K滞后阶后向差和中心差(理想情况下允许x是向量或矩阵)?我搜索了 CRAN,似乎找不到任何东西,但这个功能应该已经存在于某个地方,这似乎是一件微不足道的事情。有人有什么想法吗?

0 投票
0 回答
49 浏览

python - 如何用python解决具有有限差分的非线性ode二阶?

我目前正在尝试用有限差分和python解决这个非线性颂歌:d/dy((du/dy)^n)=a

带有 n 和 a 常数(实数)。这是一个 bvp,在 y=0 时 u=0,在 y=1 时 u=1

我知道如何找到解析解:它是泊肃叶流,幂律液体限制在 2 个无限板之间。

我找不到用 python 和有限差分来处理这种非线性 ode 的方法。有人能帮助我吗?

0 投票
0 回答
39 浏览

python - 显式方案 RuntimeWarning:长标量中遇到溢出

今天是个好日子。

由于代码太大,我附上repl的链接:

https://replit.com/@PabloJunior1/Explicit-scheme-ENG

我正在尝试为二维方程实现显式差分方案。我处理了所有公式并且程序运行良好并且在 256 次迭代后收敛,如果我使用时间步长 τ = 0.25 * h ^ 2。但是如果我使用步长 τ = h ^ 2,那么在大约第 370 次迭代之后这个错误出去,这个过程进入一个永恒的循环。不幸的是,这是需要使用的值。.

我会注意到,在当前参数 N1 = N2 = 10 和误差精度 eps = 10 ^ (- 5) 的情况下,步长 τ = h ^ 2 程序应该在大约 75-85 步内收敛。我用隐式方案和交替方向隐式方案检查了它。如有必要,我可以附上原始公式。

此外,我已经尝试将 float64 类型分配给所有数组,正如在类似问题中所建议的那样。但是我的代码仍然不起作用。我不知道如何解决它。

0 投票
0 回答
43 浏览

paraview - 绘图有限差分法的 Paraview

我有一个使用有限差分法的 2D 和 3D 速度/压力解数据。所以,我有网格每个节点的坐标和网格每个节点的解值(速度和压力)。

通常我将 paraview 用于有限元方法,在这里使用 paraview 是很自然的,因为我们有三角形并且我们知道网格中每个元素的数值解。

但是在有限差分中,我们只知道点上的解,所以我不知道是否更好(更正确)在网格的每个正方形上插入解(例如每个正方形上的分段线性函数),或者计算网格的每个元素的数值解,并绘制分段常数解。

因为我在有限差分方面没有足够的经验,所以我想问:哪种方法可以更好地显示有限差分方法的数值结果?也许 paraview 不是更好的软件选择,但它是我知道的软件。

0 投票
0 回答
37 浏览

python - 耦合二阶 PDE 的有限差分边界

我的代码遇到了二阶耦合 PDE 问题的问题。为了澄清,我正在用有限差分解决这个问题,即使它不需要它,因为我有一个与这个类似的更普遍的问题,我想检查代码是否合理。

因为 up(r) 和 down(r) 是耦合的,它最初没有给我一个三对角矩阵,这使得很难施加边界条件 (up(0) =1, down(0) = up(40) = down (40) = 0) 在 RHS 中。我知道答案将是振幅减小的振荡,但我的解决方案会增加振幅。我试图重新排列行和列以使其有点对角线。它仍然给我同样的错误答案。

这是我的代码:

0 投票
0 回答
112 浏览

matlab - MATLAB fmincon 如何在有限差分步长上如此稳健?

我只是在做一个小实验来弄清楚数值梯度的性能比 MATLAB fmincon 的分析梯度有多差。而且,即使有限差分步长(即 df/dx = (f(x+delta)-f(x))/delta)很大,fmincon 也能很好地工作。这很令人惊讶,因为我预计随着步长的增加,性能会呈现出凸曲线(如微笑)。

我的实验的具体结果如下('delta'由选项'FiniteDifferenceStepSize'控制):

(1) 解析梯度

运行时间 = 52.7 秒,fval = 2.3936

(2) 数值梯度

delta = 1e-12,运行时间 = 53.9 秒,fval = 6.9880

delta = 1e-11,运行时间 = 971.7 秒,fval = 6.9733

delta = 1e-10,运行时间 = 1593.9 秒,fval = 5.5913

delta = 1e-9,运行时间 = 2054.6 秒,fval = 5.5913

delta = 1e-8,运行时间 = 1700.4 秒,fval = 5.5913

delta = 1e-7,运行时间 = 1478.8 秒,fval = 5.5913

delta = 1e-6,运行时间 = 2102.2 秒,fval = 5.4790

delta = 1e-5,运行时间 = 3390.0 秒,fval = 2.3936

delta = 1e-4,运行时间 = 2938.8 秒,fval = 2.3936

delta = 1e-3,运行时间 = 2938.8 秒,fval = 2.3936

delta = 1e-2,运行时间 = 3514.9 秒,fval = 2.3936

delta = 1e-1,运行时间 = 4374.4 秒,fval = 2.3936

delta = 1e-0,运行时间 = 2760.6 秒,fval = 2.4022

delta = 1e+1,运行时间 = 61.0 秒,fval = 6.9880

delta = 1e+2,运行时间 = 61.2 秒,fval = 6.9880

对于设置,使用了“sqp”算法,所有其他参数(例如,容差、初始点)都设置为默认值。是的,它最终在 delta = 1 之后开始退化。但它对我来说似乎仍然非常强大,尽管它适用于从 1e-5 到 1e-0 的大范围 delta。

我很好奇这个 MATLAB 求解器背后的魔力。他们是否在做一些技巧,例如,如果他们一开始未能改善给定的步长,则缩短(有限差分)步长?如果不是,他们怎么能打败这个不准确的梯度?或者,没有这样的事情,它仅仅意味着我的问题基本上是平的,所以大三角洲没有问题?

0 投票
0 回答
39 浏览

python - 删除 for 循环以支持 Python 中的矢量化

我是 Python 新手,看过一些文章和向量化嵌套 for 循环的示例,但我不清楚如何使用我编写的一些 FDTD 代码来解决这个问题。目标是使代码更简洁,运行更高效。有人可以帮我矢量化这段代码并向我解释这些变化背后的思考过程吗?我知道这段代码不是最干净的,所以非常感谢任何帮助。

0 投票
0 回答
134 浏览

c++ - 将 Lanczos 算法实现到 C++ 中,用于量子非谐振荡器

首先,我想提一下,在编码方面我是一个完整的初学者,更不用说 C++,所以请耐心等待,因为我需要完整的指导。我的任务是在 C++ 中实现一维非谐波振荡器的 Lanczos 算法,参考论文链接Analytical Lanczos method

本文提供了算法实现的分步指南: 分步指南here

初始试验函数为:Psi_1 = (1 + x^2) * (exp(-x^2 - 1/4 * x^4)。

该论文还包含针对这种特殊情况的 MATHEMATICA 代码。数学代码

因此,这是我的尝试,但尚未完成,但是,我想确保我在编程逻辑方面走的是正确的道路。还有很多错误等等。(还请原谅这里缺乏基础,我只是一个初学者。非常感谢。)

我还没有完成代码,但是非常感谢一些有经验的指导!(此外,代码必须大量清理,但这是首先尝试了解总体思路。)

0 投票
0 回答
60 浏览

python - 对于大小为 400 的轴 0,索引 400 超出范围 - Python 中的有限差分法

我明白为什么会发生这个错误。我正在使用有限差分来找到大小为 n = 400 的 numpy 数组的解决方案,并且所讨论的术语产生了一个术语 i + 2,它for i in range(1, n - 1)超过了 n + 1。但是,我正在努力寻找解决方案。

代码:

我选择使用更高的精度(前向和后向为 2,中心为 4)有限差分系数(https://en.wikipedia.org/wiki/Finite_difference_coefficient),因为当我为 s = 3 运行此代码时存在溢出问题由于(很可能)1/r 项,使用标准有限差分算法。

正如预期的那样,错误发生在

我的第一个解决方案是使用 np.append() 作为tempf[i + 2]术语,但这会ValueError: setting an array element with a sequence在同一行产生错误。自从我使用以来,我可能没有正确实现它:

我目前的想法是定义一个大小为 401 的新数组,从前一个数组中添加剩余的 400 个项,然后添加第 (i + 2) 个项,尽管我不确定如何实现它。

0 投票
0 回答
112 浏览

matlab - 非线性有限差分法的Matlab/Octave编码

尽管我阅读了算法,但我对非线性有限差分法的编码有问题。这是《数值分析》 (Burden RL, Faires JD, 2010)一书中的一个例子,第 11.4 节,第 694 页。

下面是我从书中得到的算法。我需要为此编写代码:

非线性有限差分

我成功地为线性问题编写了相同的代码(上面提到的书中的第 11.3 节):

我认为非线性也是一样的,但事实并非如此。请给我一些帮助,我真的很感激。太感谢了!