Re: Debug of FindRoot
- To: mathgroup at smc.vnet.net
- Subject: [mg78882] Re: Debug of FindRoot
- From: dimitris <dimmechan at yahoo.com>
- Date: Thu, 12 Jul 2007 05:10:58 -0400 (EDT)
- References: <f72c9h$d75$1@smc.vnet.net>
The reason is clear from the following plot Plot[BesselJ[0, z]/BesselJ[1, z], {z, 0.1, 12}] and as well << "NumericalMath`BesselZeros`" BesselJZeros[1,4] {3.83171,7.01559,10.1735,13.3237} That is the zeros of the denominator (at the roots of BesselJ[1,z] ) causes problems to Mathematica. Work as follows instead (*copy paste the following as a whole cell; select the cell and press Shift+Enter*) Print[StyleForm["the function", FontColor -> Blue]] f[z_] = Numerator[Together[BesselJ[0, z]/BesselJ[1, z] - z/(1/2)]] plot = Plot[f[x], {x, 0.1, 10}]; Print[StyleForm["the points used by the Plot function", FontColor -> Blue]]; Short[points = Cases[plot, {(x_)?NumberQ, (y_)?NumberQ}, Infinity]] Print[StyleForm["find where the function changes sign", FontColor -> Blue]]; seeds = Position[Apply[Times, Partition[points[[All,2]], 2, 1], {1}], x_ /; x <= 0] Print[StyleForm["between this points in x axis there is a change in sign of f[x]", FontColor -> Blue]]; samples = Extract[Partition[points[[All,1]], 2, 1], seeds] Print[StyleForm["the roots, at last!", FontColor -> Blue]]; (FindRoot[f[x] == 0, {x, #1[[1]], #1[[2]]}, WorkingPrecision -> 30, PrecisionGoal -> 10] & ) /@ samples (*Above I use the points used by the Plot command in order to plot the function. It is found between what points in the requested interval the function changes sign. This points are used as starting points for the secant method*) Regards Dimitris Miguel : > To resolve one of the heat equations it is necesary to calculate the > solution of z for BesselJ[0,z]/BesselJ[1,z]==z/Bi, where Bi is the > Biot number (equal to 0.5, for example). > > 1.- Plot[{BesselJ[0,z]/BesselJ[1,z],z/Bi},{z,0.001,12}]. > > >From this plot I deduce the ranges, more or less, {1,4,7,10}. > > 2.- FindRoot[BesselJ[0,z]/BesselJ[1,z]==z/Bi,{z,#}]&/@{1,4,7,10} > {{z->0.940771},{z->3.95937},{z->0.940771},{z->3.95937}} > > I dont understand the reason. With others differents intervals it > works fine.