I'm afraid I'm in over my head here. Though I do know that bool(eqn) doesn't necessarily mean what you think it means.
-Ivan On Dec 31, 2013, at 12:39 PM, Buck Golemon <[email protected]> wrote: > Yes, thanks! > That helped. > > Sage will now reduce those erf functions, sometimes. > > This equation will solve x as `x == r1`: > > > forget() > var('x mu sigma') > assume(sigma>0) > assume(x, mu, sigma, 'real') > > from sage.calculus.calculus import maxima > maxima.eval('''matchdeclare(xx, lambda ([e], featurep (e, > real)));\ntellsimpafter (inverse_erf (erf (xx)), xx);\nmatchdeclare (yy, > lambda ([e], -1 < e and e < 1));\ntellsimpafter (erf (inverse_erf (yy)), > yy);''') > > demo = (-erf( sqrt(2)*(mu - x)) == -erf( sqrt(2)*mu - sqrt(2)*x)) > show(demo) > show(solve(demo, x)) > show(solve(solve(demo, x), x)) > show(bool(demo)) > > > 1) Is it bad that I need to call solve() twice here? > 2) What is r1? > > This quite similar equation however refuses to solve and has boolean value > False: > > eqn = (1/2*erf(-(sqrt(2)*mu - sqrt(2)*x)/(2*sigma)) + 1/2 == > 1/2*erf(-sqrt(2)*(mu - x)/(2*sigma)) + 1/2) > > show(eqn) > show(solve(eqn, x)) > show(solve(solve(eqn, x), x)) > show(bool(eqn)) > > > Actual output: False > Expected output: True > > > 3) What prevents sage from knowing these arguments are real and using the > above user-defined simpification? > > > On Mon, Dec 30, 2013 at 9:36 AM, Ivan Andrus <[email protected]> wrote: > I think this might be because "the maxima used by the calculus package is > different than the one in the interactive interpreter." That's from > sage.calculus.calculus? > > Try the following: > > sage: from sage.calculus.calculus import maxima as sm > sage: sm.eval('''matchdeclare (xx, lambda ([e], featurep (e, real))); > tellsimpafter (inverse_erf (erf (xx)), xx); > matchdeclare (yy, lambda ([e], -1 < e and e < 1)); > tellsimpafter (erf (inverse_erf (yy)), yy);'''); > > sage: solve(erf(x) == erf(y), x) > [x == inverse_erf(erf(y))] > sage: assume(x, y, 'real') > sage: solve(erf(x) == erf(y), x) > [x == y] > > -Ivan > > On Dec 30, 2013, at 10:08 AM, Buck Golemon <[email protected]> wrote: > >> So I've succeeded in telling maxima how to simplify this, but it doesn't >> translate through to sage: >> >> sage: print maxima.eval(''' >> >> declare([x, y], real) >> >> solve(erf(x) = erf(y), x) >> >> ''') >> done >> [x=inverse_erf(erf(y))] >> >> sage: print maxima.eval(''' >> >> matchdeclare (xx, lambda ([e], featurep (e, real))); >> tellsimpafter (inverse_erf (erf (xx)), xx); >> matchdeclare (yy, lambda ([e], -1 < e and e < 1)); >> tellsimpafter (erf (inverse_erf (yy)), yy); >> ''') >> done >> [inverse_erfrule1,?simp\-inverse\-erf] >> done >> [erfrule1,?simp\-erf] >> >> sage: print maxima.eval(''' >> solve(erf(x) = erf(y), x) >> ''') >> [x=y] >> >> sage: var('x y') >> (x, y) >> >> sage: assume(x, y, 'real') >> sage: assumptions() >> [x is real, y is real] >> >> sage: solve(erf(x) == erf(y), x) >> [x == inverse_erf(erf(y))] >> >> >> >> On Sun, Dec 29, 2013 at 9:32 AM, JamesHDavenport <[email protected]> >> wrote: >> In fact you don't really need MathWorld: erf is continuous monotone >> R->(-1,1), so must have an inverse function (-1,1)->R. >> How you tell Sage this needs a Sage expert. >> >> On Saturday, 28 December 2013 19:46:49 UTC, Buck Golemon wrote: >> I've found here: >> http://mathworld.wolfram.com/InverseErf.html >> >> (2) >> with the identity holding for >> >> >> Is this a bit of information that can be added (by me?) to sage? >> >> >> On Saturday, December 28, 2013 11:32:02 AM UTC-8, Buck Golemon wrote: >> Yes, I can, but it doesn't have the intended (or any) effect: >> >> sage: assume(x, 'real') >> sage: assume(y, 'real') >> sage: assumptions() >> [x is real, y is real] >> sage: solve(erf(x) == erf(y), x) >> [x == inverse_erf(erf(y))] >> >> >> On Saturday, December 28, 2013 11:27:09 AM UTC-8, Buck Golemon wrote: >> Thanks. >> If I understand you, the problems lie in the complex domain, where I was >> only thinking of the real numbers. >> >> Can I not do something to the effect of assume(x, 'real') ? >> >> On Saturday, December 28, 2013 10:07:41 AM UTC-8, JamesHDavenport wrote: >> erf, as a function C->C, is not 1:1 (see 7.13(i) of DLMF), so this >> "simplification" would be incorrect. >> I do not know how to tell Sage that you want real-valued >> functions/variables, when of course it would be correct to do the >> simplification. >> >> On Friday, 27 December 2013 22:40:40 UTC, Buck Golemon wrote: >> 1) Sage seems unable to reduce `erf(x) == erf(y)` to `x == y`. How can I >> help this along? >> solve(erf(x) == erf(y), x)[0].simplify_full() >> >> Actual output: x == inverse_erf(erf(y)) >> Expected output: x == y >> >> I had expected that sage would trivially reduce `inverse_erf(erf(y))` to `y`. >> >> 2) This output references 'inverse_erf', which doesn't seem to be >> importable t from anywhere in sage. Am I correct? >> >> --- >> >> My concrete problem is re-deriving the formula for the normal-distribution >> cdf. I get a good solution from sage, but fail in showing that it's >> equivalent to a known solution because: >> >> var('x sigma mu') >> assume(sigma > 0) >> eq3 = (-erf((sqrt(2)*mu - sqrt(2)*x)/(2*sigma)) == -erf((sqrt(2)*(mu - >> x))/(2*sigma))) >> bool(eq3) >> >> Actual output: False >> Expected output: True >> >> >> However this quite similar formula works fine: >> >> eq3 = (-erf(sqrt(2)*mu - sqrt(2)*x) == -erf(sqrt(2)*(mu - x))) >> bool(eq3) >> >> Output: True >> >> --- >> Include: >> Platform (CPU) -- x86_64 >> Operating System -- Ubuntu 13.10 >> Exact version of Sage (command: "version()") -- 'Sage Version 5.13, Release >> Date: 2013-12-15' >> >> >> >> >> >> >> >> >> >> >> >> >> >> -- >> You received this message because you are subscribed to a topic in the >> Google Groups "sage-support" group. >> To unsubscribe from this topic, visit >> https://groups.google.com/d/topic/sage-support/OlHZAPXeWdQ/unsubscribe. >> To unsubscribe from this group and all its topics, send an email to >> [email protected]. >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/sage-support. >> For more options, visit https://groups.google.com/groups/opt_out. >> >> >> -- >> You received this message because you are subscribed to the Google Groups >> "sage-support" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> >> To post to this group, send email to [email protected]. >> Visit this group at http://groups.google.com/group/sage-support. >> For more options, visit https://groups.google.com/groups/opt_out. > > > -- > You received this message because you are subscribed to a topic in the Google > Groups "sage-support" group. > To unsubscribe from this topic, visit > https://groups.google.com/d/topic/sage-support/OlHZAPXeWdQ/unsubscribe. > To unsubscribe from this group and all its topics, send an email to > [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/sage-support. > For more options, visit https://groups.google.com/groups/opt_out. > > > -- > You received this message because you are subscribed to the Google Groups > "sage-support" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > Visit this group at http://groups.google.com/group/sage-support. > For more options, visit https://groups.google.com/groups/opt_out. -- You received this message because you are subscribed to the Google Groups "sage-support" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. Visit this group at http://groups.google.com/group/sage-support. For more options, visit https://groups.google.com/groups/opt_out.
