Loading [MathJax]/jax/output/HTML-CSS/jax.js
Ask Your Question
0

How to define more complicated differential expressions in Sage?

asked 10 years ago

schneider chen gravatar image

updated 10 years ago

Dear Community,

i have a very hard time doing something pretty straight foreward in Sage. In mechanics, there is a Lagrange-formalism that yields the equation of motion of a system of n degrees of freedom in the following way:

0=ddt(Lxi(t))Lxi(t)

where L is the Lagrange function

L=EKin(x1(t),x2(t)...xn(t);x1(t),x2(t)...xn(t))EPot(x1(t),x2(t),...,xn(t))

is the kinetic energy minus the potential energy. The kinetic energy depends on the speeds of the coordinates xi(t), while the potential energy depends on the coordinates xi(t).

In Mathematica, the hack is

L = Ekin[x'[t]] - Epot[x[t]];
eq = 0 == D[D[L, x'[t]], t] - D[L, x[t]];

which gives

0 == Epot'[x[t]] + Ekin''[x'[t]] x''[t]

I can easily specify something for EKin and EPot, solve the latter equation for x, and give it as a right handside to some time integration scheme.

How can this be done in Sage? Assume you have complicated expressions for EPot and EKin which you do not want to differentiate by hand.

var('L,x,t')

x = function('x',t)

L = function('L',x,t)

allows for

diff(L,t)

but not

diff(L,x)

Thanks already!

Preview: (hide)

1 Answer

Sort by » oldest newest most voted
0

answered 10 years ago

bekalph gravatar image

Perhaps the answer I have given for the question "latex typesetting for derivatives" at 31.Oct. can help you. One can utilize the option "derivative_func" of Function to let perform a list containing the requested results of the partial differentiations during processing a product rule or a chain of differentiations.

Preview: (hide)
link

Comments

Thanks for your efforts. I took this as an inspiration to convert expressions using strings and subs(), but it is quite cumbersome. The real problem is that SAGE gives D0(y) as output, but does not accept it as input! Less an expression which can be solved or derived for. The problem that I asked a solution for can be solved in Sage, by constantly replacing functions by variables back and forth, depending on whether one wants either to solve/derive for or SAGE to apply rules of differentiation correctly.

schneider chen gravatar imageschneider chen ( 10 years ago )

I want to add a remark concerning the real problem with D0(y).

You can substitute the default output of an derivative-operation, e.g. D[0] (fxx)(z)

by any symbolic function you want by using the 'derivative_func'- option of 'function'.

Following Example using symbolic function definition

  • fx with this option,

  • fxx without this option.:

var('z')

dfxdz=function('dfxdz',latex_name='\frac{\operatorname{d}{x}}{\operatorname{d}{z}}')

def dfx(self,args,*kwds):return dfxdz(z)

fxx=function('fxx',latex_name='x')

fx=function('fx',derivative_func=dfx,latex_name='x')

For the input

fx(z).derivative(z) #with derivative_func

you get the output :

dfxdz(z)

For the input

fxx(z).derivative(z) #without derivative_func

you get the output: D[0] (fxx)(z)

bekalph gravatar imagebekalph ( 10 years ago )

Your Answer

Please start posting anonymously - your entry will be published after you log in or create a new account.

Add Answer

Question Tools

1 follower

Stats

Asked: 10 years ago

Seen: 567 times

Last updated: Nov 25 '14