フィルターのクリア

Matrix differentiation

91 ビュー (過去 30 日間)
rami
rami 2012 年 6 月 6 日
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

採用された回答

Andrei Bobrov
Andrei Bobrov 2012 年 6 月 6 日
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 件のコメント
rami
rami 2012 年 6 月 6 日
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),...

サインインしてコメントする。

その他の回答 (1 件)

Walter Roberson
Walter Roberson 2012 年 6 月 6 日
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 件のコメント
rami
rami 2012 年 6 月 6 日
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 2012 年 6 月 6 日
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

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeConversion Between Symbolic and Numeric についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by