当解决方案不稳定时,如何在pde工具箱中停止matlab pde求解器

时间:2018-01-10 01:19:08

标签: matlab pde

我正在使用pde工具箱解决两个耦合时间相关的PDE方程。模拟框大小为x = 6和y = 10.当前我正确解决它并使用以下方法访问解决方案数据 results = solvepde(model,tlist); u = results.NodalSolution(:,1,:);

现在我需要做的是当解决方案u沿y轴不稳定时停止代码。这意味着我想在运行代码的同时监视u沿y轴的解决方案,并在符合条件时停止它我想要。(例如,我想在u沿y的解决方案等于0时停止代码。)我怎样才能使用pde工具箱?

这是我到目前为止所尝试的。在代码运行时是否有简单的方法来访问结果?。我想访问每个时间步的解决方案。

 %calculate solutions
  n=4000;
  tlist = linspace(0,200,n);
  partial=zeros(49,1);

  for i=1:n
       results = solvepde(model,tlist(i:i+1));
       u = results.NodalSolution(:,1,1);
       v=results.NodalSolution(:,2,1);
       u1=results.NodalSolution(113:161,1,1);
       u2=results.NodalSolution(1,1,1);
       u3=results.NodalSolution(4,1,1);
      for j=1:49
          partial(j)=u1(j)-0.5*u2-0.5*u3;
      end
      sigma=sum(partial);
      if sigma>1e-4
          disp('verified')
          return
      end
  end

1 个答案:

答案 0 :(得分:0)

有几种方法可以在执行期间停止代码:

  • keyboard

使用此功能可以停止执行并让您访问键盘,以便查看所有值。

  • warning('Solution is unstable')

这实际上不会停止代码,但会给你一个警告,说明解决方案不稳定。

  • error('Solution is unstable')

这实际上会停止代码,给出错误,解决方案不稳定。

  • break

这不会给你任何反馈,但会停止for循环,然后继续其余的代码。

在所有情况下,您都包括在if语句中停止代码的方式,例如

if (all(u==0))
    *statement from above*
end