问题标签 [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.
python - 将 3D 值数组绘制为网格上的彩色点
我有一个 (X,Y,Z) numpy 数组,它描述了一个盒子里的每个点。我想对这些数据进行 3D 绘图,其中 [x,y,z] 处的点的颜色是数组中该点的值,到目前为止我已经尝试过以下方法:
这会在每个索引处正确绘制一个点,但不会根据该值更改颜色。我已经看到了一些使用 ravel/reshaping 数据到一维数组的方法,但是由于这种方法一次只绘制一个点,所以会引发错误。
有没有比单独绘制每个点更明智的方法?
(PS 这是为了可视化 EM 传播的 FDTD 模拟,所以如果你知道一个更好的方法,那么这也会有帮助)
python-3.x - 为什么 SymPy 的 linsolve 函数无法求解此问题中倒数第二个变量?
(TLDR:当您将方程作为纯 Python 列表传递时,SymPy 的 linsolve 函数无法求解线性方程组,该方程组是通过将有限差分法应用于 ODE BVP 生成的,但能够将所述方程列表放入其中SymPy 的 Matrix 函数。这可能是一个需要修复的错误,特别是考虑到在 SymPy 文档中,他们给您的示例让他们将列表作为参数传递给 linsolve。)
我有一个边值问题常微分方程,我打算使用有限差分法求解。在 SymPy 表示中,我的 ODE 是x*y(x).diff(x,2) + y(x).diff(x) + 500 = 0
、y(1)=600
和y(3.5)=25
。整个代码如下:
对于十个步骤,这工作得很好。但是,如果我立即超过 11 步,SymPy 将不再能够求解线性方程组。试图绘制结果会抛出TypeError: can't convert expression to float
. 检查 y 值列表 ys 发现其中一个变量,特别是倒数第二个变量,并没有被 sympy 的 linsolve 求解,而是根据这个未求解的变量来求解其他变量的解。例如,如果我有 50 步,则倒数第二个变量是y(49)
,并且这在其他未知数的解决方案中具有特色,而不是例如2.02061855670103*y(49) - 26.1340206185567
. 相比之下,在我解决的另一个 BVP ODE 中,y(x).diff(x,2) + y(x).diff(x) + y(x) - 1
使用y(0)=1.5
和y(3)=2.5
,我想要 10 步、50 步还是 200 步都没有任何问题。它很好地解决了所有变量,但这似乎是一个特殊的例外,因为我在许多其他 ODE 中遇到了上述问题。
SymPy 的不一致在这里非常令人沮丧。唯一的安慰是,在我遇到这个问题之前,我实际上已经用我想要的不同数量的步骤解决了几次。我将eqns
变量包含在 sympy 的 Matrix 函数中,ys[1:-1] = sp.linsolve(sp.Matrix(eqns), ys[1:-1]).args[0]
因为它在终端中以这种方式显示得更好。但是对于在脚本文件中解决,我认为将其包装在里面sp.Matrix
是不必要的,我自然将其删除以简化事情。
matlab - 显式 FD 格式的周期性边界条件
我想在一维反应-扩散-ODE系统的显式有限差分数值方案中实现周期性边界条件。但是,我不是这方面的专家,因此我们将非常感谢任何帮助。代码(我目前有 Neumann 边界条件)如下:
python - python中的有限差分方案
在 python 中,我正在尝试开发二维中心有限差分方案(字典)系数。我的代码是
让我们在一个虚拟示例上进行尝试。
但是这个虚拟示例的结果是(array([ -4., -6., -8., -10.])
. 任何想法可能会出错?
c - 使用时间分裂求解耦合微分方程组
所以这是代码。它旨在解决以下微分方程:
du/dt - Dd^2u/dx^2 - v = 0
dv/dt - Dd^2v/dx^2 + u = 0
它把方程分成两部分。第二个 x 导数部分(A1) 和包含 u 和 v(A2) 的衰减部分。它对 A1 使用两个半步(0.5dt),对 A2 使用 1 个全步 dt。我知道如何进行时间分割,但我不知道我是否在这里正确地完成了。
这是一个作业,我已经修复了所有错误,我只是想让代码按预期工作。我从来没有解决过类似的问题,所以我现在肯定非常卡住。解决方案收敛,但我认为它是错误的。任何想法为什么?我不是在寻找直接告诉我做错了什么的人,如果您知道我的意思,请引导我朝着正确的方向前进。
PS:当我用 gcc 编译代码时,我收到一个关于双主(void)的警告。为什么会这样?
c++ - 一维有限差分波动方程 Cuda
我是 Cuda 的新手。我试图以 Ricky 动量的形式求解具有初始条件的波动方程。代码的性能是 12 GFlops,虽然我的 GPU 性能是 3900。为什么代码对我来说如此无效,我该如何解决?
主文件
步骤.cu
我将 GFlops 计算为
我将不胜感激您的任何意见和提示。
python - python中具有不同热系数的一维热方程
使用有限差分法,我想在 python 中迭代热方程来模拟一维棒中的热流。
在热 PDE 上使用 FDM,我得到以下一维公式:
以下方法迭代“nt”步骤的结果公式:
def ftcs(T0, nt, dt, dx, alpha):
这种设置似乎完美无缺。我现在有以下“问题”:
棒是各向异性的并且有两个不同的热系数。我假设使用这些边界条件,我会在 python 中描述问题:
和
为了给棒分配正确的热系数 k(x),我将 k 存储在与棒大小相同的数组中:
alpha_array = np.ones(nx)
alpha_array *= alpha
alpha_array[3:7] = alpha2
我的问题来了。在高步长之后,结果图总是显示一条直线,这是预期的。然而,在实际测量中,产生的温度图显示了棒部分的变化,其中 k2 是热系数。我如何用热方程来描述它?
我是否必须运行三个单独的热方程,每个方程都有新的边界条件。如果是这样,这些边界条件会是什么样子,它们会是简单的 Neumann BC 吗?
matlab - Matlab中的有限差分方案
我正在尝试在 MATLAB 中实现 KdV 方程的有限差分方案,并且我已经准备好了大部分代码,除了使用初始条件在第一级进行近似。有人建议我使用欧拉的方法在 m=1 处获得 'u',然后使用 m>=2 的方案。在这种情况下如何应用欧拉方法?即使只是在第一级近似的一般答案也将不胜感激。我包含我的代码以供参考