       Recursive issue

• To: mathgroup at smc.vnet.net
• Subject: [mg65404] Recursive issue
• From: Clifford Martin <camartin at snet.net>
• Date: Thu, 30 Mar 2006 05:30:02 -0500 (EST)
• Sender: owner-wri-mathgroup at wolfram.com

```    Group,

Recently I've been working on diffraction propagation problems inside passive  laser cavities.  The standard approach was pioneered by Fox and Li (Bell  Systems Journal 1961) which is a numerical Fresnel propagator that the solution  is fed back into the kernel for each pass. Numerically (which is how Fox and Li  did it), the Mathematica solution is:

The solution is for a one dimensional infinite strip mirror in 1 D.  The  inital parameters and the kernel are given by:

l = 0.6328
w = 2*25*l
z = 100*l
Kmat = Table[(l/5)*(Exp[I*(((2*Pi)/l)*z)]/
Sqrt[I*l*z])*Exp[((-I)*((2*Pi)/l)*(x  - y)^2)/
(2*z)], {x, -400*(l/5), 400*(l/5), l/5},
{y, -400*(l/5), 400*(l/5), l/5}];

Do[f[n] =. , {n, 0,  20}]  ( * This sets the recursive terms  to zero to start another run *)

f =  Table[If[Abs[x] < 25*l,  1, 0],
{x, -400*(l/5), 400*(l/5), l/5}];     (* This defines the initial intensity we set it to 1 *)

f[n_] := f[n] = Kmat  . (f[n - 1]*f);

(* This is the recursive equation where we  use f to normalize the recurring propagation at each mirror *)

(* The next bit is  various cases from f to f which show that the solution conveges to a  ?normal? mode solution after enough passes *)

ListPlot[Abs[f],  PlotRange -> All,
PlotJoined -> True];
ListPlot[Abs[f],  PlotRange -> All,
PlotJoined -> True];
ListPlot[Abs[f],  PlotRange -> All,
PlotJoined -> True];
ListPlot[Abs[f],  PlotRange -> All,
PlotJoined -> True];
ListPlot[Abs[f],  PlotRange -> All,
PlotJoined -> True];
ListPlot[Abs[f],  PlotRange -> All,
PlotJoined -> True];
ListPlot[Abs[f],  PlotRange->All, PlotJoined->True];

This works well and  as expected. Now for the problem (Sorry for the long set up!)

This is Mathematica,  I thought, so I can write the integral propator explicity without worrying  about numerics .  So using the same  values of lamda, w and z, I write the initial intensity and the iterative kernel  as an integral equation and recursively:

f[0, x_] = 1
f[n_, x_] :=  (Exp[I*(((2*Pi)/l)*z)]/Sqrt[I*l*z])*
Integrate[Exp[((-I)*((2*Pi)/l)*(q - x)^2)/(2*z)]*
f[n - 1, q], {q, -w/2, w/2}]

If you look at the  first pass the solution is correct exactly matching the numerical solution but  subsequent passes give the same solution as in pass 1 multiplied by a constant.  In other words, the recursion is not working to feed the solution back into the  kernel for the next step.  When you look  at the solution explicity (algebraicly ) for the first step it?s a bunch of Erf  functions with some constants. When you look at the second pass it?s the same  set of Erf functions multiplied by a larger constant.  It looks like the recursion is working outside in somehow. Is  there something I?m doing wrong in the explicit integral equation vs. the  numerical one?  Or is there a better way  to do the explicit recursive integral equation?

It?s not that I  can?t solve this other ways. I?ve built a Fourier propagator and of course the  numerical Fox-Li solution. What I?m trying to understand is what is going wrong  with the explicit algebraic recursive solution.

If any more detail  is needed I can write anyone off line and provide more details.

Regards,

Cliff

```

• Prev by Date: Re: Problem with Thread over Plus?
• Next by Date: again: roots of transcendental function...
• Previous by thread: Re: solving
• Next by thread: again: roots of transcendental function...