Re: Finding positive / non-complex solutions (newbie)
- To: mathgroup at smc.vnet.net
- Subject: [mg102336] Re: [mg102317] Finding positive / non-complex solutions (newbie)
- From: Jaebum Jung <jaebum at wolfram.com>
- Date: Thu, 6 Aug 2009 06:29:27 -0400 (EDT)
- References: <200908050944.FAA18226@smc.vnet.net>
f[rho, 0.1] is evaluated first without plugin any value at rho and this cause res = {}. One way avoid this evaluation is giving addition arguments in f. For example, f[rho_?NumericQ, t_] := Module[{Pu, Pv, pi, d, eqn1, eqn2, res, res2, pi2}, pi = (u Pu + (1 - u) Pv)/(2 s); d = (Pu - Pv)/(2 s); eqn1 = -t pi (1 - pi) + t u (1 - u) d^2; eqn2 = d (rho + u + (2 pi - 1) t - (u - (1 - u)) (1 + t d)) + pi; res = NSolve[{eqn1 == 0, eqn2 == 0}, {Pu, Pv}]; res2 = Cases[{Pu, Pv} /. res, {(a_Real)?Positive, (b_Real)?Positive} :> {a, b}][[1]]; pi2 = (u res2[[1]] + (1 - u) res2[[2]])/(2 s); (1 - pi2)/u]; i.e., f will not be evaluated when rho is not numeric. - Jaebum Dan wrote: > Hi, > > This is probably easily solved because I'm very much a newbie. I have > two equations (eqn1 and eqn2) with two variables and want to find the > positive (non-zero, no-complex solutions) for when they both equal 0, > as a function of two other parameters, then plot the results. So far > (after several days work), I've found a kind of solution (it plots > correctly), but produces an error. The error, as far as I can tell, > is produced by the "Cases" statement, which is the function I'm using > to find the positive solutions. This will work when the parameters > (theta and rho) are defined, but will fall over when undefined, which > seems to be what happens when I call Plot. > > Any help on this much appreciated (along with any pointers for where > my code looks obscure / overly complex -- as I say, I'm not used to > Mathematica). > > Cheers > Dan > > In[1]:= > f[rho_, t_] := Module [{Pu, Pv, pi, d , eqn1, eqn2, res, res2, pi2}, > pi = (u Pu + (1 - u) Pv)/(2 s); > d = (Pu - Pv)/(2 s); > eqn1 = -t pi (1 - pi) + t u (1 - u) d^2; > eqn2 = d (rho + u + (2 pi - 1) t - (u - (1 - u)) (1 + t d)) + pi; > res = NSolve[{eqn1 == 0, eqn2 == 0}, {Pu, Pv}]; > res2 = > Cases[{Pu, Pv} /. > res, {(a_Real)?Positive, (b_Real)?Positive} :> {a, b}][[1]]; > pi2 = (u res2[[1]] + (1 - u) res2[[2]])/(2 s); > (1 - pi2)/u > ]; > > In[2]:= u = 0.004; > s = 0.02; > > In[4]:= f[1, 0.1] > > Out[4]= 0.237377 > > In[5]:= f[10, 0.1] > > Out[5]= 0.0081024 > > In[6]:= LogLogPlot[{f[rho, 0.1], f[rho, 10]}, {rho, 0.01, 100}] > > > >
- References:
- Finding positive / non-complex solutions (newbie)
- From: Dan <dan.halligan@gmail.com>
- Finding positive / non-complex solutions (newbie)