0

パラメータが空間と時間に依存する ODE のシステムを解くための高速な matlab コードを作成したいと考えています。ベクトル的に解く方法はありますか? 以下はコードの一部です。

 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

コードをベクトル化する方法はありますか? 時間依存性には 1 つの問題があります。matlab には、時間依存 ODE を処理するための組み込み関数 interp1 がありますが、時間がかかりすぎます。こちらをチェック 時間依存パラメータを持つ常微分方程式系の解き方 私のコードはこの基本方程式を発展させるので、時間を節約することが重要です。抜け道はありますか?前もって感謝します。

コードのベクトル化は、次の投稿で見つけることができます。 反復ごとに ODE ソルバーを含む Matlab コードのベクトル化

以下の投稿も大変参考になります。 時間依存のパラメーターを持つ常微分方程式系を解く方法

4

0 に答える 0