在 MATLAB 中求解偏微分方程

计算科学 matlab 离散化 线法
2021-12-09 10:58:50

我想解决 3 个耦合方程。我将它们转换为时间颂歌系统,并将其离散为长度和半径。现在我在第一点的一个方程中有一个问题。因为在这一点上我有一个二阶导数,当我离散它时,我在第二点没有这是我的等式:y

dydy=d2ydr2+k(yq)

这是matlab中的离散形式:

dydt=y(i+2)2y(i+1)+y(i)Δr2+k(y(i)q(i))

现在在中,我们没有点,它们将在 MATLAB 的下一行计算。我该怎么办?i=123

3个回答

请尝试改进您的解释:

索引我是指空间变量还是时间变量?

无论如何,据我从您的帖子中了解到,如果您在空间域的结束/开始处处理,我认为您需要强制执行一些边界条件。

通常,根据您的问题的物理特性,您必须强制执行 Neumann 或 Dirichlet BC(https://en.wikipedia.org/wiki/Neumann_boundary_conditionhttps://en.wikipedia.org/wiki/Dirichlet_boundary_condition)或其他类型。

如果你给我一个更好的解释,我可以在这个过程中支持你。

你的问题是 吗?您必须首先设置一些初始条件,女巫将是 y(0)....y(n)。除了边界。y(i+2)

想象一下,如果你正在解决一个字符串中的波。初始条件将是字符串的形状......因此离散化后给出的初始值 。y(r,t=0)=f(r)y(i+1)y(i+2)

我假设你正在解决一个初始值问题,所以y(r,t=0)是已知的。您的时间离散化将决定要做什么——例如,使用正向欧拉,您将得到:

y(r,t+δt)=y(r,t)+δf(y(r,t)),
在哪里f代表你的右手边。这是最简单的显式方案,请参阅此说明,您可能不应该在实践中使用它。有许多替代方法,例如Runge-Kutta 方法