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