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.

Reply via email to