符号运算

①首先定义符号变量(中间用“空格号”隔开)

syms  x y z;

②此时不用对变量赋值,可以进行正常代数运算。

如:z=x+y,diff(z)

③最后对变量赋值时,采用subs()函数

subs()函数:    

R = subs(S, new) 利用new的值代替符号表达式S中的默认符号。
R = subs(S) 用由调用函数或Matlab工作空间中获取的值替代了在符号表达式S中的所有当前的变量。
R = subs(S, old, new) 利用new的值代替符号表达式中old的值。old为符号变量或是字符串变量名。
             new是一个符号货数值变量或表达式。
             也就是说R = subs(S,old,new)在old=new的条件下重新计算了表达式S。
             这种替换第一次作为Matlab表达式被尝试,如果所有在new中的数值是双精度的,
             计算是以双精度算术运算进行的。讲new值转化为符号可以验证符号货变量的运算精度
subs(S,{x,y},{1,z})  将变量x和y分别替换为1和z:

但注意,即使用常量替代符号变量,subs()函数的结果仍是字符变量,可用eval()函数对结果进行处理。

eval()函数:

  用于将括号内的字符串视为语句并运行。

eval('y1=sin(2)')  等价于:y1=sin(2)
for x=1:5
    eval(['y',num2str(x),'=',num2str(x^2),';'])
end
等价于:yx=x^2 即
  y1=1^2
  y2=2^2
  y3=3^2
  y4=4^2
  y5=5^2

④调用包含符号运算的函数,并导入数值参数。

JF=eval(subs(F,{'theta1','theta2','theta7'},{X1,X2,X3}));
  将X1,X2,X3替换F函数中的'theta1','theta2','theta7'符号变量,并输出解的值

 

simplify函数
  用于化简表达式,可以化简如三角函数的表达式。如

T_foot =
 
[                         cos(theta2)*sin(theta3) + cos(theta3)*sin(theta2),                           cos(theta2)*cos(theta3) - sin(theta2)*sin(theta3),            0,                                                      l3*(cos(theta2)*sin(theta3) + cos(theta3)*sin(theta2)) + l2*sin(theta2)]
[ cos(theta2)*cos(theta3)*sin(theta1) - sin(theta1)*sin(theta2)*sin(theta3), - cos(theta2)*sin(theta1)*sin(theta3) - cos(theta3)*sin(theta1)*sin(theta2), -cos(theta1), l2*cos(theta2)*sin(theta1) - l1*cos(theta1) - l3*(sin(theta1)*sin(theta2)*sin(theta3) - cos(theta2)*cos(theta3)*sin(theta1))]
[ cos(theta1)*sin(theta2)*sin(theta3) - cos(theta1)*cos(theta2)*cos(theta3),   cos(theta1)*cos(theta2)*sin(theta3) + cos(theta1)*cos(theta3)*sin(theta2), -sin(theta1), l3*(cos(theta1)*sin(theta2)*sin(theta3) - cos(theta1)*cos(theta2)*cos(theta3)) - l1*sin(theta1) - l2*cos(theta1)*cos(theta2)]
[                                                                         0,                                                                           0,            0,                                                                                                                            1]
 

使用 simplify(T_foot)后的表达式

T_foot =
 
[              sin(theta2 + theta3),              cos(theta2 + theta3),            0,                                                                                     l3*sin(theta2 + theta3) + l2*sin(theta2)]
[  cos(theta2 + theta3)*sin(theta1), -sin(theta2 + theta3)*sin(theta1), -cos(theta1), l2*cos(theta2)*sin(theta1) - l1*cos(theta1) - l3*(sin(theta1)*sin(theta2)*sin(theta3) - cos(theta2)*cos(theta3)*sin(theta1))]
[ -cos(theta2 + theta3)*cos(theta1),  sin(theta2 + theta3)*cos(theta1), -sin(theta1), l3*(cos(theta1)*sin(theta2)*sin(theta3) - cos(theta1)*cos(theta2)*cos(theta3)) - l1*sin(theta1) - l2*cos(theta1)*cos(theta2)]
[                                 0,                                 0,            0,                                                                                                                            1]
 

使用eval函数带入符号变量值

theta1=-pi/3;theta2=0;theta3=pi/3;
l1=0.2;l2=0.6;l3=0.6;
T_foot=eval(T_foot)

结果为:
T_foot =

    0.8660    0.5000         0    0.5196
   -0.4330    0.7500   -0.5000   -0.8794
   -0.2500    0.4330    0.8660   -0.2768
         0         0         0    1.0000

 

posted @ 2018-11-20 19:26  骏骏  阅读(579)  评论(0编辑  收藏  举报