Re: For Loop and NDSolve
- To: mathgroup at smc.vnet.net
- Subject: [mg85254] Re: For Loop and NDSolve
- From: "Jean-Marc Gulliet" <jeanmarc.gulliet at gmail.com>
- Date: Mon, 4 Feb 2008 03:14:55 -0500 (EST)
- References: <fnuh4s$9ni$1@smc.vnet.net> <47A4A595.4000601@gmail.com>
PV wrote: > I am trying to solve a time dependent ordinary differential equation > of matrices. Here my coefficient matrices in the DE change at every > instant of time, depending on the solution of the DE in the previous > instant( feed back type problem). To implement this I use NDSolve with > a For loop in time. This works fine for certain size of my matrices > but has got me into trouble for other sizes. I run out of memory > pretty quickly. I have 1 GB Ram with an AMD X2 duo core 1.7GHZ > processor. > Here are the routines that cause problems:: > > N0 = 1921(large number) <snip> Here, I believe you mean something like N0 = 1921(* large number *) rather than N0 = 1921 \times (large \times number). Even though, the peace of code is not working independently. In[1]:= N0 = 1921(* large number *) For[j = 1, j <= 100, t = j*delt; solnmatrix = SparseArray[{{i_, i_} -> (-V0[a]/2 + ((i - (4*N0 + 1))*k0 - 2*t)^2), {m_, n_} /; Abs[m - n] == N0 -> -V0[a]/4}, {24*N0 + 1, 24*N0 + 1}]; Print["pbegin ", MemoryInUse[]]; soln = NDSolve[{I*c3*u'[p] == solnmatrix.u[p], u[0] == wavefn}, u, {p, 0, delt}]; Print["p1 ", MemoryInUse[]]; wavefn = First[u[delt] /. soln]; Clear[solnmatrix]; Clear[soln]; Print["p2 ", MemoryInUse[]]; C1 = (Tr[Abs[wavefn]^2/2] + 0.25*Sum[ Conjugate[wavefn[[n]]]*wavefn[[n + N0]], {n, 1, 23*N0 + 1}] + 0.25*Sum[ Conjugate[wavefn[[n]]]*wavefn[[n - N0]], {n, N0 + 1, 24*N0 + 1}])*L; b = -\[Eta]/(I*\[Gamma]* C1 - \[Kappa]) + ((\[Eta] + (I*\[Gamma]*C1 - \[Kappa])* a)/(I*\[Gamma]*C1 - \[Kappa]))* E^(delt*Tb*(I*\[Gamma]*C1 - \[Kappa])); a = b; AppendTo[fieldlist3, a]; AppendTo[normlist, L*Tr[Abs[wavefn]^2]]; AppendTo[couplinglist, C1]; j++; Print["pend ", MemoryInUse[]];] Out[1]= 1921 During evaluation of In[1]:= pbegin 20397464 During evaluation of In[1]:= NDSolve::ndnl: Endpoint delt in \ {p,0.,delt} is not a real number. >> During evaluation of In[1]:= p1 20570064 During evaluation of In[1]:= ReplaceAll::reps: {<<1>>} is neither a \ list of replacement rules nor a valid dispatch table, and so cannot \ be used for replacing. >> During evaluation of In[1]:= p2 10720384 During evaluation of In[1]:= Part::partw: Part 1922 of u[delt] does \ not exist. >> During evaluation of In[1]:= Part::partw: Part 2 of u[delt] does not \ exist. >> During evaluation of In[1]:= Part::partw: Part 1923 of u[delt] does \ not exist. >> During evaluation of In[1]:= General::stop: Further output of \ Part::partw will be suppressed during this calculation. >> During evaluation of In[1]:= $RecursionLimit::reclim: Recursion depth \ of 256 exceeded. >> During evaluation of In[1]:= $RecursionLimit::reclim: Recursion depth \ of 256 exceeded. >> During evaluation of In[1]:= $RecursionLimit::reclim: Recursion depth \ of 256 exceeded. >> During evaluation of In[1]:= General::stop: Further output of \ $RecursionLimit::reclim will be suppressed during this calculation. >> [... Computation aborted ...] > It would be great if I could get a solution for this!! The best thing to do is to post a fully working example that closely match your problem, so people can reproduce the errors and try to fix them. Regards, -- Jean-Marc