Skip to content

Commit ce6176f

Browse files
authored
Merge pull request sympy#16534 from cbm755/octave_gammainc
octave codegen: they have regularized incomplete gamma fcn
2 parents 3f578bb + 9123601 commit ce6176f

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

sympy/printing/octave.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -401,14 +401,15 @@ def _print_Identity(self, expr):
401401
return "eye(" + s + ")"
402402

403403

404-
def _print_uppergamma(self, expr):
405-
return "gammainc(%s, %s, 'upper')" % (self._print(expr.args[1]),
406-
self._print(expr.args[0]))
404+
def _print_lowergamma(self, expr):
405+
# Octave implements regularized incomplete gamma function
406+
return "(gammainc({1}, {0}).*gamma({0}))".format(
407+
self._print(expr.args[0]), self._print(expr.args[1]))
407408

408409

409-
def _print_lowergamma(self, expr):
410-
return "gammainc(%s, %s, 'lower')" % (self._print(expr.args[1]),
411-
self._print(expr.args[0]))
410+
def _print_uppergamma(self, expr):
411+
return "(gammainc({1}, {0}, 'upper').*gamma({0}))".format(
412+
self._print(expr.args[0]), self._print(expr.args[1]))
412413

413414

414415
def _print_sinc(self, expr):

sympy/printing/tests/test_octave.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -463,8 +463,9 @@ def test_specfun():
463463
assert octave_code(airyaiprime(x)) == 'airy(1, x)'
464464
assert octave_code(airybi(x)) == 'airy(2, x)'
465465
assert octave_code(airybiprime(x)) == 'airy(3, x)'
466-
assert octave_code(uppergamma(n, x)) == 'gammainc(x, n, \'upper\')'
467-
assert octave_code(lowergamma(n, x)) == 'gammainc(x, n, \'lower\')'
466+
assert octave_code(uppergamma(n, x)) == '(gammainc(x, n, \'upper\').*gamma(n))'
467+
assert octave_code(lowergamma(n, x)) == '(gammainc(x, n).*gamma(n))'
468+
assert octave_code(z**lowergamma(n, x)) == 'z.^(gammainc(x, n).*gamma(n))'
468469
assert octave_code(jn(n, x)) == 'sqrt(2)*sqrt(pi)*sqrt(1./x).*besselj(n + 1/2, x)/2'
469470
assert octave_code(yn(n, x)) == 'sqrt(2)*sqrt(pi)*sqrt(1./x).*bessely(n + 1/2, x)/2'
470471
assert octave_code(LambertW(x)) == 'lambertw(x)'

0 commit comments

Comments
 (0)
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy