Is there any way to define an as-yet-unknown function?

I'd like to know if there's a way of declaring functions in sage that are as-yet unknown. For example, let's say I have a function

p = R*T/v - a(T)/v/(v+b)


And I would like to be able to take a derivative like this

deriv(p,T)


and be given something back a partial derivative something like

R/v - diff(a(T),T)/v/(v+b)


However at present I can't seem to put an abstract function a(T) into my expression or find anything in the documentation that says how this is done.

As I recall there was a way to do this with wxMaxima, so maybe I just haven't found the trick in Sage yet.

edit retag close merge delete

Sort by ยป oldest newest most voted

Answer from 2012. See further down for 2020 update.

You can define a function using the keyword function. The script below gives the answer you expect.

T = var('T')
a = function('a', T)
R = var('R')
v = var('v')
b = var('b')
p = R*T/v - a(T)/v/(v+b)
diff(p, T)


[2020 update] Nowadays, function no longer takes the variable as an argument.

Use a = function('a') instead of a = function('a', T).

Example:

sage: version()
'SageMath version 9.0, Release Date: 2020-01-01'
sage: b, v, R, T = SR.var('b v R T')
sage: a = function('a')
sage: p = R*T/v - a(T)/v/(v+b)
sage: diff(p, T)
R/v - diff(a(T), T)/((b + v)*v)

more

Great. seems to work fine. The output is a bit weird though, in typeset sage, the diff(a(T),T) is written as D [ 0 ] ( a ) ( T ), not particular intuitive. But it works! Thank you.

( 2012-03-23 12:53:03 -0600 )edit