符号运算
①首先定义符号变量(中间用“空格号”隔开)
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