Mathematica中偏导数符号的传统描述形式转换
以下内容由WolframBlogs:VitaliyKaurov, Technical Communication & Strategy回答提问给出的答案翻译、改编、整理、扩充,原文请点击文章下面左侧的“阅读原文”. 文章中彩色粗体表达式为输入表达式,执行结果显示为黑色非粗体。
在Mathematica中的偏导数的几种描述形式如下:
而它们应该具有的传统描述形式则应该为
一般使用Defer函数可以阻止Mathematica自动计算D,如果借助传统形式描述函数TraditionalFrom可以将求导表达式描述为传统形式,但是对于Derivative求导则会计算。其转换Mathematica表达式为
具体计算效果如下:
由这个结果出现两个问题:
(1) 第二种导数描述不具有传统描述形式;
(2) 第三种不具有最简描述结构。
由于所有的导数的输入的基本结构都为其中的第二种描述形式,即
Derivative[indexs][fname][vars]
其中indexs是求导阶数列表,fname为函数名,vars变量列表。
在Mathematica中输入并计算如下表达式
可得各偏导数的输入结构如下:
所以可以构造如下一个统一的函数来解决这样两个问题,函数表达式如下:
它会自动读取Derivative[indexs][fname][vars]中的阶数列表,函数名和变量列表,并自动转换为传统描述形式。其使用方法非常简单,只要将偏导数结果放入该函数作为参数输入就可以了。
例如将上面的三个偏导数结果放入函数,或者在列表后加上//pdConv,则可以得到传统描述形式:
这应该就是我们需要的结构了:
对于这样得到的结果,如果我们将结果复制后重新计算一遍,将去掉pdConv函数中Defer函数赋予的Hold属性,转换为计算形式,将函数f赋予具体的函数,则可以执行导数计算,得到对应的求导结果。如输入
在执行计算时单击“是”按钮,则可得如下结果:
再次输入并计算
得到结果为21600 x2 y2 z4。即对函数g(x,y,z)=x4 y5 z6分别关于x,y,z分别求2,3,2阶偏导数。
这里定义的函数pdConv的作用不仅仅包含了Defer函数的功能,也将显示结果转换为了传统描述形式显示,同时还起到了一定的化简的作用。对于一些不需要简化的Mathematica计算式如果希望将输入显示为传统形式,可以直接使用该函数起到形式转换的目的,不过其作用也就相当于两个命令Defer和TraditionalForm的组合得到的结果。如输入并执行如下两个表达式
它们两个得到的显示结果都一样,都为