Six month and a few versions of Sage and Maxima later, I've checked (in a
different way, see below) that the same problem still exists. Nobody has a
clue about this problem ?
sage: reset()
sage: var("x,mu,sigma")
(x, mu, sigma)
sage: dlnorm(x,mu,sigma)=e^-((log(x)-mu)^2/(2*sigma^2))/(sigma*x*sqrt(2*pi))
sage: integrate(dlnorm(x,mu,sigma),x,0,oo).canonicalize_radical()
1
sage: m=integrate(x*dlnorm(x,mu,sigma),x,0,oo).canonicalize_radical()
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
/usr/local/sage-6.7/local/lib/python2.7/site-packages/sage/all_cmdline.pyc
in <module>()
----> 1 m=integrate(x*dlnorm(x,mu,sigma),x,Integer(0),oo).
canonicalize_radical()
/usr/local/sage-6.7/local/lib/python2.7/site-packages/sage/misc/functional.pyc
in integral(x, *args, **kwds)
661 """
662 if hasattr(x, 'integral'):
--> 663 return x.integral(*args, **kwds)
664 else:
665 from sage.symbolic.ring import SR
/usr/local/sage-6.7/src/sage/symbolic/expression.pyx in
sage.symbolic.expression.Expression.integral
(build/cythonized/sage/symbolic/expression.cpp:52709)()
10695 R = ring.SR
10696 return R(integral(f, v, a, b, **kwds))
> 10697 return integral(self, *args, **kwds)
10698
10699 integrate = integral
/usr/local/sage-6.7/local/lib/python2.7/site-packages/sage/symbolic/integration/integral.pyc
in integrate(expression, v, a, b, algorithm, hold)
759 return indefinite_integral(expression, v, hold=hold)
760 else:
--> 761 return definite_integral(expression, v, a, b, hold=hold)
762
763 integral = integrate
/usr/local/sage-6.7/src/sage/symbolic/function.pyx in
sage.symbolic.function.BuiltinFunction.__call__
(build/cythonized/sage/symbolic/function.cpp:10862)()
992 res = self._evalf_try_(*args)
993 if res is None:
--> 994 res = super(BuiltinFunction, self).__call__(
995 *args, coerce=coerce, hold=hold)
996
/usr/local/sage-6.7/src/sage/symbolic/function.pyx in
sage.symbolic.function.Function.__call__
(build/cythonized/sage/symbolic/function.cpp:6798)()
500 for i from 0 <= i < len(args):
501 vec.push_back((<Expression>args[i])._gobj)
--> 502 res = g_function_evalv(self._serial, vec, hold)
503 elif self._nargs == 1:
504 res = g_function_eval1(self._serial,
/usr/local/sage-6.7/src/sage/symbolic/function.pyx in
sage.symbolic.function.BuiltinFunction._evalf_or_eval_
(build/cythonized/sage/symbolic/function.cpp:11519)()
1063 res = self._evalf_try_(*args)
1064 if res is None:
-> 1065 return self._eval0_(*args)
1066 else:
1067 return res
/usr/local/sage-6.7/local/lib/python2.7/site-packages/sage/symbolic/integration/integral.pyc
in _eval_(self, f, x, a, b)
174 for integrator in self.integrators:
175 try:
--> 176 return integrator(*args)
177 except NotImplementedError:
178 pass
/usr/local/sage-6.7/local/lib/python2.7/site-packages/sage/symbolic/integration/external.pyc
in maxima_integrator(expression, v, a, b)
19 result = maxima.sr_integral(expression,v)
20 else:
---> 21 result = maxima.sr_integral(expression, v, a, b)
22 return result._sage_()
23
/usr/local/sage-6.7/local/lib/python2.7/site-packages/sage/interfaces/maxima_lib.pyc
in sr_integral(self, *args)
782 raise ValueError("Integral is divergent.")
783 elif "Is" in s: # Maxima asked for a condition
--> 784 self._missing_assumption(s)
785 else:
786 raise
/usr/local/sage-6.7/local/lib/python2.7/site-packages/sage/interfaces/maxima_lib.pyc
in _missing_assumption(self, errstr)
991 + errstr[jj+1:k] +">0)', see `assume?` for more
details)\n" + errstr
992 outstr = outstr.replace('_SAGE_VAR_','')
--> 993 raise ValueError(outstr)
994
995 def is_MaximaLibElement(x):
ValueError: Computation failed since Maxima requested additional
constraints; using the 'assume' command before evaluation *may* help
(example of legal syntax is 'assume(sigma^2+mu>0)', see `assume?` for more
details)
Is sigma^2+mu positive, negative or zero?
sage: maxima("declare(x,real,mu,real,sigma,real);")
done
sage: maxima("assume(sigma>0);")
[sigma>0]
sage:
maxima("define(dlnorm(x,mu,sigma),%e^-((log(x)-mu)^2/(2*sigma^2))/(sigma*x*sqrt(2*%pi)));")
dlnorm(x,mu,sigma):=%e^-((log(x)-mu)^2/(2*sigma^2))/(sqrt(2*%pi)*sigma*x)
sage: maxima("radcan(integrate(dlnorm(x,mu,sigma),x,0,inf));")
1
sage: maxima("m:radcan(integrate(x*dlnorm(x,mu,sigma),x,0,inf));")
%e^((sigma^2+2*mu)/2)
sage: maxima("v:radcan(integrate((x-m)^2*dlnorm(x,mu,sigma),x,0,inf));")
%e^(2*sigma^2+2*mu)-%e^(sigma^2+2*mu)
sage:
HTH,
--
Emmanuel Charpentier
Le samedi 25 octobre 2014 11:28:47 UTC+2, Emmanuel Charpentier a écrit :
>
> Paedagogic exercise :
> Goal : simulate from a lognormal with known mean and standard deviation
> (for meta-analytic purposes...).
> ==> Intermediate goal 1 : estimate lognormal parameters mu and sigma from
> published mean and variance (method of moments).
> ==> Intermediate goal 2 : express mean and variance in terms of mu and
> sigma.
> ==> Intermediate goal 3 : define the lognormal density (starting with the
> normal).
> Maxima does this relatively easily. Using Sage's maxima :
>
> charpent@asus16-ec:~$ sage -maxima
> ;;; Loading #P"/usr/local/sage-6.3/local/lib/ecl/cmp.fas"
> ;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
> ;;;
> ;;; End of Pass 1.
> ;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
> ;;;
> ;;; End of Pass 1.
> ;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
> ;;;
> ;;; End of Pass 1.
> ;;; OPTIMIZE levels: Safety=2, Space=0, Speed=3, Debug=0
> ;;;
> ;;; End of Pass 1.
> ;;; Loading #P"/usr/local/sage-6.3/local/lib/ecl/sb-bsd-sockets.fas"
> ;;; Loading #P"/usr/local/sage-6.3/local/lib/ecl/sockets.fas"
> ;;; Loading #P"/usr/local/sage-6.3/local/lib/ecl/defsystem.fas"
> Maxima 5.34.1 http://maxima.sourceforge.net
> using Lisp ECL 13.5.1
> Distributed under the GNU Public License. See the file COPYING.
> Dedicated to the memory of William Schelter.
> The function bug_report() provides bug reporting information.
> (%i1) declare(x,real,y,real,mu,real,sigma,real);
> (%o1) done
> (%i2) assume(sigma>0);
> (%o2) [sigma > 0]
> (%i3)
> define(phi(x,mu,sigma),%e^-((x-mu)^2/(2*sigma^2))/(sigma*sqrt(2*%pi)));
> 2
> (x - mu)
> - ---------
> 2
> 2 sigma
> %e
> (%o3) phi(x, mu, sigma) := -----------------------
> sqrt(2) sqrt(%pi) sigma
> (%i4)
> define(dln(x,mu,sigma),subst([y=log(x)],phi(y,mu,sigma))*diff(log(x),x));
> 2
> (log(x) - mu)
> - --------------
> 2
> 2 sigma
> %e
> (%o4) dln(x, mu, sigma) := -------------------------
> sqrt(2) sqrt(%pi) sigma x
> (%i5) M1:integrate(x*dln(x,mu,sigma),x,0,inf);
> 2
> sigma + 2 mu
> -------------
> 2
> (%o5) %e
> (%i6) V1:factor(integrate((M1-x)^2*dln(x,mu,sigma),x,0,inf));
> 2 2
> sigma sigma + 2 mu
> (%o6) (%e - 1) %e
> (%i7)
>
> But the same computation in Sage seems to need (needlessly) further
> hypotheses :
>
> sage: var("x, y, mu, sigma")
> (x, y, mu, sigma)
> sage: assume(x,"real",y,"real",mu,"real",sigma,"real",sigma>0)
> sage:
> phi(x,mu,sigma)=e^-((x-mu)^2/(2*sigma^2))/(sigma*sqrt(2*pi)).simplify()
> dln(x,mu,sigma)=phi(y,mu,sigma).subs(y=log(x))*diff(log(x),x).simplify()
> sage: dln
> (x, mu, sigma) |--> 1/2*sqrt(2)*e^(-1/2*(mu -
> log(x))^2/sigma^2)/(sqrt(pi)*sigma*x)
> sage: M2=integrate(x*dln(x,mu,sigma),x,0,oo).simplify()
> ---------------------------------------------------------------------------
> ValueError Traceback (most recent call last)
> <ipython-input-11-2c2ea6d23ef8> in <module>()
> ----> 1 M2=integrate(x*dln(x,mu,sigma),x,Integer(0),oo).simplify()
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/misc/functional.pyc
>
> in integral(x, *args, **kwds)
> 800 """
> 801 if hasattr(x, 'integral'):
> --> 802 return x.integral(*args, **kwds)
> 803 else:
> 804 from sage.symbolic.ring import SR
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/symbolic/expression.so
>
> in sage.symbolic.expression.Expression.integral
> (build/cythonized/sage/symbolic/expression.cpp:50867)()
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/symbolic/integration/integral.pyc
>
> in integrate(expression, v, a, b, algorithm, hold)
> 710 return indefinite_integral(expression, v, hold=hold)
> 711 else:
> --> 712 return definite_integral(expression, v, a, b, hold=hold)
> 713
> 714 integral = integrate
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/symbolic/function.so
>
> in sage.symbolic.function.BuiltinFunction.__call__
> (build/cythonized/sage/symbolic/function.cpp:9283)()
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/symbolic/function.so
>
> in sage.symbolic.function.Function.__call__
> (build/cythonized/sage/symbolic/function.cpp:5924)()
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/symbolic/integration/integral.pyc
>
> in _eval_(self, f, x, a, b)
> 173 for integrator in self.integrators:
> 174 try:
> --> 175 return integrator(*args)
> 176 except NotImplementedError:
> 177 pass
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/symbolic/integration/external.pyc
>
> in maxima_integrator(expression, v, a, b)
> 19 result = maxima.sr_integral(expression,v)
> 20 else:
> ---> 21 result = maxima.sr_integral(expression, v, a, b)
> 22 return result._sage_()
> 23
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/interfaces/maxima_lib.pyc
>
> in sr_integral(self, *args)
> 783 raise ValueError("Integral is divergent.")
> 784 elif "Is" in s: # Maxima asked for a condition
> --> 785 self._missing_assumption(s)
> 786 else:
> 787 raise
>
> /usr/local/sage-6.3/local/lib/python2.7/site-packages/sage/interfaces/maxima_lib.pyc
>
> in _missing_assumption(self, errstr)
> 992 + errstr[jj+1:k] +">0)', see `assume?` for more
> details)\n" + errstr
> 993 outstr = outstr.replace('_SAGE_VAR_','')
> --> 994 raise ValueError(outstr)
> 995
> 996 def is_MaximaLibElement(x):
>
> ValueError: Computation failed since Maxima requested additional
> constraints; using the 'assume' command before evaluation *may* help
> (example of legal syntax is 'assume(sigma^2+mu>0)', see `assume?` for more
> details)
> Is sigma^2+mu positive, negative or zero?
>
> Trying to explicitely delegate the problem to Sage's Maxima fails for
> seemingly the same reason. Similarly, setting Maxima's domain to "real"
> (via maxima.domain("real")) does not allow to solve the problem.
>
> One notes that, conversively, setting domain to complex in Sage's Maxima
> does not create a similar problem. It simply returns unsimplified
> expressions.
>
> Is that one known ? Should it be reported to either a new ticket or an
> existing one ? Skimming trac for "domain" didn't turn up anything
> significant...
>
> HTH,
>
> --
> Emmanuel Charpentier
>
--
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/d/optout.