Matrix differentiation

63 views (last 30 days)
rami
rami on 6 Jun 2012
Hi
I have matrix (3,3)in the form
M=[cos(a)*sin(b)*cos(c) sin(a)*sin(b)*sin(c) cos(a)^2*sin(b)^2*cos(c);.............;.......]
where a , b , c angls changing with the time
How i can differentiation the M according to time Mdott
Thx

Accepted Answer

Andrei Bobrov
Andrei Bobrov on 6 Jun 2012
syms a b c t
M=[cos(a)*sin(b)*cos(c) sin(a)*sin(b)*sin(c) cos(a)^2*sin(b)^2*cos(c)];
k = regexprep(char(M),{'\(a\)','\(b\)','\(c\)'},{'\(a\(t\)\)', '\(b\(t\)\)', '\(c\(t\)\)'});
out = feval(symengine,'diff', k, t)
ADD after rami's comment
z = feval(symengine,'diff', k, t);
out = sym(regexprep(char(z),'(\(t\))|(\*diff\([abc]\(t\), t\))',''))
  1 Comment
rami
rami on 6 Jun 2012
Ok
As example
M=[cos(a)*sin(b)*cos(c) sin(a)*sin(b)*sin(c) cos(a)^2*sin(b)^2*cos(c);1 1 1;1 1 1];
k = regexprep(char(M),{'\(a\)','\(b\)','\(c\)'},{'\(a\(t\)\)', '\(b\(t\)\)', '\(c\(t\)\)'});
out = feval(symengine,'diff', k, t)
I have the result:
out =
[ cos(a(t))*cos(b(t))*cos(c(t))*diff(b(t), t) - cos(c(t))*sin(a(t))*sin(b(t))*diff(a(t), t) - cos(a(t))*sin(b(t))*sin(c(t))*diff(c(t), t), cos(a(t))*sin(b(t))*sin(c(t))*diff(a(t), t) + cos(b(t))*sin(a(t))*sin(c(t))*diff(b(t), t) + cos(c(t))*sin(a(t))*sin(b(t))*diff(c(t), t), 2*cos(b(t))*cos(c(t))*diff(b(t), t)*cos(a(t))^2*sin(b(t)) - sin(c(t))*diff(c(t), t)*cos(a(t))^2*sin(b(t))^2 - 2*cos(c(t))*sin(a(t))*diff(a(t), t)*cos(a(t))*sin(b(t))^2]
[ 0, 0, 0]
[ 0, 0, 0]
Is there any way to disappear the term diff(b(t), t),...

Sign in to comment.

More Answers (1)

Walter Roberson
Walter Roberson on 6 Jun 2012
I am relatively sure the below should work:
syms a b c t
M=[cos(a(t))*sin(b(t))*cos(c(t)) sin(a(t))*sin(b(t))*sin(c(t)) cos(a(t))^2*sin(b(t))^2*cos(c(t));.............;.......]
diff(M, t)
What might also work, at least with sufficiently new Symbolic Toolbox, is
syms a(t) b(t) c(t) t
M=[cos(a)*sin(b)*cos(c) sin(a)*sin(b)*sin(c) cos(a)^2*sin(b)^2*cos(c);.............;.......]
diff(M,t)
  2 Comments
rami
rami on 6 Jun 2012
syms a b c t
A=[cos(a(t))*sin(b(t))*sin(c(t)) sin(a(t))*cos(c(t)) 1;0 0 0;1 1 1]
diff(A, t)
Error in ==> POLEPLACEMENT at 9
A=[cos(a(t))*sin(b(t))*sin(c(t)) sin(a(t))*cos(c(t)) 1;0 0 0;1 1 1]
OR
syms a(t) b(t) c(t) t
M=[cos(a)*sin(b(t))*cos(c) sin(a(t))*sin(b(t))*sin(c(t)) cos(a(t))^2*sin(b(t))^2*cos(c(t));1 1 1;1 1 1];
diff(M, t)
Error in ==> POLEPLACEMENT at 12
syms a(t) b(t) c(t) t
rami
rami on 6 Jun 2012
syms a(t) b(t) c(t) t
M=[cos(a)*sin(b)*cos(c) sin(a)*sin(b)*sin(c) cos(a)^2*sin(b)^2*cos(c);1 1 1;1 1 1];
diff(M, t)
??? Error using ==> syms at 61
Not a valid variable name.
Error in ==> POLEPLACEMENT at 12
syms a(t) b(t) c(t) t

Sign in to comment.

Categories

Find more on Symbolic Math Toolbox in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!