gpt4 book ai didi

c++ - odeint 和状态变量的临时更改

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:50:34 25 4
gpt4 key购买 nike

我刚刚实现了一组耦合 ODE 的数值积分来自使用 odeint C++ 库的离散 PDE。它很好用并且快如闪电,但有一个问题:

我的 ODE 系统具有所谓的吸收边界条件:时间我的状态变量 n 的导数,它是 N 个 double vector (人口密度)在系统函数中计算,但在此之前(或者时间积分后)我想设置:

n[N]=n[N-2];

n[N-1]=n[N-2];

然而,这当然是行不通的,因为系统中的状态变量函数声明为 const,看起来好像无法更改除了干预图书馆之外……还有什么办法可以解决这个问题吗?

我应该提到将 dndt[N]dndt[N-1] 设置为零可能看起来像解决方案,但它并没有真正帮助,因为它违背了吸收边界的概念条件(n[N]n[N-1] 将始终具有它们在 t=0 时的值,而不是然后是 n[N-2] 在任何时间点的值),所以我真的更愿意更改 n。

感谢您的帮助!

问候,

迈克尔

最佳答案

通常吸收边界条件在运动方程中表现出来。 n[N] = n[N-1] = n[N-2],所以可以插入n[N]=n[N-2]n[N-1]=n[N-2] 代入 dndt[N-2] 的等式。

例如,具有吸收边界 x[n] 的离散拉普拉斯算子 Lx[i] = x[i+1]-2 x[i] +x[i-1] =x[n-1] 可以写成 Lx[n-1] = x[n-2] - x[n-1]。然后可以省略 x[n] 的等式。

关于c++ - odeint 和状态变量的临时更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16570379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com