使用有限元方法求解二维扩散方程(热方程)但爆炸

时间:2017-10-25 10:34:20

标签: matlab differential-equations finite-element-analysis

我尝试使用有限元来解决二维扩散方程:

    FluentWait<WebDriver> wait = new FluentWait<WebDriver>(driver)
            .withTimeout(120, TimeUnit.SECONDS)
            .pollingEvery(1, TimeUnit.SECONDS)
            .ignoring(NoSuchElementException.class);

P的初始条件是高斯分布。

但是,当增加k(我的代码中k = 30)时,P会爆炸。然而,P应该减少,因为它是扩散方程的解。

我不知道P(i,j,k + 1)中的问题,如何解决这个问题?

由于

1 个答案:

答案 0 :(得分:0)

在您的代码中P(1, :, :)P(101, :, :)P(:, 1, :)P(:, 101 , :)的值始终为零。这意味着在二维框的边界处P始终为零。它不遵守扩散定律。

首先,您应该为边界提供一个初始条件。

% Initial Condition
mu = 0.5;
sigma = 0.05;
for i=1:numx
    for j=1:numy
        P(i,j,1) = exp(-( (x(i)-mu)^2/(2*sigma^2) + (y(j)-mu)^2/(2*sigma^2))/(2*sigma^2)) / sqrt(2*pi*sigma^2);           
     end
 end

然后在扩散过程中计算边界处的P值。

% Diffusion Equation
for k=1:numt
   for i=2:numx-1
       for j=2:numy-1
           P(i,j,k+1) = P(i,j,k) + .5*(dt/dx^2)*( P(i+1,j,k) - 2*P(i,j,k) + P(i-1,j,k) ) + .5*(dt/dy^2)*( P(i,j+1,k) - 2*P(i,j,k) + P(i,j-1,k) ); 
       end
   end

   % calculate the value of P at the boudary
   P(1, :, k + 1) = 2 * P(2, :, k + 1) - P(3, : , K + 1);
   P(numx, :, k + 1) = 2 * P(numx - 1, :, k + 1) - P(numx - 2, : , K + 1);
   P(:, 1, k + 1) = 2 * P(:, 2, k + 1) - P(:, 3 , K + 1);
   P(:, numy, k + 1) = 2 * P(:, numy - 1, k + 1) - P(:, numy - 2 , K + 1);
end