1234567891011121314151617181920212223242526272829303132333435363738394041 |
- import numpy as np
- try:
- import mpmath
- except ImportError:
- pass
- def mpmath_wrightomega(x):
- return mpmath.lambertw(mpmath.exp(x), mpmath.mpf('-0.5'))
- def wrightomega_series_error(x):
- series = x
- desired = mpmath_wrightomega(x)
- return abs(series - desired) / desired
- def wrightomega_exp_error(x):
- exponential_approx = mpmath.exp(x)
- desired = mpmath_wrightomega(x)
- return abs(exponential_approx - desired) / desired
- def main():
- desired_error = 2 * np.finfo(float).eps
- print('Series Error')
- for x in [1e5, 1e10, 1e15, 1e20]:
- with mpmath.workdps(100):
- error = wrightomega_series_error(x)
- print(x, error, error < desired_error)
- print('Exp error')
- for x in [-10, -25, -50, -100, -200, -400, -700, -740]:
- with mpmath.workdps(100):
- error = wrightomega_exp_error(x)
- print(x, error, error < desired_error)
- if __name__ == '__main__':
- main()
|