Re: NDSolve in matrix form
- To: mathgroup at smc.vnet.net
- Subject: [mg120488] Re: NDSolve in matrix form
- From: Gabriel Landi <gtlandi at gmail.com>
- Date: Mon, 25 Jul 2011 07:30:12 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <201107240719.DAA11656@smc.vnet.net>
Hi Glenn.
I solve a similar system in the following way:
Say it is defined as
X'(t) = a X(t) + b
Then once i know a,b and my initial conditions ic, i do:
vars = Table[f[i][t],{i,n}];
varsD = D[#,t ] &/@vars;
eqns = Flatten@{Thread[varsD == a.vars + b],
Thread[(vars /. t -> 0) == ic]};
sol = NDSolve[eqns,vars,{t,0,tf}]
Good luck,
Gabriel
On Jul 24, 2011, at 4:19 AM, Glenn Carlson wrote:
> I am trying to numerically solve systems of ODEs using Mathematica 7.
>
> The desired accuracy that I am striving for depends on the number of
solution functions so I want to structure my solution algorithm to allow
different numbers of solution functions. Solving the problem as a system
of ODEs in matrix form seems the logical choice:
>
> dX/dt = f[X[t]],
>
> where f[X[t]] is a specified function, and X[t] is a vector of
solution functions {x1[t],x2[t],...}. The initial conditions are
specified by a vector X[0] = {x1[0],x2[0],...}.
>
> In my problem, the number of solution functions will usually vary from
3 to 7, but could be any number.
>
> One approach that doesn't work is:
>
> f := {f[[1]][t], f[[2]][t], f[[3]][t]}
> fInit := {0, 0, 2}
> mat := {(-3*f[[1]][t] - f[[2]][t]), 26.5*f[[1]][t] - f[[2]][t] -
f[[1]][t]*f[[3]][t], f[[1]][t]*f[[2]][t] - f[[3]][t]}
> solution = NDSolve[{Derivative[1][f][t] == mat, f[0] ==
fInit}, f, {t, 0, 17}]
>
> I don't know if the problem is in the way f is specified or in my
expression for NDSolve.
>
> I'd appreciate any assistance.
>
> Thanks and regards,
>
> Glenn
>
- References:
- NDSolve in matrix form
- From: Glenn Carlson <g.crlsn@gmail.com>
- NDSolve in matrix form