Symbolic math- substitute a derivative function with subs()?

31 visualizzazioni (ultimi 30 giorni)
Hello everyone,
I've got a symbolic derivative :
syms J phi(t) Ja J0 x1 x2
J=J0-Ja*cos(2*phi);
dJ=diff(J)
This yields:
dJ(t)=2*Ja*D(phi)(t)*sin(2*phi(t))
Now, in this function I want to substitute phi(t) for x1 and D(phi)(t) for x2.
subs(dJ(t),phi,x1)
ans =
2*Ja*D(phi)(t)*sin(2*x1)
but this doesnt work for D(phi)(t)
>> subs(dJ(t),D(phi)(t),x2)
Error: ()-indexing must appear last in an index expression.
>> subs(dJ(t),D(phi),x2)
Undefined function 'D' for input arguments of type 'symfun'.
>> subs(dJ(t),D(phi(t)),x2)
Undefined function 'D' for input arguments of type 'sym'.
How could it be substituted by x2?

Risposte (3)

Andrew Horchler
Andrew Horchler il 18 Nov 2014
A late answer, but maybe this will help others. See my answer here on StackOverflow.com/Matlab. In this case you can substitute both variable at once via:
syms phi(t) Ja J0 x1 x2
J = J0-Ja*cos(2*phi);
dJ = diff(J,t)
dphi = diff(phi,t)
subs(dJ,{phi,dphi},{x1,x2})
You also don't need to define J as symbolic using syms since it gets allocated as such when you create the equation. I do usually like to make explicit the variable that I'm differentiating with respect to as well.

Kobi
Kobi il 13 Feb 2014
why don't you sub one char at a time?
  2 Commenti
Maria Perdomo
Maria Perdomo il 13 Feb 2014
Thats what I do, the problem is the syntaxis for
D(phi)(t)
that is a derivative function
Maria Perdomo
Maria Perdomo il 13 Feb 2014
I do one at a time, you see it works for phi(t):
dJ(t)=2*Ja*D(phi)(t)*sin(2*phi(t))
subs(dJ(t),phi,x1)
ans =
2*Ja*D(phi)(t)*sin(2*x1)

Accedi per commentare.


Walter Roberson
Walter Roberson il 13 Feb 2014
syms x3
subs( subs(dJ(t),D(phi),x3), x3(t), x2 )
  2 Commenti
Maria Perdomo
Maria Perdomo il 14 Feb 2014
syms J phi(t) Ja J0 x1 x2 x3
J=J0-Ja*cos(2*phi);
dJ=diff(J);
subs( subs(dJ(t),D(phi),x3), x3(t), x2 )
>>Undefined function 'D' for input arguments of type 'symfun'.
Walter Roberson
Walter Roberson il 14 Feb 2014
subs( subs(dJ(t),sym('D(phi)'),x3), x3(t), x2 )

Accedi per commentare.

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by