| 1 | initial version |
In the given case, working over the rationals already work:
sage: var('s');
sage: L = 2*(s + 3)/(3*s^2 + 13*s + 10)
sage: L.partial_fraction()
2/7/(3*s + 10) + 4/7/(s + 1)
sage: version()
'SageMath version 7.5.1, Release Date: 2017-01-15'
There is no need to pass to more complicated rings.
Note that above L in an instance for the class
sage: L.__class__
<type 'sage.symbolic.expression.Expression'>
sage: L.parent()
Symbolic Ring
and generally, if a class provides a method with the "right name", than it also does the "right job". A similar method name, but for an other class is also working:
sage: R.<s> = PolynomialRing(QQ)
sage: L = 2*(s + 3)/(3*s^2 + 13*s + 10)
sage: L.parent()
Fraction Field of Univariate Polynomial Ring in s over Rational Field
sage: L.partial_fraction_decomposition()
(0, [4/7/(s + 1), 2/21/(s + 10/3)])
(After L was defined, i typed in the sage interpreter only L.part followed by [TABULATOR]. The method came automatically.)
To see where the explicit declaration of the coefficients fiels is / may be important, i will use an other examle: \begin{align} F &= \frac 1{x^4+4}\\ G &= \frac 1{x^4+1} . \end{align} In this case we try first symbolically...
sage: var( 'x' );
sage: F = 1/(x^4 + 4)
sage: G = 1/(x^4 + 1)
sage: F.partial_fraction()
1/8*(x + 2)/(x^2 + 2*x + 2) - 1/8*(x - 2)/(x^2 - 2*x + 2)
sage: G.partial_fraction()
1/(x^4 + 1)
We have to tell sage somehow something about the field to work in. We consider only G.
The possibilities are:
CC.and the sample code is:
sage: K1.<a> = QuadraticField(2)
sage: K2.<b> = QuadraticField(-1)
sage: K3.<c> = CyclotomicField(8)
sage: for K in (K1, K2, K3, CC):
....: print "Field", K
....: Kx = FractionField( PolynomialRing(K, names='x') )
....: pprint.pprint( Kx(G).partial_fraction_decomposition() )
....: print
....:
Field Number Field in a with defining polynomial x^2 - 2
(0, [(-1/4*a*x + 1/2)/(x^2 - a*x + 1), (1/4*a*x + 1/2)/(x^2 + a*x + 1)])
Field Number Field in b with defining polynomial x^2 + 1
(0, [(-1/2*b)/(x^2 - b), 1/2*b/(x^2 + b)])
Field Cyclotomic Field of order 8 and degree 4
(0, [(-1/4*c)/(x - c), 1/4*c/(x + c), (-1/4*c^3)/(x - c^3), 1/4*c^3/(x + c^3)])
Field Complex Field with 53 bits of precision
(0,
[(-0.176776695296637 - 0.176776695296637*I)/(x - 0.707106781186548 - 0.707106781186548*I),
(-0.176776695296637 + 0.176776695296637*I)/(x - 0.707106781186548 + 0.707106781186548*I),
(0.176776695296637 - 0.176776695296637*I)/(x + 0.707106781186548 - 0.707106781186548*I),
(0.176776695296637 + 0.176776695296637*I)/(x + 0.707106781186548 + 0.707106781186548*I)])
I hope the idea is clear.
| 2 | No.2 Revision |
In the given case, working over the rationals already work:works:
sage: var('s');
sage: L = 2*(s + 3)/(3*s^2 + 13*s + 10)
sage: L.partial_fraction()
2/7/(3*s + 10) + 4/7/(s + 1)
sage: version()
'SageMath version 7.5.1, Release Date: 2017-01-15'
There is no need to pass to more complicated rings.
Note that above L in an instance for the class
sage: L.__class__
<type 'sage.symbolic.expression.Expression'>
sage: L.parent()
Symbolic Ring
and generally, if a class provides a method with the "right name", than it also does the "right job". A similar method name, but for an other class is also working:
sage: R.<s> = PolynomialRing(QQ)
sage: L = 2*(s + 3)/(3*s^2 + 13*s + 10)
sage: L.parent()
Fraction Field of Univariate Polynomial Ring in s over Rational Field
sage: L.partial_fraction_decomposition()
(0, [4/7/(s + 1), 2/21/(s + 10/3)])
(After L was defined, i typed in the sage interpreter only L.part followed by [TABULATOR]. The method came automatically.)
To see where the explicit declaration of the coefficients fiels is / may be important, i will use an other examle: \begin{align} F &= \frac 1{x^4+4}\\ G &= \frac 1{x^4+1} . \end{align} In this case we try first symbolically...
sage: var( 'x' );
sage: F = 1/(x^4 + 4)
sage: G = 1/(x^4 + 1)
sage: F.partial_fraction()
1/8*(x + 2)/(x^2 + 2*x + 2) - 1/8*(x - 2)/(x^2 - 2*x + 2)
sage: G.partial_fraction()
1/(x^4 + 1)
We have to tell sage somehow something about the field to work in. We consider only G.
The possibilities are:
CC.and etc.
And the sample code is:
sage: K1.<a> = QuadraticField(2)
sage: K2.<b> = QuadraticField(-1)
sage: K3.<c> = CyclotomicField(8)
sage: for K in (K1, K2, K3, CC):
CC, QQbar, AA):
....: print "Field", K
....: Kx = FractionField( PolynomialRing(K, names='x') )
....: pprint.pprint( Kx(G).partial_fraction_decomposition() )
....: print
....:
Field ....:
Number Field in a with defining polynomial x^2 - 2
(0, [(-1/4*a*x + 1/2)/(x^2 - a*x + 1), (1/4*a*x + 1/2)/(x^2 + a*x + 1)])
Field Number Field in b with defining polynomial x^2 + 1
(0, [(-1/2*b)/(x^2 - b), 1/2*b/(x^2 + b)])
Field Cyclotomic Field of order 8 and degree 4
(0, [(-1/4*c)/(x - c), 1/4*c/(x + c), (-1/4*c^3)/(x - c^3), 1/4*c^3/(x + c^3)])
Field Complex Field with 53 bits of precision
(0,
[(-0.176776695296637 - 0.176776695296637*I)/(x - 0.707106781186548 - 0.707106781186548*I),
(-0.176776695296637 + 0.176776695296637*I)/(x - 0.707106781186548 + 0.707106781186548*I),
(0.176776695296637 - 0.176776695296637*I)/(x + 0.707106781186548 - 0.707106781186548*I),
(0.176776695296637 + 0.176776695296637*I)/(x + 0.707106781186548 + 0.707106781186548*I)])
Algebraic Field
(0,
[(-0.1767766952966369? - 0.1767766952966369?*I)/(x - 0.7071067811865475? - 0.7071067811865475?*I),
(-0.1767766952966369? + 0.1767766952966369?*I)/(x - 0.7071067811865475? + 0.7071067811865475?*I),
(0.1767766952966369? - 0.1767766952966369?*I)/(x + 0.7071067811865475? - 0.7071067811865475?*I),
(0.1767766952966369? + 0.1767766952966369?*I)/(x + 0.7071067811865475? + 0.7071067811865475?*I)])
Algebraic Real Field
(0,
[(-0.3535533905932738?*x + 1/2)/(x^2 - 1.414213562373095?*x + 1),
(0.3535533905932738?*x + 1/2)/(x^2 + 1.414213562373095?*x + 1)])
sage:
I hope the idea is clear.
(My preference is always to work over exact fields, if possible.)
| 3 | No.3 Revision |
In the given case, working over the rationals already works:
sage: var('s');
sage: L = 2*(s + 3)/(3*s^2 + 13*s + 10)
sage: L.partial_fraction()
2/7/(3*s + 10) + 4/7/(s + 1)
sage: version()
'SageMath version 7.5.1, Release Date: 2017-01-15'
There is no need to pass to more complicated rings.
Note that above L in an instance for the class
sage: L.__class__
<type 'sage.symbolic.expression.Expression'>
sage: L.parent()
Symbolic Ring
and generally, if a class provides a method with the "right name", than it also does the "right job". A similar method name, but for an other class is also working:
sage: R.<s> = PolynomialRing(QQ)
sage: L = 2*(s + 3)/(3*s^2 + 13*s + 10)
sage: L.parent()
Fraction Field of Univariate Polynomial Ring in s over Rational Field
sage: L.partial_fraction_decomposition()
(0, [4/7/(s + 1), 2/21/(s + 10/3)])
(After L was defined, i typed in the sage interpreter only L.part followed by [TABULATOR]. The method came automatically.)
To see where the explicit declaration of the coefficients fiels is / may be important, i will use an other examle: \begin{align} F &= \frac 1{x^4+4}\\ G &= \frac 1{x^4+1} . \end{align} In this case we try first symbolically...
sage: var( 'x' );
sage: F = 1/(x^4 + 4)
sage: G = 1/(x^4 + 1)
sage: F.partial_fraction()
1/8*(x + 2)/(x^2 + 2*x + 2) - 1/8*(x - 2)/(x^2 - 2*x + 2)
sage: G.partial_fraction()
1/(x^4 + 1)
We have to tell sage somehow something about the field to work in. We consider only G.
The possibilities are:
CC.etc.
And the sample code is:
sage: K1.<a> = QuadraticField(2)
sage: K2.<b> = QuadraticField(-1)
sage: K3.<c> = CyclotomicField(8)
sage: for K in (K1, K2, K3, CC, QQbar, AA):
....: print K
....: Kx = FractionField( PolynomialRing(K, names='x') )
....: pprint.pprint( Kx(G).partial_fraction_decomposition() )
....: print
....:
....:
Number Field in a with defining polynomial x^2 - 2
(0, [(-1/4*a*x + 1/2)/(x^2 - a*x + 1), (1/4*a*x + 1/2)/(x^2 + a*x + 1)])
Number Field in b with defining polynomial x^2 + 1
(0, [(-1/2*b)/(x^2 - b), 1/2*b/(x^2 + b)])
Cyclotomic Field of order 8 and degree 4
(0, [(-1/4*c)/(x - c), 1/4*c/(x + c), (-1/4*c^3)/(x - c^3), 1/4*c^3/(x + c^3)])
Complex Field with 53 bits of precision
(0,
[(-0.176776695296637 - 0.176776695296637*I)/(x - 0.707106781186548 - 0.707106781186548*I),
(-0.176776695296637 + 0.176776695296637*I)/(x - 0.707106781186548 + 0.707106781186548*I),
(0.176776695296637 - 0.176776695296637*I)/(x + 0.707106781186548 - 0.707106781186548*I),
(0.176776695296637 + 0.176776695296637*I)/(x + 0.707106781186548 + 0.707106781186548*I)])
Algebraic Field
(0,
[(-0.1767766952966369? - 0.1767766952966369?*I)/(x - 0.7071067811865475? - 0.7071067811865475?*I),
(-0.1767766952966369? + 0.1767766952966369?*I)/(x - 0.7071067811865475? + 0.7071067811865475?*I),
(0.1767766952966369? - 0.1767766952966369?*I)/(x + 0.7071067811865475? - 0.7071067811865475?*I),
(0.1767766952966369? + 0.1767766952966369?*I)/(x + 0.7071067811865475? + 0.7071067811865475?*I)])
Algebraic Real Field
(0,
[(-0.3535533905932738?*x + 1/2)/(x^2 - 1.414213562373095?*x + 1),
(0.3535533905932738?*x + 1/2)/(x^2 + 1.414213562373095?*x + 1)])
sage:
I hope the idea is clear.
(My preference is always to work over exact fields, if possible.)
Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.