MathGroup Archive 2003

[Date Index] [Thread Index] [Author Index]

Search the Archive

how make it faster?

  • To: mathgroup at smc.vnet.net
  • Subject: [mg42429] how make it faster?
  • From: Jan Schmedes <schmedes at rz.uni-potsdam.de>
  • Date: Mon, 7 Jul 2003 03:05:56 -0400 (EDT)
  • Sender: owner-wri-mathgroup at wolfram.com

Dear group,

could you explain me on the following code for a simple Runge-Kutta-solver
for ODE without
stepwidth controll how it could be made faster and more
'mathematica-like'.

 RK[c_, a_, b_, func_, h_, x0_, t0_, T_] :=
    Module[{z, f, sl, s, k, i, j, ti, l, n},
      f[t_, z_] = func /. {x -> t, y -> z};
      n = Round[T/h];
      sl = Array[s, {n + 1}];
      s[1] = x0;
      ti = t0;
      For[i = 1, i <= n + 1, i++,
                j = 1;
                Do[{k[j] =
              f[ti + c[[j]]*h, s[i] + h*Sum[a[[j]][[l]]*k[l], {l, 1, j -
1}]];
             j++}, {Length[c]}];
                s[i + 1] = s[i] + h*Sum[b[[j]]*k[j], {j, 1, Length[c]}];
                If[i<=n-2,
                        ti = ti + h;
                ,
                        ti=T;   (*last step*)
                ]
        ];
      Return[sl];
      ];

e.g with
(**Butcher-tableau:
		 c|a
		 ---
		  |b
*****)
c = {0, 0.5};
a = {{0, 0}, {0.5, 0}};
b = {0, 1};
f = (x^2 + y)/x;  (*rigth side of y'=f(x,y)
x0 = 0.;
T = 2.;
tau = 0.5;
t0 = 1.;

A second question is if it is possible to use Compile at some place to
make it faster?

Thank you and best regards

Jan Schmedes


  • Prev by Date: Vector components as functions in DSolve
  • Next by Date: Re: NDSolve problem
  • Previous by thread: Re: Vector components as functions in DSolve
  • Next by thread: Re: how make it faster?