Help with subs
This minimal non-working example returns an output of 'z'. I want 'z^3'! Any help?
B = FunctionField(QQ,'z')
B.inject_variables()
g = z
g.subs(z=z^3)
Edit: this is not an answer to the question, but together with the comments below, it may be useful, so I will leave it here.
sage: B = FunctionField(QQ,'z')
sage: B.inject_variables()
Defining z
sage: g = z
sage: g.subs(z=z^3)
z
sage: g(z) = z
sage: g.subs(z=z^3)
z |--> z^3
sage: g = z
sage: g.subs(z=z^3)
z^3
This also "works":
sage: B = FunctionField(QQ,'z')
sage: B.inject_variables()
Defining z
sage: h(z) = z
sage: g = z
sage: g.subs(z=z^3)
z^3
It's because g(z) = z
redefines z
as a symbolic expression and g
as a callable symbolic expression:
sage: preparse('g(z) = z')
'__tmp__=var("z"); g = symbolic_expression(z).function(z)'
@eric_g: you're right, h(z) = z
completely destroys the old meaning of z
. I think I might prefer g(z) = ...
to raise an error unless I explicitly do var('z')
first, but that's not the default behavior.
The problem is similar to the one in this question, and amenable to similar answers.
@john-palmieri: I agree, having h(z) = z
silently injecting z
in the global namespace is not desirable; I guess that this is a kind of convenience feature that was introduced at the beginning of Sage, but the side effects are too severe IMHO.
@emmanuel-charpentier: it's too bad that subs
works with generators of a polynomial ring but not apparently with the named generator of a function field.
Please start posting anonymously - your entry will be published after you log in or create a new account.
Asked: 2 years ago
Seen: 190 times
Last updated: Mar 04 '23
Substitution using Dictionary with Matrix as Value
Evaluating a symbolic expression for a Graph
subs() function gives KeyError when keyword is a list member
How can I get back an expression for free variables in solve function.
Sage subs() function include product condition
Direct substitution vs "subs" method
subs: why it accepts one form but not the other?
The minimal non-working example would probably skip the line defining
g
and just doz.subs(z=z^3)
.