Re: Re: Re: Re: Why can't Mathematica find this root?
- To: mathgroup at smc.vnet.net
- Subject: [mg38460] Re: [mg38440] Re: [mg38417] Re: [mg38362] Re: Why can't Mathematica find this root?
- From: Andrzej Kozlowski <andrzej at platon.c.u-tokyo.ac.jp>
- Date: Wed, 18 Dec 2002 01:53:42 -0500 (EST)
- Sender: owner-wri-mathgroup at wolfram.com
I realized that the function g I defined below will eliminate very few cases and it was really the result of a mental confusion. It can't even identify as equivalent expressions such as Pi/3+ 2Pi n and Pi/3 - 2Pi n. Here is a definition that works much better: g[x_, y_] := PolynomialMod[x, 2*Pi] === PolynomialMod[y, 2*Pi] Union[l, SameTest -> (g[x /. #1, x /. #2] & )] will now work in a lot more cases. Andrzej On Sunday, December 15, 2002, at 04:10 PM, Andrzej Kozlowski wrote: > > On Saturday, December 14, 2002, at 05:20 PM, Daniel Lichtblau wrote: > >> Konrad Den Ende wrote: >>> >>>> No, you don't. There are infinitely many roots, of which Mathematica >>>> gives >>>> you only three: -Pi/2, 0, and Pi/2. >>> >>> Actually, you get five different roots, not three. Nevertheless - >>> point >>> taken. >>> I ment of course that i'd like Mathematica to give me ALL the roots >>> on form: >>> angle + (period * n). I'll try to be more exact the next time. >>> >>>> Didn't you notice Mathematica's comment that, since inverse >>>> functions were >>>> being used, some solutions might not be found? That's the >>>> explanation. >>> >>> Yes, i did. I wonder why it's the ONLY method used by Mathematica. It >>> feels >>> pretty bad to know that the program "misses" some simple roots. I >>> don't >>> wonder >>> "what kind of algorithm gave that", rather "why do they use only that >>> algorithm". >>> >>> I appologize if my question caused any trouble by it's "fuzziness". >>> >>> -- >>> Vânligen >>> Konrad >>> ------------------- >> >> I did not really understand at first the nature of the question. Now >> that I do I'll take a stab at it. Under Solve>Further >> Examples>"Getting >> infinite solution sets for some equations" in the Help Browser, there >> is >> code to do something called "GeneralizeSolve". It is based on finding >> periodic inverses to various known functions, and takes advantage of >> the >> fact that Solve will find solutions in terms of these inverse >> functions. >> It does not quite work directly on your problem for the simple reason >> that e.g. ArcSin[0] will evaluate to 0. So we make it work by solving >> f'[x]==a and substituting a->0 afterward. >> >> Here is the code in question. >> >> arctrigs = {ArcSin, ArcCos, ArcCsc, ArcSec, ArcTan, ArcCot, ArcSinh, >> ArcCosh, >> ArcCsch, ArcSech, ArcTanh, ArcCoth}; >> >> periods = {2*Pi, 2*Pi, 2*Pi, 2*Pi, Pi, Pi, 2*I*Pi, >> 2*I*Pi, 2*I*Pi, 2*I*Pi, I*Pi, I*Pi}; >> >> (* We use n to denote an arbitrary integer *) >> >> Generalize[f_[x_], n_] := >> f[x] + nperiods[[Position[arctrigs, f][[1, 1]]]] /; >> MemberQ[arctrigs, >> f] >> >> Generalize[Log[x_],n_]:=Log[x]+2\[Pi]\[ImaginaryI]n >> >> Generalize[ProductLog[x_],n_]:=ProductLog[n,x] >> >> Generalize[x___, n_] := x >> >> GeneralizedSolve[eqns_, vars_] := Generalize[#, n] & //@ Solve[eqns, >> vars] >> >> In[12]:= >> GeneralizedSolve[f'[x]==a,x]/. a->0 >> >> Solve::ifun: Inverse functions are being used by Solve, so some >> solutions may \ >> not be found. >> >> Out[12]= >> {{x -> -((2*Pi)/3) - 2*n*Pi}, {x -> (2*Pi)/3 + 2*n*Pi}, >> {x -> -(Pi/3) - 2*n*Pi}, {x -> Pi/3 + 2*n*Pi}, >> {x -> -Pi - 2*n*Pi}, {x -> Pi + 2*n*Pi}, >> {x -> -2*n*Pi}, {x -> 2*n*Pi}} >> >> A minor inconvenience is that some solutions may be listed more than >> once e.g. the last two are equivalent if we regard n as ranging over >> all >> integers. >> >> >> Daniel Lichtblau >> Wolfram Research >> >> >> > > > This last "minor inconvenience" can be dealt with as follows: > > g[x_, y_] := TrueQ[Simplify[Element[x, > Integers], Element[y, Integers]] && > Simplify[Element[y, Integers], Element[x, Integers]]] > > > l = GeneralizedSolve[Derivative[1][f][x] == a, x] /. a -> 0 > > > Solve::ifun:Inverse functions are being used by Solve, so some > solutions may \ > not be found. > > > {{x -> -((2*Pi)/3) - 2*n*Pi}, {x -> (2*Pi)/3 + 2*n*Pi}, > {x -> -(Pi/3) - 2*n*Pi}, {x -> Pi/3 + 2*n*Pi}, > {x -> -Pi - 2*n*Pi}, {x -> Pi + 2*n*Pi}, {x -> -2*n*Pi}, > {x -> 2*n*Pi}} > > > > Union[l, SameTest -> (g[x /. #1, x /. #2] & )] > > > {{x -> -2*n*Pi}, {x -> -Pi - 2*n*Pi}, > {x -> -((2*Pi)/3) - 2*n*Pi}, {x -> -(Pi/3) - 2*n*Pi}, > {x -> Pi/3 + 2*n*Pi}, {x -> (2*Pi)/3 + 2*n*Pi}, > {x -> Pi + 2*n*Pi}} > > > (One could of course write a version of GeneralizedSolve that does this > automatically). > > > Andrzej Kozlowski > Yokohama, Japan > http://www.mimuw.edu.pl/~akoz/ > http://platon.c.u-tokyo.ac.jp/andrzej/ > > > > Andrzej Kozlowski Yokohama, Japan http://www.mimuw.edu.pl/~akoz/ http://platon.c.u-tokyo.ac.jp/andrzej/