Above 0, the function is monotonic but is ill-behaved in that it is very 
flat; this can cause troubles for different solver routines. A slow but 
robust method is bisection

>>> nsolve(eq,c2,(1,1000),solver='bisect')
mpf('22.964256014441664')

Using that, you don't need a very precise range for the root.

Also, once you have the root, continuation to a new root at a new set of 
parameters can be attempted by slowly varying the old parameters until they 
become the new parameters. This is called "the continuation method" and 
should be able to easily find information on that. Here is an example.


Your equation now is 3/10 - 1/log(c2 + 1) + 17/(50*c2). Let's say you want 
to vary the 3/10 to 5/10, the numerator of 1 on the log term to 2 and the 
17/50 to 2, too. Let's make a function to give a linear variation from a to 
b in n steps:

>>> def vary(a,b,n=10):
...  return a + i*(b-a)/S(n)
...


>>> n = 10
>>> ceq=vary(S(3)/10, s(5)/10, n)-vary(1, 2, n)/log(c2+1)+vary(S(17)/50, 2, 
n)/c2
>>> ceq
i/50 - (i/10 + 1)/log(c2 + 1) + 3/10 + (83*i/500 + 17/50)/c2

We already know that a solution for the original equation is about 22 so 
make that your initial guess

>>> g=22

Then increment the i value to move you toward your desired equation, 
keeping the new solution as your new guess.

>>> for iv in range(n+1):
...  g=nsolve(ceq.subs(i,iv),c2,g)
...

So what is the final solution? The guess that we got when using i=n
>>> g
mpf('35.36155261017116')

And this is the desired equation that we got to by slowly varying the 
coefficients:

>>> ceq.subs(i, iv)
1/2 - 2/log(c2 + 1) + 2/c2

You can't use continuation blindly; graphing is your friend. Don't forget 
about plot in SymPy, too: e.g. plot(x+1,(x,-1,1)).
/c

-- 
You received this message because you are subscribed to the Google Groups 
"sympy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sympy+unsubscr...@googlegroups.com.
To post to this group, send email to sympy@googlegroups.com.
Visit this group at http://groups.google.com/group/sympy.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/d6f5669b-206c-4ea4-a908-3c79a44efb46%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to