具有时间和空间相关参数的ODE求解器

时间:2013-07-23 17:08:42

标签: matlab ode

我想编写一个快速的matlab代码来解决ODE系统,其中参数是空间和时间依赖的。有没有办法以矢量方式解决它?以下是代码的一部分:

 function dM=testfun(T,M,B1)

   Mx=M(1);
   My=M(2);
  Mz=M(3);


dM=[My*B1(3)-Mz*B1(2);Mz*B1(1)-Mx*B1(3);Mx*B1(2)-My*B1(1)]+...
    [-Mx/T2;-My/T2;(1-Mz)/T1];

here B1 is space-time dependent variable 

主程序:

   clc;clear all;
   tmin=0;
   dt=rand(5,1);
   tsteps=10;
   B1x=rand(5,1);% time-dependent
   jx=length(x);
   z=-10:10;
   jz=length(z);
   M0=repmat([0; 0; 1],1,jz);
  for p=1:jz
       B1=[B1x;zeros(1,jx);10*z(jz)*ones(1,jx)]; % 3rd term is space dependent
     for pp=1:jx
       tspan=linspace(tmin,tmin+dt,tsteps);
  [t,M(:,:,pp,p)]=ode45 (@(t,M) testfun(t,M,B1(:,jj)),tspan,M0(:,p));
      tmin=tmin+dt;
    end
end

有没有办法对代码进行矢量化?时间依赖性存在一个问题 - matlab具有内置函数interp1,用于处理时间相关的ODE,但需要花费太多时间。检查一下 How solve a system of ordinary differntial equation with time-dependent parameters我的代码将是对这个基本等式的开发,节省一些时间非常重要。有什么出路吗?提前谢谢。

代码的矢量化可以在以下文章中找到 Vectorization of Matlab Code involving ODE solver at each iteration

以下文章也非常有帮助。 How solve a system of ordinary differntial equation with time-dependent parameters

0 个答案:

没有答案