如何使用MATLAB解决此PDE

时间:2015-04-23 04:34:33

标签: algorithm matlab math differential-equations

我在练习考试中有以下问题:

enter image description here

我需要使用MATLAB来解决它。问题是,我之前没有看到这样的问题而且我很难开始。

我有1x1网格,分成10x10。我知道我可以使用1/10 * x * 2计算角落以外的整个底行。我也知道我可以使用(1/10)(1 + t)^ 2计算整个右行。但是,我无法弄清楚如何获得足够的分数来填充整个网格的值。我知道它必须与问题中给出的偏导数有关,但我不太确定它们在哪里发挥作用(尤其是u_x方程)。有人可以帮助我从这里开始吗?

我不需要整个解决方案。一旦我有足够的积分,我就可以轻松编写一个matlab程序来解决剩下的问题。真的,我想我只需要解决x = 0轴,然后我就填写网格的中间部分。

我计算了底行,减去两个角,为0.001,0.004,0.009,0.016,0.025,0.036,0.049,0.064,0.081。类似地,使用给定的边界条件计算整个右行是很简单的。我无法拼凑到哪里去。

编辑:第三个边界条件方程输入错误。它应该是:

u_x(0,t)= 1 / 5t,NOT u(0,t)= 1 / 5t

1 个答案:

答案 0 :(得分:1)

首先要意识到你必须解决的方程是线性波方程,你给出的数值方案可以改写为

( u^(n+1)_m - 2u^n_m + u^(n-1)_m )/k^2 = ( u^n_(m-1) - 2u^n_m + u^n_(m+1) )/h^2

其中k是时间步长,h是空间中的delta x

重新拟定的数值方案清楚地表明,左侧和右侧分别是u_ttu_xx二阶中心有限差分近似。

然而,要以数字方式解决问题,您需要使用给定的表单,因为它是您需要以数字方式实现的显式更新公式:它为您提供时间n+1处的解决方案作为函数的函数前两次nn-1。您需要从初始条件开始并及时推进解决方案。

观察解决方案已分配在域的边界(x=0x=1),因此离散化解决方案的值u^(n)_0和{任何u^(n)_10n){1}} 已知。在t=n*k时间步,您的未知数是向量n

另请注意,要使用更新公式在[u^(n+1)_1, u^(n+1)_2, ..., u^(n+1)_9]步骤中查找解决方案,需要了解两个之前步骤中的解决方案。那么,如果您以前需要来自两个的信息,如何从n+1开始?这是初始条件发挥作用的地方。 您可以在n=0n=0)获得解决方案,但t=0也有u_t。这两条信息的组合可以为您提供t=0u^0,让您入门。

我会使用以下启动方案:

u^1

u^0_m = u(h*m,0) // initial condition on u (u^2_m - u^0_m)/(2k) = u_t(h*m,0) // initial condition on u_t 使用的数值方案相结合,为n=1提供了为u^1_mu^2_m定义线性系统所需的一切。

总结:

- 使用启动方案同时在m=1,...,9n=1 找到解决方案

- 从那时开始使用你给出的数值方案。

如果你完全迷失了,请查看:有限差分格式,平流方程的有限差分格式,双曲线方程的有限差分格式,时间推进等。

编辑:

对于n=2上的边界条件,您通常使用 ghost单元格方法:

  • u_x处引入一个鬼影单元,即用于处理边界条件的虚拟(或辅助)网格点,但这不是解决方案的一部分。

  • 第一个节点m=-1又回到了您的未知向量中,即您正在使用m=0

  • 使用左侧边界条件关闭系统。 具体来说,通过记下边界条件的居中近似值

    [u_0 u_1 ... u_9]

  • 上面的等式允许您根据内部实节点上的解决方案在ghost节点上表达解决方案。因此,您可以将时间推进的数值方案(您给出的方案)应用于u^n_(1) - u^n_(-1) = 2*h*u_x(0,k*n)节点。 (应用于m=0的数值方案将包含来自m=0 ghost节点的贡献,但现在您已根据m=-1节点表示。)