jishnub
February 14, 2022, 5:53pm
1
Suppose I have the following operation
julia> @variables t x(t)
2-element Vector{Num}:
t
x(t)
julia> Dt = Differential(t)
(::Differential) (generic function with 2 methods)
julia> ex = expand_derivatives(Dt(t^2*x))
(t^2)*Differential(t)(x(t)) + 2t*x(t)
I would like to somehow extract the operator t^2*Dt + 2t
from ex
and represent this as a matrix (assuming that x(t)
is an arbitrary vector, and I have the matrices t
and Dt
). Is there a way to achieve this? Thanks in advance!
goerch
February 14, 2022, 7:11pm
2
The documented examples do not work for you?
I’m afraid not, and I’m not experienced enough with the ecosystem to get this to work by myself
goerch
April 7, 2022, 8:13am
4
OK, i tried starting with this
using Symbolics
@variables t x1(t) x2(t)
@show x = [x1 x2]
@show Dt = Differential(t)
@show ex = expand_derivatives(Dt(t^2*x))
and got
ERROR: Differentiation of expressions involving arrays and array variables is not yet supported.
So it seems we are out of luck here.
Thanks for your time! I’ll leave this open in case someone manages to find a solution
Did you mean:
julia> ex = expand_derivatives(Dt.(t^2 * x))
1×2 Matrix{Num}:
Differential(t)((t^2)*x1(t)) Differential(t)((t^2)*x2(t))
?
1 Like
goerch
April 7, 2022, 12:04pm
7
Thanks! Very nice, we get something like
using Symbolics
@variables t x1(t) x2(t)
@show Dt = Differential(t)
@show ex = expand_derivatives(Dt(t^2*sin(t)))
@show Dt = Differential(t)
@show ex = expand_derivatives(Dt(t^2*cos(t)))
@show x = [sin(t) cos(t)]
@show Dt = Differential(t)
@show ex = expand_derivatives.(Dt.(t^2*[sin(t) cos(t)]))
@show x = [x1 x2]
@show Dt = Differential(t)
@show ex = expand_derivatives.(Dt.(t^2*x))
yielding
Dt = Differential(t) = Differential(t)
ex = expand_derivatives(Dt(t ^ 2 * sin(t))) = (t^2)*cos(t) + 2t*sin(t)
Dt = Differential(t) = Differential(t)
ex = expand_derivatives(Dt(t ^ 2 * cos(t))) = 2t*cos(t) - (t^2)*sin(t)
x = [sin(t) cos(t)] = Num[sin(t) cos(t)]
Dt = Differential(t) = Differential(t)
ex = expand_derivatives.(Dt.(t ^ 2 * [sin(t) cos(t)])) = Num[(t^2)*cos(t) + 2t*sin(t) 2t*cos(t) - (t^2)*sin(t)]
x = [x1 x2] = Num[x1(t) x2(t)]
Dt = Differential(t) = Differential(t)
ex = expand_derivatives.(Dt.(t ^ 2 * x)) = Num[(t^2)*Differential(t)(x1(t)) + 2t*x1(t) (t^2)*Differential(t)(x2(t)) + 2t*x2(t)]
That should be pretty near to what OP wants…