MathGroup Archive 2007

[Date Index] [Thread Index] [Author Index]

Search the Archive

Re: Trouble with FindRoot

  • To: mathgroup at smc.vnet.net
  • Subject: [mg79149] Re: Trouble with FindRoot
  • From: Jean-Marc Gulliet <jeanmarc.gulliet at gmail.com>
  • Date: Fri, 20 Jul 2007 03:14:15 -0400 (EDT)
  • Organization: The Open University, Milton Keynes, UK
  • References: <f7n4rs$28h$1@smc.vnet.net>

Sooraj R wrote:
> Hi all
> I have an equation involving Airy Functions, and
> Mathematica gives the roots when I use FindRoot.
> I need to find the roots for a series of values.(LH
> and F)
> The result(eh) is an array of 10x16 elements
> The initial guess for the first row is given by
> ZeroField.
> Now for the initial guess for second row, I need to
> use the first row as the initial guess, and so on.
> How do I do this?
> The problem is that I am unable to get rid of the
> brackets() and ->.
> Does anyone know how to get rid of these two while
> using FindRoot.
> In that case It would have been more conveninet to
> store as an array and manipulate the results at a
> later stage.
> Here is the code.
> 
> eh = Table[0, {10}, {16}];
> m = 3.85857975 10^-31;
> charge = 1.602 10^-19;
> hbar = 1.054571 10^-34;
> LH = {88.83663979522105, 93.83693172861489,
> 98.83720928295747, 
>    103.83746882256844, 108.83770913229637,
> 113.837930338503, 
>    118.83813328307562, 123.83831915913095,
> 128.83848929997706, 
>    133.8386450587284, 138.83878774185274,
> 143.8389185748323, 
>    148.8390386868427, 153.83914910653547,
> 158.83925076412058, 
>    163.83934449683832};
> F = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 10^6;
> ZeroField = Table[0, {16}];
> For[i = 1, i < 17, i++,
>  ZeroField[[i]] = (Pi hbar)^2/(2 m charge (LH[[i]]
> 10^-10)^2)]
> ZeroField // MatrixForm;
> For[j = 1, j < 11, j++,
>  For[i = 1, i < 17, i++,
>   
>   eh[[j, i]] = 
>    FindRoot[
>     AiryAi[-( (2*m)/(charge* hbar *F[[j]])^2)^(1/
>          3) (Eh charge + charge*F[[j]]*(LH[[i]]
> 10^-10)/2)] 
>       AiryBi[-( (2*m)/(charge* hbar *F[[j]])^2)^(1/
>          3) (Eh charge - charge*F[[j]]*(LH[[i]]
> 10^-10)/2)] == 
>      AiryAi[-( (2*m)/(charge* hbar *F[[j]])^2)^(1/
>          3) (Eh charge - charge*F[[j]]*(LH[[i]]
> 10^-10)/2)] 
>       AiryBi[-( (2*m)/(charge* hbar *F[[j]])^2)^(1/
>          3) (Eh charge + charge*F[[j]]*(LH[[i]]
> 10^-10)/2)], {Eh, 
>      ZeroField[[i]]}]]]
> eh // MatrixForm
> 
> Many thanks in advance for any help
> best regards
> Sooraj

Please, find below a modified version of your code with some comments.

(* We initialize the matrix with the symbolic value 'Eh' -- note that Eh 
is not a string but just a symbol -- rather than zeros so we will be 
able to replace them by the numerical values returned by FindRoot. 
Indeed, FindRoot returns a transformation rule of the from symbolname -> 
value. Later we will use the replacement operator /. to replace the 
symbols by their values. *)

eh = Table[Eh, {10}, {16}];

m = 3.85857975 10^-31;
charge = 1.602 10^-19;
hbar = 1.054571 10^-34;
LH = {88.83663979522105, 93.83693172861489, 98.83720928295747,
    103.83746882256844, 108.83770913229637, 113.837930338503,
    118.83813328307562, 123.83831915913095, 128.83848929997706,
    133.8386450587284, 138.83878774185274, 143.8389185748323,
    148.8390386868427, 153.83914910653547, 158.83925076412058,
    163.83934449683832};
F = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10} 10^6;
ZeroField = Table[0, {16}];
For[i = 1, i < 17, i++,
  ZeroField[[i]] = (Pi hbar)^2/(2 m charge (LH[[i]] 10^-10)^2)]

(* Added Print function so ZeroField is displayed *)
Print[ZeroField // MatrixForm];

For[j = 1, j < 11, j++,
  For[i = 1, i < 17, i++,

(* Here we are: the symbol Eh located at (j, i) is going to be replace 
by the value returned by FindRoot by applying the replacement operator 
/. to the transformation rule of the form {Eh -> somenumber} *)
   eh[[j, i]] =
    Eh /. FindRoot[
      AiryAi[-((2*m)/(charge*hbar*F[[j]])^2)^(1/3) (Eh charge +
            charge*F[[j]]*(LH[[i]] 10^-10)/
              2)] AiryBi[-((2*m)/(charge*hbar*F[[j]])^2)^(1/
              3) (Eh charge - charge*F[[j]]*(LH[[i]] 10^-10)/2)] ==
       AiryAi[-((2*m)/(charge*hbar*F[[j]])^2)^(1/3) (Eh charge -

            charge*F[[j]]*(LH[[i]] 10^-10)/
              2)] AiryBi[-((2*m)/(charge*hbar*F[[j]])^2)^(1/
              3) (Eh charge + charge*F[[j]]*(LH[[i]] 10^-10)/2)], {Eh,
       ZeroField[[i]]}]]]
eh // MatrixForm

Regards,
Jean-Marc


  • Prev by Date: Question about Union
  • Next by Date: Re: Plot without Show
  • Previous by thread: Trouble with FindRoot
  • Next by thread: Re: Trouble with FindRoot