The issue here is that you want to make substitution not into f
but into each of its coefficients. Direct approach using .map_coefficients()
is given by @FrédéricC in the comments.
However, with the i
being the imaginary unit, there is no need to define it over RR
, since one can work in CC
where the imaginary unit is already defined as I
. So, you can go directly with
L.<a, b> = CC[]
f = a + I*b
f.map_coefficients(real)
Alternative general approach is to define all a
, b
, i
as polynomial variables and work in the quotient ring:
F.<I,A,B> = RR[]
K.<i,a,b> = F.quotient( [I^2 + 1] )
f = a + i*b
f.lift().subs({I:0})
Instead of f.lift().subs({I:0})
giving result in F
, you can use f.lift().specialization({I:0})
, which gives result in the polynomial ring of A
and B
only.
Does not make really sense, but
thanks a lot!