Processing math: 100%
Welcome to Cadabra Q&A, where you can ask questions and receive answers from other members of the community.
+1 vote

I want to substitute an object A which goes to A+δA where δA is a differential or derivative object.

For example when plugging AB and substitute the abvoe rule I want AA+δA,BB+δB so my ABAB+δAB and my BABA+δBA.

My first trial is using DifferentialFrorm and ExteriorDerivaitves,

A::DifferentialForm(degree=0);
B::DifferentialForm(degree=0);
C::DifferentialForm(degree=0); 
D::DifferentialForm(degree=0);

da{#}::ExteriorDerivative;
db{#}::ExteriorDerivative;

Rules:={A -> A + da(#) };

ex:= A B C D;
substitute(_, Rules);
product_rule(_);
distribute(_);

But it only produces ABCD + da# BCD, which does not distribute differentiation properly.

I want to know there are some clever way to implement this idea into ABCD with corresponding rules for A,B,C,D. And want to distinguish δAδBCδBδAC.

in General questions by (160 points)

1 Answer

0 votes

Hi novice0516.

I'm not sure what is your aim with your notebook, but I know that the capabilities of cadabra2 with differential forms is far from optimal... you might note that not even all the properties and algorithms are documented! (btw, it would be great to help developing those missing capabilities).

From my ignorance, I'd suggest to follow a different approach.

Some critics to your workflow:

  • Your are defining differential forms but you are not using the wedge product.
  • If you substitute an object with a derivative, What is the scope of the derivative?
  • I would argue that your substitution is changing the degree of the expression.

Suggestions

Please take into account that my suggestions come from the ignorance of your purpose.

  • I'd define my objects as non-commutative (if necessary). Your operetors A, B, C and D should commute but in the example below I defined as non-commuting just for fun!
  • If you define the variations as derivative, general derivatives do not commute! (I've included a commented line with the explicit declaration anyway).
  • Define the scope of the derivative operators

Code

{A,B,C,D}::NonCommuting;
{da{#},db{#}}::Derivative;
# {da{#},db{#}}::NonCommuting;

ex:= da{ B C D};
converge(ex):
    distribute(_)
    product_rule(_)
;

I tried the second derivative

ex:= db{da{ B C D }};
converge(ex):
    distribute(_)
    product_rule(_)
;

And the commutator of derivatives

ex:= db{da{ B C D }} - da{db{ B C D }};
converge(ex):
    distribute(_)
    product_rule(_)
;

Let me know if my suggestions were useful, but remember that my intention is to give you a different way to try your programme.

Cheers.

by (15.3k points)
...