wave eq. problem - Mathematica on the Mac quits!
- To: mathgroup at yoda.physics.unc.edu
- Subject: wave eq. problem - Mathematica on the Mac quits!
- From: gaylord at ux1.cso.uiuc.edu
- Date: Tue, 21 Apr 1992 04:38:07 -0500
===================================
===================================
Chris Haase writes:"
"Here is a short code that computes a numerical sulution to the wave
equation.
It is a modified version of a solution to the diffusion equation that was
sent to me. Anyway, without the For-loop, Mathematica responds with a
$RecursionLimit exceeded error. Is there a slick way to define the
recursion
function that will prevent such an error?
(* Waves by finite difference equation *)
Clear[i, n, u];
step=30;
(* The finite difference form of the wave equation:
the variable i represents the mesh position
the variable n represents the time step *)
u[i_, n_] := u[i, n] = u[i+1, n-1] + u[i-1,n-1] - u[i,n-2];
(* The boundary conditions and initializing profile *)
For[i=-10,i<=step+10,i++,Module[{j},
For[j=-10, j<=0, j++, u[i,j]=0;]
For[j=step,j<=step+10,j++, u[i,j]=0;]
]
]
u[14,-1] = 1.; u[14,0] = 1.;
u[15,-1] = 2.; u[15,0] = 2.;
u[16,-1] = 1.; u[16,0] = 1.;
(* Plot the initial and displaced profiles *)
plot1 = ListPlot[Table[u[i,0], {i, 1, step}],
PlotRange -> {{0,Step}, {-1,1}},
PlotJoined -> True,
AxesLabel -> {"x-position","amplitude"},
DisplayFunction -> Identity];
plot2 = ListPlot[Table[u[i, 4], {i, 1, step}],
PlotJoined -> True,
AxesLabel -> {"x-position","amplitude"},
DisplayFunction -> Identity];
Show[plot1,plot2,
PlotRange -> {{1, step}, {0,2}},
DisplayFunction -> $DisplayFunction];
============================
============================
eliminating the third For statement does not affect the program at all; it
seems to be unnecessary.
eliminating the second For statement produces the recursion depth
exceeded... message.
i then used the obvious bypass (p. 309 in the bible)
$RecursionLimit = X;
to get past the recusion limit and the following happened (using the
program given below)
for X = 2000 and 3000, the recursion depth message still occurred.
for X = 5000, I got a "application ' unknown' quit because of a type 28
error" message and Mathematica quit (the program causing this is given
below).
additional information: i ran this on a IIfx Mac with 20 Mbytes of RAM and
Mathematica 2.0.0 partitioned for 15 Mb under system 7.1.1.1.
=====================================
=====================================
(* Waves by finite difference equation *)
Clear[i, n, u];
$RecursionLimit = 5000;
step=30;
(* The finite difference form of the wave equation:
the variable i represents the mesh position
the variable n represents the time step *)
u[i_, n_] := u[i, n] = u[i+1, n-1] + u[i-1,n-1] - u[i,n-2];
(* The boundary conditions and initializing profile *)
For[i=-10,i<=step+10,i++,Module[{j},
]
]
u[14,-1] = 1.; u[14,0] = 1.;
u[15,-1] = 2.; u[15,0] = 2.;
u[16,-1] = 1.; u[16,0] = 1.;
(* Plot the initial and displaced profiles *)
plot1 = ListPlot[Table[u[i,0], {i, 1, step}],
PlotRange -> {{0,Step}, {-1,1}},
PlotJoined -> True,
AxesLabel -> {"x-position","amplitude"},
DisplayFunction -> Identity];
plot2 = ListPlot[Table[u[i, 4], {i, 1, step}],
PlotJoined -> True,
AxesLabel -> {"x-position","amplitude"},
DisplayFunction -> Identity];
Show[plot1,plot2,
PlotRange -> {{1, step}, {0,2}},
DisplayFunction -> $DisplayFunction];