How to dynamically substitute a variable in a callable function?
Hi guys, this is a little problem I came across a week ago.
I'm trying to define a python function that accepts:
1. a callable sage function (of potentially more than one variable) as the first argument (henceforth called func), and
2. a symbolic variable as the second argument (henceforth called xsub)
My function then needs to define a dummy symbolic variable (t), and substitute xsub with t in func.
I can do this for one variable equations in current 4.8 sagemath, by ignoring the new substitution syntax, but it throws up a depreciation warning (Which I'm assuming will become an error in 5.0).
Here's what my code looks like:
def fracintegral(func,xsub,n,a=0): var('t') assume(x>a) assume(t>a) return integrate((x-t)^(n-1)*func(t),t,a,x)
The last line should look something like:
return integrate((x-t)^(n-1)*func(x=t),t,a,x)in order to avoid Depreciation Warnings, but this hardcodes x as the variable to be substituted. (Useless if my func is a y function.)
If I try:
return integrate((x-t)^(n-1)*func(xsub=t),t,a,x)
then substitution of func(x=t) doesn't occur (and the integrate function effectively treats func as a constant with respect to dt).
Trying:
return integrate((x-t)^(n-1)*func.subs(xsub==t),t,a,x)doesn't work either, same result as func(xsub=t).
So, any idea how a function can accept a symbolic variable, and dynamically substitute out that variable in a callable function?
On an unrelated note, you may want to see if there is a way to do this without redeclaring `t` each time. Does that remove the assumptions on `t`? You can debug this with `assumptions()`. My first guess would be that it doesn't... but I could be wrong. Even after having spent a lot of time with our assumptions code, I still don't fully understand how it interacts with Maxima.