Optional Arguments and FindRoot

*To*: mathgroup at smc.vnet.net*Subject*: [mg13217] Optional Arguments and FindRoot*From*: sean_ross_at_pl-04m3 at smtpgw1.plk.af.mil*Date*: Mon, 13 Jul 1998 07:43:05 -0400*Sender*: owner-wri-mathgroup at wolfram.com

I have a function which has an optional _Real argument with a default value of 0.0. When I execute FindRoot on this function, it executes properly if I give a non-zero value for my optional parameter or leave it out. If I specify a value of 0.0 for this parameter, then FindRoot substitutes an INTEGER zero. Can anyone shed any light as to why this is occurring? I fixed the problem with an extra function definition for Integer zero final arguments, so that is not an issue. I am interested in why FindRoot decided to put an Integer zero where I specified a Real zero. Thanks. Sean Here is the definition of the function, with a final optional argument qsoi_Real:0. Dkopo[lp_Real:1.064, ls_Real, Topo_Real /; Topo > 20. && Topo <= 200., qsoi_Real:0.] /; ls > lp := Module[{li, qioi}, li = (1/lp - 1/ls)^(-1); qioi = ArcSin[li/ nextLiNbO3[li, Topo]*( nextLiNbO3[ls, Topo]*Sin[qsoi])/ls]; 2*Pi*(nextLiNbO3[lp, Topo]/lp - nextLiNbO3[ls, Topo]*Cos[qsoi]/ls - nextLiNbO3[li, Topo]*Cos[qioi]/li - 1/Dopo[Topo])]; Dopo[T_(*degrees C*)]:= Module[{a=1.54*^-5, b=5.3*^-9}, 29.75 (1+a (T-25.)+ b (T-25.)^2)]; Here is the FindRoot executing just fine if I leave the argument out. FindRoot[Dkopo[1.064,x,45.],{x,1.54,1.55}] {x->1.52972} Here is the FindRoot executing just fine if I specify a non-zero argument. FindRoot[Dkopo[1.064,x,45.,0.001],{x,1.54,1.55}] {x->1.52989} Here is the findroot function substituting an INTEGER zero into my function rather than the REAL zero I specified. FindRoot[Dkopo[1.064,x,45.,0.000],{x,1.54,1.55}] FindRoot::"frnum": "Function ({Dkopo[\(1.06400000000000005`, \ 1.54000000000000003`, 45.`, 0\)]}\) is not a length 1 list of numbers at x = 1.540"