IPython console for SymPy 1.7.dev (Python 3.6.9-64-bit) (ground types:
python)

These commands were executed:
>>> from __future__ import division
>>> from sympy import *
>>> x, y, z, t = symbols('x y z t')
>>> k, m, n = symbols('k m n', integer=True)
>>> f, g, h = symbols('f g h', cls=Function)
>>> init_printing()

Documentation can be found at https://docs.sympy.org/dev


In [1]: from sympy.stats import ContinuousRV

In [2]: from sympy import Lambda, log, Pow, exp, symbols, Interval, oo

In [3]: _BETA = 10.56

In [5]: _ETA = -90

In [6]: _ALPHA = 3.11

In [7]: x, beta, alpha, eta = symbols("x, beta, alpha, eta")

In [8]: log_weibull_pdf = ((beta / (alpha * (1 - x - eta))) *
   ...:                    (Pow(log(1 - x - eta) / alpha, beta - 1)) *
   ...:                    (exp(-Pow(log(1 - x - eta) / alpha, beta))))

In [9]: log_weibull_pdf.subs({beta: _BETA,
   ...:                                           alpha: _ALPHA,
   ...:                                           eta: _ETA}
   ...:
   ...:
   ...:
   ...:
   ...:                                           )
Out[9]:
                                             10.56
                     -6.25821230086363e-6⋅log     (91 - x)    9.56
6.60867218971199e-5⋅ℯ                                     ⋅log    (91 - x)
──────────────────────────────────────────────────────────────────────────
                                  91 - x

In [10]: pdf = _

In [11]: X = ContinuousRV(x, pdf, set=Interval(-oo, -_ETA))

In [12]: X
Out[12]: x

In [14]: from sympy.stats import density

In [15]: density(X)(y)
Out[15]:
⎧                                             10.56

⎪                     -6.25821230086363e-6⋅log     (91 - y)    9.56

⎪6.60867218971199e-5⋅ℯ                                     ⋅log    (91 - y)

⎨──────────────────────────────────────────────────────────────────────────
 f
⎪                                  91 - y

⎪

⎩                                    0





or y ≥ -∞ ∧ y ≤ 90


    otherwise

Is the above what you were trying to do?

On Sun, Oct 11, 2020 at 8:55 PM [email protected] <[email protected]> wrote:

> Here is my attempt with ContinuousRV:
>
> from sympy.stats import ContinuousRV
> from sympy import Lambda, log, Pow, exp, symbols, Interval, oo
>
> # Parameters
> _BETA = 10.56
> _ETA = -90
> _ALPHA = 3.11
>
> x, beta, alpha, eta = symbols("x, beta, alpha, eta")
>
> log_weibull_pdf = ((beta / (alpha * (1 - x - eta))) *
>                    (Pow(log(1 - x - eta) / alpha, beta - 1)) *
>                    (exp(-Pow(log(1 - x - eta) / alpha, beta))))
> X = ContinuousRV(x, log_weibull_pdf.subs({beta: _BETA,
>                                           alpha: _ALPHA,
>                                           eta: _ETA}),
>                  set=Interval(-oo, -_ETA))
>
> which fails with:
>
> ValueError: x**w where w is irrational is not defined for negative x
>
> --
> Seb
>
>
> On Sunday, October 11, 2020 at 1:51:16 AM UTC-5 czgdp1807 wrote:
>
>> Hi,
>>
>> I think for creating RVs with custom distributions, one can use,
>> ContinuousRV, DiscreteRV Or FiniteRV depending on the type of
>> distribution. You can take a look at
>> https://docs.sympy.org/latest/modules/stats.html#examples
>> Note that the PDF/PMF should be a SymPy object.
>>
>> With Regards,
>> Gagandeep Singh
>> Github - https://github.com/czgdp1807
>> LinkedIn - https://www.linkedin.com/in/czgdp1807
>>
>> On Sun, 11 Oct, 2020, 3:45 AM [email protected], <[email protected]> wrote:
>>
>>> Hello,
>>>
>>> I'm trying to set up a custom distribution with the following function
>>> describing its PDF:
>>>
>>> def pdf(x, beta, alpha, eta):
>>>     t0 = beta / (alpha * (1 - x - eta))
>>>     t1 = pow(np.log(1 - x - eta) / alpha, beta - 1)
>>>     t2 = np.exp(-pow(np.log(1 - x - eta) / alpha, beta))
>>>     return t0 * t1 * t2
>>>
>>> It's a particular parameterization of the Log-Weibull distribution, with
>>> beta and alpha being the shape and scale parameters, respectively, and eta
>>> acts as a shift parameter representing the upper bound of the sample space,
>>> which is then defined as -inf < x < eta.  I'm interested in drawing random
>>> variates, computing the above PDF, and CDF.
>>>
>>> I have limited experience with sympy, and none with sympy.stats, but it
>>> seems as if what I need is sympy.stats.ContinuousDistributionHandmade.
>>> However, I'd appreciate any pointers.
>>>
>>> Thanks,
>>> --
>>> Seb
>>>
>>> --
>>> 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 [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/sympy/8f73147b-7032-464d-b95c-a1b68537c1a7n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/sympy/8f73147b-7032-464d-b95c-a1b68537c1a7n%40googlegroups.com?utm_medium=email&utm_source=footer>
>>> .
>>>
>> --
> 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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/sympy/16120812-5243-4f41-869e-7d03288dfb97n%40googlegroups.com
> <https://groups.google.com/d/msgid/sympy/16120812-5243-4f41-869e-7d03288dfb97n%40googlegroups.com?utm_medium=email&utm_source=footer>
> .
>


-- 
With regards,
Gagandeep Singh
Github - https://github.com/czgdp1807/
Linkedin - https://www.linkedin.com/in/czgdp1807/
<https://www.linkedin.com/in/gdp1/>

-- 
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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/sympy/CAAvS0gU73da00AwSCN00xM5u0nEn3UHwQEDjuXr-dyTcSUcQBA%40mail.gmail.com.

Reply via email to