Change of variable in an integration
How to indicate a change of variable to Sage in an integration when Sage seems clueless?
How to indicate a change of variable to Sage in an integration when Sage seems clueless?
Here is an example you can look at.
http://www.sagenb.org/home/pub/1927/
Edit: If you need to preload the function use the following link
http://ask.sagemath.org/question/1072...
Edit2:
Sorry for the delay. Here is the full solution to your question
def changevar(f, eqn, newvar):
dx = diff(eqn.rhs(),newvar)
return f.substitute(eqn)*dx
var('u')
assume(x>0)
xmin=0
xmax=2
eqn=sqrt(u-1)
limits(x)=solve(eqn==x,u)[0].rhs()
limits(2)
ans=changevar(x*cos(x^2+1), x==eqn, u)
integrate(ans,(u,limits(xmin),limits(xmax))).n()
That's nice, thanks. But two more questions about that: 1. How to store and load such python functions for further use in other sessions? 2. If we compute a definite integral, how to add the bounds ?
Based on Shashank comment, but see extra questions below:
def changevar_definite(f, eqn, newvar, oldvar, a, b):
old_assumptions= assumptions() # Keep current assumptions for later restore
assume(oldvar > a, oldvar < b) # This is bad (Maxima pb), see below
h(oldvar)= solve(eqn, newvar)[0].rhs()
g(newvar)= solve(eqn, oldvar)[0].rhs()
dx = diff(g, newvar)
forget()
assume(old_assumptions) # Unfortunately, extra assumptions don't stay local
return f.substitute(oldvar==g(newvar))*dx, h(a), h(b)
Okay, let's try it
integrand=changevar_definite(x*cos(x^2+1), u==x^2+1, u, x, 0, 2)
integrand # Output: (u |--> 1/2*cos(u), 1, 5)
Eventually
integral(integrand[0](u), u, integrand[1], integrand[2])# -1/2*sin(1) + 1/2*sin(5)
But the following also works:
changevar_definite(x*cos(x^2+1), x==sqrt(u-1), u, x, 0, 2)
Now, the latter call breaks if I have assume(oldvar >= a, oldvar <= b)
instead as I had earlier, because Maxima asks about x being positive or zero. In fact, the assumptions mechanism is too sticky, what I change locally has global side effect. A worse problem is I can't force a more stringent assumption locally (say going from x >= 0 to x > 0).
1- How to efficiently handle those assumptions?
2- How to pass extra-assumptions as arguments to my changevar_definite
function?
Please start posting anonymously - your entry will be published after you log in or create a new account.
Asked: 2012-01-28 18:59:27 +0100
Seen: 1,685 times
Last updated: Feb 13 '12
Substitution of a list of variables
Substitute variable in expression
automatic substitution within functions?
Is there any way I can substitute a combination of variables.
Is applying a ring homomorphism faster than symbolic substitution?
substituting expressions for numbers
substitute expression instead of formal function symbol
How to magically define variables and use functional notation instead of methods