Re: NDSolve in matrix form
- To: mathgroup at smc.vnet.net
- Subject: [mg120470] Re: NDSolve in matrix form
- From: "Kevin J. McCann" <kjm at KevinMcCann.com>
- Date: Sun, 24 Jul 2011 07:38:45 -0400 (EDT)
- Delivered-to: l-mathgroup@mail-archive0.wolfram.com
- References: <j0gh6t$bd4$1@smc.vnet.net>
Glenn, First of all, you got into a recurrence problem with you definition of f. Second, the form of the input to NDSolve isn't quite right, you need to use Thread to transform something like {f1[t],f2[t],f3[t]}=={0,0,2} into {f1[t]==0,f2[t]==0,f3[t]==2} Take the code below apart and you will see how this is used. Finally, note that f3 does not enter the first two de's and that it is fairly simple to see that f1=f2=0. Here is my take: Clear[f,fInit,mat] f[t_]={f1[t],f2[t],f3[t]} fInit={0,0,2} mat={-3 f1[t]-f2[t],26.5 f1[t]-f2[t]-f1[t] f2[t],f1[t] f2[t]-f3[t]} eqns=Flatten[{Thread[(f^\[Prime])[t]==mat],Thread[f[0]==fInit]}] solution=NDSolve[eqns,f[t],{t,0,17}][[1]] Cheers, Kevin On 7/24/2011 3:22 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 >