最近在学习机器人系统的动力学建模,涉及大量的符号计算,用手来算显然时费力不讨好的,最终我在Maple,Matlab和Mathematica三者中选择了后者。下面记录一些使用技巧和说明:
求导 f ' / f '[t] / D[f,t]
对于f ',它并不指定导数关于哪个变量求导,所以一般用于单变量求导,返回的是一个隐函数(lambda函数),其中#1表示输入参数中的第一个参数,例如
a[x_] := x^2; a' (* INPUT *)
2 #1 & (* OUTPUT *)
a[x_] := x^2 + y^2; a' (* INPUT *)
2 #1 & (* OUTPUT:这里因为a只是x的函数,所以单引号求导时把y当常数 *)
a[x_] := x^2; a'[5] (* INPUT *)
10 (* OUTPUT:这说明,这种方式非常适合求单一变量(如时间t)在某一时刻的导数值*)
a[x_] := x^2; a'[y] (* INPUT *)
2y (* OUTPUT:这要格外注意,后面[y]中其实是求a中唯一变量x的导函数在x=y处的值,而非对a关于y求导*)
a[x_, y_] := x^2 + y^2; a'(* INPUT *)
a' (* OUTPUT:如果是多变量,那么这个单引号求导其实就无法具体写出了只能写个a' *)
a[x_, y_] := x^2 + y^2; a'[1,2](* INPUT *)
a'[1, 2] (* OUTPUT:可以看出多变量时,这么写也就是形式上求导,也没法代入求值 *)
从返回值也能看出,f '[t]这种其实就是单一变量求导后代入t 而已,也就是,求函数a[x_]的导数在x=t处的导数值。此外,如果用单引号求导,还容易出现常值函数问题,这在数学上没问题,但是求出的东西让人看着很难受,所以一般我们都进行替换,如下:
0'(* INPUT *)
0 &(* OUTPUT *)
0' /. {0

文章介绍了在学习机器人动力学建模时,如何在Mathematica中有效地进行符号计算,包括使用单引号和D[]求导的区别,以及在处理Lagrangian方程时的技巧。
最低0.47元/天 解锁文章
5201

被折叠的 条评论
为什么被折叠?



